Настроить сопоставление Spring 4.1 O/X для проверки входящего XML на основе схемы?

Spring 4 O/X поддерживает несколько XML unmarshallers за его абстракцией. Мы используем JAXB2.

Может ли Spring проверить входящий XML по схеме? Я не нашел ничего ни в официальной документации, ни в схеме spring-oxm, описывающей конфигурацию. Это моя текущая конфигурация, довольно стандартная.

<bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="marshallerProperties">
        <map>
            <!-- properties here -->
        </map>
    </property>
    <property name="classesToBeBound">
        <list>
            <value>com.example.Message1</value>
            <value>com.example.Message2</value>
        </list>
    </property>
</bean>

1 ответ

Решение

"Может ли Spring проверить входящий XML по схеме?"

Если вы установите schema имущество:

public class Jaxb2Marshaller ... {
    /**
     * Set the schema resource to use for validation.
     */
    public void setSchema(Resource schemaResource) {
        this.schemaResources = new Resource[] {schemaResource};
    }

    /**
     * Set the schema resources to use for validation.
     */
    public void setSchemas(Resource... schemaResources) {
        this.schemaResources = schemaResources;
    }
}

Jaxb2Marshaller будет использовать эти схемы для проверки. Таким образом, в вашем контексте XML, вы можете просто сделать что-то вроде

<bean id="jaxb2Marshaller"
    class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="schema" value="classpath:myschema.xsd"/> 
    <property name="classesToBeBound">
        <list>
            <value>com.example.Message1</value>
            <value>com.example.Message2</value>
        </list>
    </property>
</bean> 
Другие вопросы по тегам