我们已经从具有Websphere(8.5.5 Service Pack 13)和默认Axis2实现的JAX-RPC服务迁移到JAX-WS服务。所有服务运行正常,但1个客户端的相同操作却出现奇怪的错误,而其他操作却正常。我们启用了SOAP日志,并使用SOAPUI尝试了相同的请求,效果很好。下面是堆栈跟踪。 GetTransactionsV1R8RequestType
没有扩展GetTransactionsRequestType
。
Caused by: javax.xml.ws.WebServiceException: An internal error occurred during JAX-WS marshalling. An object of type com.kk.v1.GetTransactionsV1R8RequestType cannot be converted into the destination type of com.kk.v1.GetTransactionsRequestType
at org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:173)
at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70)
at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:118)
at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createRequestSignatureArgs(MethodMarshallerUtils.java:482)
at org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMethodMarshaller.demarshalRequest(DocLitBareMethodMarshaller.java:192)
at org.apache.axis2.jaxws.server.dispatcher.JavaBeanDispatcher.createRequestParameters(JavaBeanDispatcher.java:322)
at org.apache.axis2.jaxws.server.dispatcher.JavaBeanDispatcher.invoke(JavaBeanDispatcher.java:102)
at org.apache.axis2.jaxws.server.EndpointController.invoke(EndpointController.java:111)
at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:161)
最佳答案
经过很多努力,我找到了根本原因。在这种情况下,客户端使用原始的SOAP XML
而不是HTTP
调用我们的API。 XML的请求名称为GetTransactionsV1R8RequestType
,并且已针对XSD / schema成功验证了请求。在HTTP
连接中,客户端将值为的SOAPAction
属性设置为“ getTransactions”,这是API的初始版本。请求名称为XML
为getTransactionsV1R8RequestType
,其预期的SOAP操作为“ getTransactionsV1R8”。
设置正确的SOAPAction
值可以解决此问题。
与此有关的另一个观察结果是GetTransactionsV1R8RequestType
并没有扩展GetTransactionsRequestType
,而是扩展了GetTransactionsV1R5RequestType
,如果我们将SOAPAction
的值设置为getTransactionsV1R5
SOAP XML
的“ GetTransactionsV1R8RequestType
”,则可以通过操作“可以将getTransactionsV1R5
作为GetTransactionsV1R8RequestType
强制转换为GetTransactionsV1R5RequestType
。