2012-01-24 36 views
5

我們正在開發一個支持Web服務的MDA平臺。用戶可以在運行時提供WSDL,並且我們在內部使用JAX-WS生成所有工件(服務器的服務接口和實現,以及客戶的使用者)。使用JAX-WS進行WSDL運行時驗證

我們希望在用戶提供的WSDL文檔上添加驗證。現在用戶必須使用Oxygen,XMLSpy或網絡工具等外部工具進行驗證,但我們希望將其添加爲我們系統的一部分。一個很好的功能將是模式驗證,包括WSDL的嵌入式模式。

在JAX-WS(RI)有在運行時模式驗證(使用@SchemaValidation註解)的支持,但我們還沒有找到WSDL驗證的任何支持。

我們試圖整合Eclipse's WSDL validator,但它似乎並沒有爲我們工作。

有沒有辦法用JAX-WS來做到這一點? 如果沒有,我們可以整合哪個驗證框架?

感謝

回答

2

有一個在你的問題有點混亂,我需要先澄清一下。

你似乎要驗證的WSDL(語法+ WS-I)和XSD,嵌入或由WSDL外部引用的能力。另一方面,您可以引入@SchemaValidation,它實際用於驗證實例文檔。

在傳統的開發方法,也許有人會說,你要至少驗證設計時工件(WSDL + XSD文件)的能力。

對於這種情況的話,我會建議如下:

WSDL:爲WS-I一致性測試,請大家看看test tools section of the WS-I site。目前尚不清楚他們與他們的測試工具簽訂的許可協議如何與您的許可證協同工作,但至少它應該讓您知道如果它不適用於您,該如何看待。

更新:其他WSDL驗證資源: - Eclipse基於,如何在Eclipse外部使用。

XSD文件:如果你真的需要單獨的驗證了XSD文件,事情可能會變得棘手了生產高質量的產品; WSDL4J在這裏沒有太大的幫助,我相信XSOM是這種工作的方式。你必須從類型部分提取內容作爲一個或多個XSD文件(可以是多個XSD文件,看一些例子,微軟的SharePoint WSDL在我看來是一個很好的測試用例),指定一個基本URI每個提取的XSD都與WSDL位置相匹配,然後使用XSOM來驗證這些位置。

既然你正在生成的客戶端,你最有可能不關心驗證,說的HTTP標頭(SOAP 1.1/HTTP,SOAPAction的,如果它的WSDL操作定義相匹配)的。如果您最終也會對此產生興趣(我將其稱爲運行時驗證),那麼我會在您的方法中推薦一個不同的佈局(即,我不會依賴@SchemaValidation,而是通過透明且通用的代理服務)。

+0

我提到了@SchemaValidation只是爲了避免實例和模式/ wsdl驗證混淆。正如你所說,我問的是設計時工件的驗證。 關於WS-I站點,我看了一下這些工具,可能會工作,但我不確定授權。 關於XSD,我們已經將這些與WSDL分開,並且我們支持多個嵌入式模式。我將研究如何使用XSOM來驗證這些內容。 關於您的最後一點,我們也會生成服務器,並驗證這些標頭可能很有趣。 感謝您的回覆! – Denian

+1

出於某種原因,在快速瀏覽許可證文件後,在我看來,WS-I工具堆棧對封閉或商業工具不友好。我想指出這一點,以確保你也看看這些方面。爲了驗證頭文件,我看到了客戶端發送沒有正確SOAPAction的正確Soap體的情況。另外,謝謝澄清,我認爲@SchemaValidation是如此。 –

+0

是的,你是對的:http://netzooid.com/blog/2006/11/26/is-ws-i-open-look-at-their-test-license/ 我認爲我們必須找到其他解決方案或框架。 關於驗證XSD,我用XSOMParser創建了一個ErrorHandler,它工作正常。 我認爲我應該打開這個問題,因爲主要關注的是WSDL驗證,但無論如何非常感謝您的回覆。 – Denian