我正在使用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配置的模式执行任何验证。我错过了什么吗?
答案 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>