2011-11-08 24 views
2

我正在使用CXF/JAXB代碼優先的Web服務。我希望能夠修改某些輸入的WSDL定義。CXF/JAXB代碼優先服務:修改輸入的XMLSchemaType

例如,給定下列接口片段:

@WebMethod 
public void Something(@WebParam(name="date") Date date); 

的WSDL將產生用於輸入「日期」是「日期時間」 xml元素的XMLSchema的。我希望它只是一個「日期」元素。

這也將是不錯的可以指定一些其他輸入的屬性,如的minOccurs等

對於自定義對象,子元素可以通過註釋,定義所有的這些事情作爲XmlElement和XmlSchemaType。但是,這些註釋在輸入參數上不合法。

我知道早期版本的CXF沒有處理這個問題,但我不確定後面的版本。我目前正在運行CXF 2.3.5。

回答

2

下面是我從CXF用戶列表中得到了答案:

1)通過JDK代言機制之一核可JAXB 2.2 API罐子。 然後可以在參數上使用XmlElement和XmlSchemaType註釋。

(這是不完全正確 - 2.2 JAXB說我支持並允許在參數@XmlElement註解,但它並沒有讓@XmlSchemaType註釋)

2)創建包裝類型豆(您可以使用java2ws -warpperBeans作爲起點),並將@ RequestWrapper/@ ResponseWrapper註釋添加到指向它們的方法 。您可以通過bean中的註釋精確控制外觀模式的外觀。

3)您可以將AbstractServiceConfiguration的額外子類配置到工廠中,您可以重寫某些設置各種方法的工具,例如minOccurs/maxOccurs/etc。類型的東西。非常好的控制水平,但非常複雜。

+0

我最終使用了選項2,它給了我足夠的控制權來滿足我的需求,儘管它會添加相當數量的代碼來調整WSDL。 – Jeremy