使用Jaxb2Marshaller解组xml并验证模式

时间:2012-05-03 15:23:36

标签: spring jaxb2

我正在使用xml作为有效负载实现REST服务,并具有以下配置以使用Jaxb2Marshaller来解组我的xml。这是我的spring上下文文件

中的配置
<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>com.my.examples.Product</value>
            </list>
        </property>
        <property name="schema" value="classpath:schemadefinitions/product.xsd" />
    </bean>

在我的bean 产品上我只有这个注释

@XmlRootElement(名称= “产品”) 公共类ProductInfo {

问题是,当我发出REST请求时,它会正确地将xml解组为bean,但不会对使用marshaller配置的模式执行任何验证。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我必须将一个validationeventhandler附加到marshaller作为jaxb2Mashaller.setValidationEventHandler(...)设置完成后,unmarshaller开始验证输入xml。

答案 1 :(得分:1)

使用 Java 8和JaxB 2.2.4 ,我发现原始设置没有任何问题!在 applicationcontext.xml 中定义schema属性是 ALL ,您需要执行此操作才能进行架构验证。

如果创建Jaxb2Marshaller&#34;手动&#34;,则需要确保在设置架构资源后调用afterPropertiesSet方法,因为它将架构资源加载到内存中。 / p>