【问题标题】:CXF JSON Schema ValidationCXF JSON 模式验证
【发布时间】:2016-04-21 22:28:41
【问题描述】:

我正在编写支持 XML 和 JSON 格式的 RESTFul 网络服务。我需要在 web 服务中添加模式验证。我的 bean 是使用 JAX-B 自动生成的。正如 CXF 的网站 Schema validation 所建议的那样,我使用 org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 作为 JSON 提供程序,使用 org.apache.cxf.jaxrs.provider.JAXBElementProvider 作为 JAX-B 提供程序。请求和响应工作正常,但现在我想添加架构验证。

上面 CXF 链接中的示例代码不适用于我的 JSON 模式验证(它适用于 XML 模式验证)。他们为org.apache.cxf.jaxrs.provider.json.JSONProvider(在“架构验证”部分下)展示了它,这对我不起作用,因为我的 bean 是 JAX-B 生成的,所以我使用的是JacksonJaxbJsonProvider

这个问题有什么解决办法吗?有人可以建议一些我可以尝试的方法吗?

下面是 XML 配置:

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>      

<bean id="schemaHolder" class="org.apache.cxf.jaxrs.utils.schemas.SchemaHandler">
    <property name="schemas" ref="theSchemas"/>
</bean>

<util:list id="theSchemas">
  <value>classpath:/WEB-INF/classes/po.xsd</value>
</util:list>

<!-- Person REST Service Configurations -->
<bean id="personRESTServiceImpl" class="com.abc.webservices.service.rest.PersonRESTService" />
<jaxrs:server id="personRESTService" address="/person-rest-service">
    <jaxrs:serviceBeans>
        <ref bean="personRESTServiceImpl" />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="jaxbProvider" />
        <ref bean='jsonProvider' />
    </jaxrs:providers>
</jaxrs:server>

【问题讨论】:

  • 还有一个没有被复制的配置。其:

标签: json web-services cxf


【解决方案1】:

您的类路径错误,在 Web 应用程序中的类路径是 WEB-INF/classes

因此您可以使用以下配置

<jaxrs:schemaLocations>
                <jaxrs:schemaLocation>classpath:po.xsd</jaxrs:schemaLocation>
</jaxrs:schemaLocations>

如果您在 classes 目录中有 xsd 目录,则 classpath:xsd/po.xsd

【讨论】:

  • 感谢您的回复 Karthik。我尝试了您建议的方式,它仅适用于 XML 格式而不适用于 JSON 格式。它不检查强制字段(标记为 @XmlElement(required = true))。如果我发送任何无效字段(不返回原因,我可以在日志文件中看到它在验证中失败),它也会返回 500 Internal Server Error,而我期望 400 带有验证原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多