2013-05-01 133 views
0

我在編寫一個只有一個按摩參數的web服務,其餘的都是頭部參數。 我的Web服務是這樣的:在CXF Web服務中使用@WebParam(header = true)

@BindingType(SOAPBinding.SOAP11HTTP_MTOM_BINDING) 
    @MTOM 
    @WebService(targetNamespace = WS_NAMESPACE + "/FileSvc") 
    @Service 
    public interface FileSvc 
    { 
     void uploadFile(@WebParam(name = "dataHandler") @XmlMimeType("application/octet-stream")DataHandler dataHandler, 
        @WebParam(header = true, name = "fileName") String fileName, 
        @WebParam(header = true, name = "fileSize") long fileSize); 
    } 

的服務工廠的定義是這樣的:

<bean id="fileSvcProxyFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> 
      <property name="serviceClass" value="com....FileSvc"/> 
      <property name="address" value="http://.../FileSvc"/> 
      <property name="bus" ref="client_bus"/> 
      <property name="dataBinding" ref="globalJAXBDataBinding" /> 
    </bean> 

當我嘗試 - 從當我嘗試加載測試該服務的Java客戶端,我得到這個錯誤服務:

引起: org.apache.cxf.service.factory.ServiceConstructionException:消息 部分{HTTP://.../FileSvc} Messag的文件名e {http://.../FileSvc} uploadFile無法處理。這可能是 由於沒有JAX-WS服務 工廠bean而使用JAX-WS特定類型所致。

任何人都可以向我解釋這個webParam的工作原理嗎?

感謝,

回答

0

嘗試取出globalJAXBDataBinding的事情,看是否有幫助。或者,將@RequestWrapper和@ResponseWrapper註釋添加到接口方法中以指向適當的包裝類型。不是100%肯定會起作用,但值得一試。

如果它仍然不起作用,一個小的完整的測試用例將不勝感激。

+0

我刪除了globalJAXBDataBinding(它是我們爲CXFs JAXBDataBinding編寫的包裝器),它看起來像是有效的。謝謝 – user1799339 2013-05-02 08:28:23

+0

你可以解釋爲什麼這應該工作。我真的需要使用globalJAXBDataBinding,因爲我們有更多的5,000個類和大約20個Web服務。所以我們必須使用全局綁定。我沒有看到如何使用包裝幫助(我必須讓整個按摩身體僅用於DataHandler或C#客戶端不能使用該服務),但它沒有任何約定。我有更多的選擇,還是它可以幫助你看到整個畫面? – user1799339 2013-05-02 11:58:53