我有 java 网络服务。我使用 apache-cxf 生成 wsdl。其他开发人员使用生成的 wsdl 在某些特定的会计程序上创建客户端。
当此客户端尝试调用 Web 方法时,我可以看到解组错误 - 肥皂消息包含意外的命名空间。
org.apache.cxf.interceptor.Falut Unmarshalling Error: unexpected element(uri:"my.namespace.here", local:"documentNumber"). Expected elements are <{}id>,<{documentNumber}>,{here list of other DTO fields}.
我希望得到的请求示例
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<m:publicInnerInvoiceDocument xmlns:m="my.namespace.here">
<arg0>
<documentNumber>String</documentNumber>
</arg0>
</m:publicInnerInvoiceDocument>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我使用 Altova xml spy 收到此消息 - 使用 wsdl 描述创建请求的工具。我的服务很好。
我从其他客户端收到的消息示例
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<m:publicInnerInvoiceDocument xmlns:m="my.namespace.here">
<arg0 xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
<m:documentNumber>000001</m:documentNumber>
</arg0>
</m:publicInnerInvoiceDocument>
</soap:Body>
</soap:Envelope>
客户开发人员说他没有工具来控制请求的创建。他使用的平台自动执行并且执行错误。
我最好的解决方法是使用@HandlerChain 处理肥皂并纠正我收到的肥皂消息。我什至不知道这是否可能。
我不喜欢它。你还有其他建议吗?可能是因为错误的 Web 服务描述吗?