2

我有 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 服务描述吗?

4

0 回答 0