Spring与XSD验证

时间:2012-06-15 06:54:05

标签: spring-ws

目前我正在使用Spring-ws实现Web服务。在这里,我对xsd验证感到震惊。对于xsd验证,我使用以下配置

    <bean id="validatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
        <property name="xsdSchema" ref="schema" />
        <property name="validateRequest" value="true" />
        <property name="validateResponse" value="true" />
      </bean>

<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
    <property name="xsd" value="/WEB-INF/ProductSchema.xsd" />
  </bean>

这里我在bean初始化期间传递了xsd文件。有没有办法让我动态发送这个(ProductSchema.xsd)xsd文件。因为我将根据输入的有效负载知道哪个xsd文件需要发送。

请帮帮我。提前致谢

2 个答案:

答案 0 :(得分:0)

我不知道你有多少XSD,但也许你可以在ProductSchema.xsd中定义导入以包含其他的。这至少是我如何设置的。

例如:

<import namespace="http://namespace" schemaLocation="data.xsd" />

答案 1 :(得分:0)

我不太确定你要做什么。

但您可以通过使用与有效负载中元素名称匹配的localPart注释处理程序方法来制作匹配不同有效负载的不同端点/方法:

@Endpoint
public class MyEndpoint {

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "NameOfMyXmlRequestElement")     
    @ResponsePayload
    public MyResponse handleMyRequest(@RequestPayload MyRequest MyRequest) throws Exception {
    ...

然后可以使用特定架构解组/验证已接收的请求:

<bean id="myJaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>mydomain.model.oxm.MyRequest</value>
            <value>mydomain.model.oxm.MyResponse</value>
        </list>
    </property>
    <property name="schema" ref="MyServiceSchema" />
</bean>

<bean id="MyServiceSchema" class="org.springframework.core.io.ClassPathResource">
    <constructor-arg value="WEB-INF/schemas/MyService.xsd" />
</bean>

MyRequest类必须注释才能使用Jaxb2marshaller,@ XmlRootElement(name =“MyRequest”)等...