我試圖在spring beans配置文件中配置jaxb2Marshaller,但是Im對Spring和JAXB來說很新,所以我可能會以錯誤的方式去解決它。marshal/unmarshal基於2個不同模式的2個不同的類
我想要實現的是相同的bean,它將基於2個不同的模式對兩個不同的類進行編組/解組。也許這是不可能的,因爲當我配置並運行我的測試時,他們在配置中的第二類失敗(AccountResponse)。
這是XML配置:
<bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="marshallerProperties">
<map>
<entry key="com.sun.xml.bind.namespacePrefixMapper">
<bean id="NamespacePrefixMapperImpl" class="org.lp.soa.controller.xml.LpsNamespacePrefixMapper" />
</entry>
</map>
</property>
<property name="classesToBeBound">
<list>
<value>org.lp.soa.controller.data.request.AccountRequest</value>
<value>org.lp.soa.controller.data.response.AccountResponse</value>
</list>
</property>
<property name="schemas">
<list>
<value>classpath:schema/AccountRequest.xsd</value>
<value>classpath:schema/AccountResponse.xsd</value>
</list>
</property>
</bean>
如果我註釋掉AccountRequest.xsd從配置值,然後再次運行我的測試元帥/解組第二類(AccountResponse)他們都傳遞,如果我然後取消註釋它我得到的錯誤:org.xml.sax.SAXParseException:cvc-elt.1:無法找到元素'accountResponse'的聲明。
我是不是正在做錯事情?是不是應該可以用兩個模式處理兩個類?
謝謝, Yoav。
你需要JAXB?不要使用它。使用像XStream這樣的不需要配置的東西,並且會自動編組/解組業務對象。爲什麼要花費*任何時間來做這件事時,你可以專注於你的應用程序? – ianpojman
謝謝! XStream看起來很有趣,不好試試。 – poeticGeek
我確實想要驗證與定義的模式生成的xml,XStream可以做到這一點嗎? – poeticGeek