2013-01-14 71 views
3

我的應用程序在我的本地機器上運行在jboss上。
我下載了wsdl文件,在eclipse中生成java代碼。運行並有異常。
處理請求時捕獲異常:反序列化錯誤:java.lang.NumberFormatException:對於輸入字符串:「」
(應用程序正確地與另一個簡單WS一起工作)。
一些谷歌上搜索,我發現代碼之後產生錯誤的xml:
預期:multiRef生成的xml通過WS發送

<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的/小提琴手,我發現我的請求看起來像:

<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文件 - 但聽起來不太好。

回答

1

server-config.wsdd文件是遠程服務描述的一部分。發佈您下載的WSDL(服務提供者)的實體必須更改它並重新部署。幸運的是,如果你發佈了服務......你可以改變它。如果與第三方打交道,倒黴你。

我們通過將樣式表應用於平坦化多重參考來處理類似的問題。事實上,從StackOverflow獲得樣式表[這裏] [1] Creating XSLT transform to flatten multiRef encoded SOAP message

它的工作原理非常好,可以將響應平鋪回您期望的模式。但要注意,它不處理multiRefs的multiRefs。我自己需要一個解決方案。

+0

鏈接上的Alexs解決方案確實可以處理MultiRefs –

+0

是的,但multiRefs的multiRefs是一個問題。它無法擴展到無底層級。但它對我有用! –