请求在我的本地环境中正常工作,并且在部署的环境中不起作用.来自包括soapui在内的各种客户尝试了请求.代码部署在WAS上
Axis2的
org.apache.axis2.AxisFault: First Element must contain the local name,Envelope,but found definitions at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:123) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67) at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1604) Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name,but found definitions at java.lang.Throwable.<init>(Throwable.java:67)
解决方法
这是服务器未返回预期的xml响应格式的问题.这可能是由使用不正确的服务端点URL引起的.
要解决此问题,请确保Axis代码中使用的URL与代码所基于的WSDL中的端点的URL相匹配.
WSDL中的位置:
<service name="ServiceName"> <port name="PortName" binding="typens:PortNameBinding"> <soap:address location="http://yourdomain.com/api/soap/"/> </port> </service>
代码中的相应位置通常位于两个位置的ServiceNameStub类中:
/** * Default Constructor */ public ServiceNameStub( org.apache.axis2.context.ConfigurationContext configurationContext) throws org.apache.axis2.AxisFault { this(configurationContext,"http://yourdomain.com/api/soap/"); } /** * Default Constructor */ public ServiceNameStub() throws org.apache.axis2.AxisFault { this("http://yourdomain.com/api/soap/"); }
只需确保这两个URL与您在WSDL文件中的服务端口的soap:address处找到的URL匹配.