【问题标题】:Using Jaxb2Marshaller to unmarshall an xml and validate against a schema使用 Jaxb2Marshaller 解组 xml 并针对模式进行验证
【发布时间】:2012-05-03 15:23:35
【问题描述】:

我正在实现一个以 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 Product 上,我只有这个注释作为

@XmlRootElement(name="产品") 公共类 ProductInfo {

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

【问题讨论】:

    标签: spring jaxb2


    【解决方案1】:

    我必须以 jaxb2Mashaller.setValidationEventHandler(...) 的形式将验证事件处理程序附加到编组器。一旦设置好,解组器就开始验证输入 xml。

    【讨论】:

    • 我还添加了validationeventhandler。但不验证:(
    • @SelvaG 标记的“标记为正确答案”不正确。如果您以编程方式创建 Jaxb2Marshaller,请确保调用 afterPropertiesSet,因为这是一个 InitializingBean。
    【解决方案2】:

    使用 Java 8 和 JaxB 2.2.4,我认为原始设置没有任何问题!在 applicationcontext.xml 中定义模式属性是ALL,您需要这样做才能进行模式验证。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      相关资源
      最近更新 更多