我们有一个用Java编写的网站,可以进行Web服务调用。最近,我们注意到我们正在收到来自Web服务的null响应(端点是我们未维护的第三方)。 我已经找到了我们的代码失败的点,它在我们的存根中。请参阅下面的代码,代码在两个System.out.println行之间失败。我的问题是没有抛出异常,所以我不知道为什么_operationClient.execute(true);失败。有人会知道如何解决这个问题吗?
public SuggestXResponseE suggestX(SuggestXE suggestX0)
throws java.rmi.RemoteException {
org.apache.axis2.context.MessageContext _messageContext = null;
try {
org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[0].getName());
_operationClient.getOptions().setAction("http://www.test.com/service/suggestX");
_operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true);
addPropertyToOperationClient(_operationClient, org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR, "&");
// create a message context
_messageContext = new org.apache.axis2.context.MessageContext();
// create SOAP envelope with that payload
org.apache.axiom.soap.SOAPEnvelope env = null;
env = toEnvelope(getFactory(_operationClient.getOptions().getSoapVersionURI()),
suggestX0,
optimizeContent(new javax.xml.namespace.QName("http://www.test.com/service",
"suggestX")));
//adding SOAP soap_headers
_serviceClient.addHeadersToEnvelope(env);
// set the message context with that soap envelope
_messageContext.setEnvelope(env);
// add the message contxt to the operation client
_operationClient.addMessageContext(_messageContext);
System.out.println("Log message 1");
//execute the operation client
_operationClient.execute(true);
System.out.println("Log message 2");
org.apache.axis2.context.MessageContext _returnMessageContext = _operationClient.getMessageContext(
org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_IN_VALUE);
org.apache.axiom.soap.SOAPEnvelope _returnEnv = _returnMessageContext.getEnvelope();
java.lang.Object object = fromOM(
_returnEnv.getBody().getFirstElement(),
SuggestXResponseE.class,
getEnvelopeNamespaces(_returnEnv));
return (SuggestXResponseE) object;
} catch (org.apache.axis2.AxisFault f) {
// Handle exception.
}
finally {
_messageContext.getTransportOut().getSender().cleanup(_messageContext);
}
}
答案 0 :(得分:2)
System.out.println("Log message 1");
//execute the operation client
_operationClient.execute(true);
System.out.println("Log message 2");
如果您收到第一条日志消息而不是第二条消息,则会发生以下两种情况之一:
System.exit()
正在_operationClient.execute()
内的某个地方被调用。你可以通过流程退出来认识到这一点。
更有可能的是,_operationClient.execute()
正在抛出一些东西。
你说它不会抛出异常,但它可能会抛出Error或其他类型的Throwable。通常不建议捕获非异常throwable,但是你可以添加一些代码来暂时执行:
try {
_operationClient.execute(true);
} catch (Throwable t) {
log.error(t);
throw t;
}
您可能会发现自己获得了OutOfMemoryError
或NoClassDefFoundError
,因为部署中缺少某些jar,例如。