2016-03-01 67 views
1

所以我在NetBeans 8.1中有一個Web服務,爲此我使用嵌入式XSD(以及外部參考)編寫了wsdl。 現在我需要能夠在應用程序的其他實例上調用SOAP服務: 即實例X調用實例Y上的方法作爲應用程序的次要目標。 我不喜歡使用NetBeans自動SOAP客戶端嚮導,因爲我會指向我正在構建的服務 - 它可能會在構建過程中成爲雞和蛋類型的東西。其次,我已經擁有了Web服務使用的所有必需的JAXB類型,因此構建客戶端應該很容易嗎?來自wsdl的Java.xml.validation.Schema

當我想使用JAXB將我的請求對象編組爲javax.xml.soap.SOAPBodyElement(我當前的策略是爲客戶端部分使用SAAJ)時,我的麻煩開始了,但是如何將模式添加到編組?該模式嵌入在wsdl中,我無法弄清楚如何引用它。 我想我可以將模式部分拆分爲單獨的XSD文件,但我缺少@WebService的註釋選項,我可以提供一個XSD文件,就像我可以提供一個wsdl文件(當前爲'wsdlLocation'因爲它是嵌入式的,所以指向兩個wsdl & xsd)。

我想我可能不得不在客戶端(它啓用服務器端)做XSD驗證,因爲從wsdl獲取一個Schema對象似乎很棘手 - 可能以某種方式?

+0

我從來沒有解決過這個問題,而是選擇爲特定用例使用專用接口,該接口將子任務卸載到應用程序的其他實例(這是雲之前/碼頭世界)。相反,我只需將對象作爲application/x-java-serialized-object發送,讓它們處理並返回給我。整個任務也可以通過soap ws,但效率不高。 –

回答

0

您可以讀取.wsdl作爲InputStream並將其轉換爲DOMResult。然後您可以從DOMResult中獲取「模式」節點並將其轉換爲DOMSource。藉此,您可以使用Source []構造函數創建一個Schema對象。

我自己沒有得到它的工作,我有太多的進口,它成爲管理命名空間的地獄。我在此發現的唯一代碼是Mark Hansen的「使用Java Web服務的SOA」,第7.5.1章:驗證。我不認爲我可以把這個代碼放在這裏,但是你用於這個用例的所有代碼都在那裏。

+0

感謝您的提示 - 我會接受答案,但在此期間我走了一條不同的路線 - 因爲它只是內部調用,我只是實現了一個servlet來接收ObjectStreams - 它執行得更好,性能轉變在這裏至關重要。 –