我有一个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时我的架构对象不可用。
非常感谢任何帮助或建议!
答案 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相邻。