poe*_*eek 3 java xml spring jaxb2
我试图在Spring bean的配置文件中配置一个jaxb2Marshaller,但是我对Spring和JAXB还是很陌生,所以我可能会以错误的方式进行操作。
我要实现的是将基于2个不同模式编组/解组2个不同类的同一个bean。也许那是不可能的,因为当我同时配置和运行测试时,它们在配置中的第二个类(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>
Run Code Online (Sandbox Code Playgroud)
如果我从配置中注释掉AccountRequest.xsd值,然后再次运行测试以进行第二个类(AccountResponse)的编组/解组,那么如果我取消注释,则会收到错误:org.xml.sax.SAXParseException :cvc-elt.1:找不到元素'accountResponse'的声明。
我会以错误的方式处理吗?是否应该用两个模式处理两个类?
谢谢,约阿夫
“如果我从配置中注释掉AccountRequest.xsd值,然后再次测试第二个类(AccountResponse)的封送/取消封送,如果都取消注释,则会收到错误:org.xml.sax。 SAXParseException:cvc-elt.1:找不到元素'accountResponse'的声明。”
听起来像SchemaFactory.newSchema()创建的Schema对象仅处理列表中的第一个xsd。
如果您在同一名称空间(targetNamespace?)中有多个架构文件,则可能是此错误引起了麻烦:
https://issues.apache.org/jira/browse/XERCESJ-1130
解决该错误的方法是创建一个包含其他xsd文件的父xsd文件,然后使用LSResourceResolver实现在xml配置中设置“ schemaResourceResolver”属性(请参见http://blog.frankel.ch/xml-例如,验证与导入的包含方案)。
在您的xml配置中添加以下内容:
parent.xsd文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.yourdomain.com/FIXED/EXAMPLE"
targetNamespace="http://www.yourdomain.com/FIXED/EXAMPLE"
elementFormDefault="qualified"
version="1.000"
id="some_id">
<xs:include schemaLocation="AccountRequest.xsd"/>
<xs:include schemaLocation="AccountResponse.xsd"/>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
在您的xml配置中,将schemas属性更改为:
<property name="schemas">
<list>
<value>classpath:schema/parent.xsd</value>
</list>
</property>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3148 次 |
| 最近记录: |