java - (0)null 是什么类型的异常?

标签 java exception axis

我正在使用 Apache Axis,我收到类型为 (0)null 的异常。这是部分堆栈跟踪:

....
....
org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:281)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:120)
    at java.lang.Thread.run(Thread.java:744)
Caused by: (0)null
    at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at com.netsuite.webservices.platform_2012_1.NetSuiteBindingStub.upsertList(NetSuiteBindingStub.java:11841)
....
....

以下是我在 HTTPSender 源代码中看到的。

....
AxisFault fault = new AxisFault("HTTP", "(" + returnCode + ")" + statusMessage, null, null);
....
throw fault;
....

最佳答案

所以异常是 AxisFault 类型,但看起来 statusMessagenullLine 444是:

AxisFault fault = new AxisFault("HTTP", "(" + returnCode + ")" + statusMessage, null, null);

(0)null部分来自"("+ returnCode + ")"+ statusMessagestatusMessage 本身在 line 742 中分配:

String statusMessage = msgContext.getStrProp(HTTPConstants.MC_HTTP_STATUS_MESSAGE);

returnCode 在方法的早期设置为 0。接下来的几条语句应该将其设置为正确的值:

Integer rc = (Integer) msgContext.getProperty(HTTPConstants.MC_HTTP_STATUS_CODE);
if (rc != null) {
    returnCode = rc.intValue();
} else {
    // No return code?? Should have one by now.
}

在此之后,if block 和任何 else if block 都不会被执行,因为返回码是 0(因为 rcnull)。它最终出现在 else block 中,并在其中生成 AxisFault 异常。

您会注意到 statusMessage 本身是 null。我唯一可以看到它设置此属性的地方是 line 641 ,这是 readHeadersFromSocket 方法。

状态消息和返回码不会设置的唯一方法是如果它们已经是null或者如果有一个方法中较早的错误,导致控制跳出开始于 line 581for 循环.特别感兴趣的是 line 585line 598 ,这两个都是 if 语句,如果它们的测试条件为真,它们将 break 退出循环。其中一个语句检查 inp.read() 的值是否为 -1(这意味着已经到达流的末尾),另一个检查查看读入的长度是否为0。如果存在网络错误(即没有从套接字读取任何内容)或者没有从服务器返回任何内容(零长度数据),这些条件可以成立。因此,如果这些条件中的任何一个为真,控制就会跳出循环。最终,readFromSocket 将抛出异常,因为它无法获得返回码。但是因为失败发生在它甚至可以设置错误消息之前,所以您会收到一条 null 错误消息。

; dr; 可能存在某种网络/读取错误。

关于java - (0)null 是什么类型的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083362/

相关文章:

java - 如何在不明确指定的情况下获取 Magento Product 的所有附加属性

javascript - 具有相同配置的两个 Chartjs 图表类型的 x 刻度未对齐 - 唯一的区别是 "chart type"(条形图/折线图)

r - 使用 ggplot 绘制辅助轴

java - 字符串列表中的类对象列表

java - 如何在 Android map Activity 中显示特定标记?

java - PayPal REST API java sdk - 自定义配置文件

symfony - 如何添加自定义错误页面Symfony 3

c# - 如何在异常中显示对象列表?

java - 如何用java加密二维码

java - 无法有效地使用 Java 中的 Multi Catch