请求在我的本地环境中正常工作,并且在部署的环境中不起作用.来自包括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匹配.