2011-08-11 50 views
12

Java 6 JAX-WS「wsimport」實用程序在給定WSDL文件但生成一個令人討厭的異常的情況下生成Web服務框架(接口)的功能非常出色。Java SOAP「wsimport」 - 強制從文檔/文字包裝的WSDL綁定綁定?

當給一個使用SOAP Document/literal wrapped stylealso described here)一個WSDL它產生具有服務接口「裸」 SOAP binding parameter style(具有多個參數,並返回擴展爲如方法簽名"holder" objects值),而不是簡單的纏繞參數和返回值由WSDL指定。其他工具,比如Axis2 wsdl2java,只是簡單地使用包裝器元素作爲輸入參數並返回值,而不是自動「解開」它們。

是否有可能告訴「wsimport」將SOAP綁定參數保持爲「包裹」而不是「裸露」?

回答

31

據我所知,你需要指定自定義綁定文件來禁用包裝風格:

<bindings 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    wsdlLocation="OperationService.wsdl" 
    xmlns="http://java.sun.com/xml/ns/jaxws"> 
     <!-- Disable default wrapper style --> 
     <enableWrapperStyle>false</enableWrapperStyle> 
</bindings> 

,然後調用wsimport的

$ wsimport -b binding.xml OperationService.wsdl 
+2

+110感謝我指出了正確的方向! – maerics

14

從@ beny23答案是正確的軌道上;然而,事實證明,你可以embed the JAX-WS binding instructions into the WSDL file itself,這樣就無需爲「-b binding.xml」開關添加到「wsimport」命令:

<wsdl:portType name="HelloPortType"> 
    <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 
    </jaxws:bindings> 
    <wsdl:operation name="sayHello">...</wsdl:operation> 
</wsdl:portType> 
+0

但是這不會影響WSDL的所有用戶嗎?所以如果你不想讓包裝在你身邊(無論是客戶端還是服務器端),但是你的合作伙伴在另一端,你阻礙了他們? – dbreaux

+1

@dbreaux對於JAX-WS用戶來說,似乎是這樣,至少;我只是想指出另一種選擇,以防它更適合某些用戶(比如我= P) – maerics