6

我有在 jboss 上的本地机器上运行的应用程序。
我下载了wsdl文件,在eclipse中生成java代码。运行并出现异常:

处理请求时捕获异常:反序列化错误:java.lang.NumberFormatException:对于输入字符串:“”

(应用程序可以与另一个简单的 WS 一起正常工作)。

经过一番谷歌搜索后,我发现代码生成了错误的 xml:
预期:

<soapenv:Body>
    <ns1:setLevel soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:ns1="###">
        <id xsi:type="xsd:string">x2148</id>
        <level xsi:type="xsd:long">5</level>
    </ns1:setLevel>
</soapenv:Body>

但是通过 TCPMon/Fiddler 我发现我的请求看起来像这样:

<soapenv:Body>
    <ns1:setLevel soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:ns1="###">
        <id xsi:type="xsd:string">x2148</id>
        <level href="#id0" />
    </ns1:setLevel>
    <multiRef id="id0" soapenc:root="0"
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        xsi:type="xsd:long" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">5</multiRef>
</soapenv:Body>  

谷歌搜索后我发现解决方案是改变

<parameter name="sendMultiRefs" value="true"/>

在服务器端的 server-config.wsdd 文件中设置为 false。但是我没有这个文件。
有什么解决办法吗?我只看到一种解决方案——在运行时更改 xml 文件——但这听起来不太好。

4

1 回答 1

1

server-config.wsdd 文件是远程服务描述的一部分。发布您下载的 WSDL 的实体(服务提供者)必须对其进行更改并重新部署。如果您发布了服务,那么您很幸运……您可以更改它。如果与第三方打交道,你会很不走运。

我们通过将样式表应用于响应以展平多个引用来处理类似的问题。实际上 [here][1] 从 StackOverflow 获得样式表创建 XSLT 转换以展平 multiRef 编码的 SOAP 消息

它可以很好地将响应展平回您期望的模式。但请注意,它不处理 multiRefs 的 multiRefs。我自己需要一个解决方案。

于 2013-02-05T22:01:16.583 回答