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

Java 什么类型的异常是(0)null?,java,exception,axis,Java,Exception,Axis,我正在使用ApacheAxis,并且得到类型为(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.l

我正在使用ApacheAxis,并且得到类型为
(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
,但它看起来像
statusMessage
null
。是:

(0)null
部分来自
“(“+returnCode+”)+statusMessage
<代码>状态消息本身分配在:

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.
}
此后,由于返回代码为
0
(因为
rc
null
),因此执行
if
块和
else if
块。它最终到达
else
块,在那里生成
AxisFault
异常

您会注意到,
statusMessage
本身是
null
。我唯一能看到它设置此属性的地方是打开的,那就是
readHeadersFromSocket
方法

不设置状态消息和返回代码的唯一方法是,如果它们已经为
null
,或者如果该方法前面出现错误,这会导致控件中断从开始的
for
循环。特别令人感兴趣的是and,它们都是
if
语句,如果它们的测试条件为真,它们将
中断
。其中一条语句检查
inp.read()
的值是否为
-1
(这意味着已到达流的末尾),另一条语句检查读取内容的长度是否为
0
。如果存在网络错误(即,未从套接字读取任何内容)或服务器未返回任何内容(零长度数据),则这些条件可能为真。因此,如果这些条件中的任何一个是真的,控制就会脱离循环。最后,
readFromSocket
将抛出异常,因为它无法获取返回代码。但由于故障发生在它甚至可以设置错误消息之前,因此您会收到一条
null
错误消息


tl;博士可能存在某种网络/读取错误。

Wow。这真是一个奇怪的错误。是时候看看HTTPSender的代码了……你能澄清一下这是1.4还是1.4.1吗?后者仅在前者发布6个月后发布。(回到2008年……如果可能的话,我会敦促升级:)啊,Axis,而不是Axis2。对不起,我错了。。。因此,2006年(而不是2008年:)似乎很有希望。没有为整数指定值,因此与未定义的错误消息结合使用时,这将返回
(0)null
。这可能会对您有所帮助:感谢您的详细解释。谢谢。
String statusMessage = msgContext.getStrProp(HTTPConstants.MC_HTTP_STATUS_MESSAGE);
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.
}