具有模式验证的JAX-RS

时间:2011-09-13 11:39:25

标签: java spring rest cxf jax-rs

我有一个RESTful服务,它有一个路径参数和一个从请求体中解组的参数。请求正文参数是XML,我有一个XSD。我一直在尝试针对XSD验证XML有效负载,但无济于事。我按照here所述尝试了以下内容:

<jaxrs:server address="/"
    serviceClass="my.endpoint.class">
    <jaxrs:schemaLocations>
        <jaxrs:schemaLocation>classpath:schema/myschema.xsd</jaxrs:schemaLocation>
    </jaxrs:schemaLocations>
</jaxrs:server>

正在找到模式(至少没有错误),但我期望无效的有效负载不会抛出异常。与XSD内容不匹配的参数将作为null传递。它可能没有关系,但我的自动生成的有效负载类有三个属性,其中一些属性是必需的。

我已经简要介绍了创建MessageBodyReader,如here所述,但我认为我遇到了范围问题,并且在调用readFrom时我的架构对象不可用。

非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:2)

原来我正在使用的servlet不接受上面显示的jaxrs配置。我改变了使用它:

<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

到此:

<servlet-class>
    org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<init-param>
    <param-name>config-location</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>

我的applicationContext.xml的片段

<jaxrs:server address="/">
    <jaxrs:schemaLocations>
        <jaxrs:schemaLocation>classpath:schema/myschema1.xsd</jaxrs:schemaLocation>
        <jaxrs:schemaLocation>schema/myschema2.xsd</jaxrs:schemaLocation>
        <jaxrs:schemaLocation>schema/myschema3.xsd</jaxrs:schemaLocation>
    </jaxrs:schemaLocations>

    <jaxrs:serviceBeans>
        <bean class="my.package.endPoint1" />
        <bean class="my.package.endPoint2" /> 
    </jaxrs:serviceBeans>

    <jaxrs:features>
        <cxf:logging />
    </jaxrs:features>
</jaxrs:server>

架构引用来自资源目录,与WEB-INF相邻。