2010-02-05 53 views
29

我們使用「從Java開始」的方法使用Metro 1.5堆棧創建JAX-WS 2.0 Web服務。當我們在我們的一個Web服務中指定一個像SoapUI這樣的標準工具時,它表明WebMethods的參數是可選的。生成的xsd顯示minOccurs = 0。如何創建所需的WebMethod參數

我需要一種在「從Java開始」方法中使WebMethod參數成爲必需的方法(也許minOccurs = 1在xsd中)。我會認爲這有一個Java註釋,但我一直無法找到一個。 XmlElement註釋具有必需的屬性,但XmlElement不能應用於WebMethod參數。

有沒有辦法讓我的WebMethod參數需要,手動編輯xsd和設置minOccurs爲1?

回答

28

我已驗證Metro 2.0確實允許您在參數上設置@XmlElement(required=true)。生成的xsd沒有minOccurs=0。它將minOccurs留在生成的xsd中,因此它將默認值設置爲1.

您還必須將JAX-WS 2.2 webservices-api.jar置於endorsed/目錄中來升級JDK。

我發佈了相同的問題on the Java forums

感謝jitu的答案,並指出minOccurs默認爲1,因此使其離開.xsd具有所需的效果。

當在參數SoapUI上設置@XmlElement(required = true)時,不再指出該參數是可選的。

6

生成的xsd顯示minOccurs = 0。

這是根據規範:任何非基元是可選的,只需要基元。

我需要一種在「從Java開始」方法中使WebMethod參數成爲必需的方法(也許minOccurs = 1在xsd中)。

這是不可能的,除非你使用前面提到的基元。實際上,這就是爲什麼Java-sucks(是的,開發者喜歡它,但是it just does not work)的原因之一:它的脆弱,合同可能會改變(!),它並不能給你所有你需要的控制,它不fit well with WS-Security等等。所以,確實,contract-first是不愉快的,但至少,它的工作原理。

+0

感謝您的意見和鏈接。我希望那些臃腫的Web服務書(其中一些我已經閱讀 - 我的意思是通過檢查)可以像你一樣清楚地說出這些。 – 2010-02-09 04:25:06

+0

@Dean不客氣。並感謝關於JAX-WS 2.2的反饋(即使這不是最初問題的範圍)。 – 2010-02-09 04:45:39

+2

我會說,WSDL - 第一同樣不起作用。您鏈接到的博客討論瞭如何使用複雜的Request和Return對象進行包裝,但是這提出了一些問題,例如在底層字段中隱藏所需的東西,濫用重複使用等等......然後,我會舉起一個使用Spring和代理來做類似WebService的東西的例子好像是本地接口的簡單實現。以這種方式對你的本地接口進行編程是讓你忘記它是一個可以通過JAX-WS公開的服務的一部分。 – jcalvert 2011-03-01 21:44:40