Especifications: - 服務器:WebLogic 9.2上固定的客戶。 - 由客戶修正的wsdl和xsd文件定義的Web服務;不允許修改。使用JAXB解組在WebLogic Server
嗨,
在項目中我們需要開發一個郵件系統。這必須與web服務共同完成。我們創建一個從非根xsd元素(不是wsdl)接收自動生成的類的Bean;這個bean做這個普通的工作。郵件系統收到xml文件中定義的元素,我們需要將這些元素信息放到wsdlc生成的類中。有了這個對象,我們可以使用這個公共bean。不可能將郵件請求重定向到web服務。
我們尋找代碼WL9.2資源要做到這一點,但我們沒有發現任何東西。目前,我們已經嘗試使用JAXB這個數據編:
JAXBContext c = JAXBContext.newInstance(new Class[]{WasteDCSType.class});
Unmarshaller u = c.createUnmarshaller();
WasteDCSType w = u.unmarshal(waste, WasteDCSType.class).getValue();
浪費變量是一個DOM元素對象。它不是根元素,因爲根不包含在XSD中
首先,我們需要在一些自動生成的類中添加無參數構造函數。沒問題,我們解決了這個問題,最後我們解組了xml,沒有錯誤異常。但是我們遇到了屬性問題。解組沒有設置屬性;它們都不在任何類中,不是簡單的屬性,也不是大的或短的枚舉屬性。沒有任何類型的XML元素的問題。
我們不能創建「上下文字符串」(包名)的解組「會造成不的ObjectFactory已經通過wsldc創建。如果我們設置模式,則不會創建元素描述並解除崩潰。
這是構建內容:
<taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="wsdlc" classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
<target name="generate-from-wsdl">
<wsdlc
srcWsdl="${src.dir}/wsdls/e3s-environmentalMasterData.wsdl"
destJwsDir="${src.dir}/webservices"
destImplDir="${src.dir}/webservices"
packageName="org.arc.eterws.generated"
/>
<wsdlc
srcWsdl="${src.dir}/wsdls/e3s-waste.wsdl"
destJwsDir="${src.dir}/webservices"
destImplDir="${src.dir}/webservices"
packageName="org.arc.eterws.generated"
/>
</target>
<target name="webservices" description="">
<jwsc srcdir="${src.dir}/webservices" destdir="${dest.dir}" classpathref="wspath">
<module contextPath="E3S" name="webservices">
<jws file="org/arc/eterws/impl/IE3SEnvironmentalMasterDataImpl.java"
compiledWsdl="${src.dir}/webservices/e3s-environmentalMasterData_wsdl.jar"/>
<jws file="org/arc/eterws/impl/Ie3SWasteImpl.java"
compiledWsdl="${src.dir}/webservices/e3s-waste_wsdl.jar"/>
<descriptor file="${src.dir}/webservices/META-INF/web.xml"/>
</module>
</jwsc>
</target>
我的問題是:
- 如何Weblogic的 「解組」 的XML 與JAX-RPC技術,我們可以做 用相同xsd元素?
- 如果是的話,我們該怎麼做?
- 如果沒有,發生任何不復雜 解決這個問題?
- 如果不是,我們必須使用XMLBean技術。或 使用JAXB技術重新生成XSD? 什麼是最佳解決方案?
注意:實際上沒有一個單獨的xsd,而是一個複雜的xsd結構。
wsdl使用Schema,我們將其命名爲A.xsd,其中定義了一對複雜類型。另一方面,郵件服務接收使用其他Schema的文件,我們將其命名爲B.xsd,它將一個元素定義爲一系列A.xsd類型元素。我需要這個A.xsd types元素信息,並且我認爲如果我將正確的dom節點傳遞給JAXB,它將起作用,解組將完成。從我的理解中可以明白,即使元素是在同一個模式中定義的,JAXB也不能這樣做,因爲這不是代碼生成的根文檔。 – Leo 2011-02-11 15:06:41