ris*_*p89 13 java axis exception
我正在使用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)
....
....
Run Code Online (Sandbox Code Playgroud)
以下是我在HTTPSender源代码中看到的内容.
....
AxisFault fault = new AxisFault("HTTP", "(" + returnCode + ")" + statusMessage, null, null);
....
throw fault;
....
Run Code Online (Sandbox Code Playgroud)
Viv*_*ath 10
所以异常的类型的AxisFault,但看起来statusMessage是null.第444行是:
AxisFault fault = new AxisFault("HTTP", "(" + returnCode + ")" + statusMessage, null, null);
Run Code Online (Sandbox Code Playgroud)
这(0)null部分来自"(" + returnCode + ")" + statusMessage.statusMessage本身在第742行分配:
String statusMessage = msgContext.getStrProp(HTTPConstants.MC_HTTP_STATUS_MESSAGE);
Run Code Online (Sandbox Code Playgroud)
returnCode0在方法的早期设置.接下来的几个语句应该将其设置为正确的值:
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.
}
Run Code Online (Sandbox Code Playgroud)
在此之后,由于返回代码(因为是),因此if块和没有else if块被执行.它最终落在生成异常的块中.0rcnullelseAxisFault
你会注意到它statusMessage本身就是null.我能看到它设置此属性的唯一地方是在线641,这是readHeadersFromSocket方法.
状态消息和返回代码将不被设置的唯一方法是它们是否已经存在null,或者如果方法中先前存在错误,则导致控制突破从第581行for开始的循环.特别感兴趣的是第585行和第598行,如果它们的测试条件为真,它们都是不在循环中的语句.一这些语句检查是否的值是(这意味着该流的末尾已到达),则其他的检查,看看是否什么是在读出的长度为.如果存在网络错误(即,没有从套接字读取任何内容)或者没有从服务器返回任何内容(零长度数据),则这些条件可以成立.因此,如果这些条件中的任何一个为真,则控制会突然出现.最终,将抛出异常,因为它无法获得返回代码.但由于失败发生在甚至可能设置错误消息之前,您会收到错误消息.ifbreakinp.read()-10readFromSocketnull
TL; 博士; 可能存在某种网络/读取错误.