Hi,

I'd like to add schema validation for Json requests (as described in https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Data+Bindings#JAX-RSDataBindings-Schemavalidation).

1.) Schemavalidation using Json JacksonProvider / JAXBElementProvider:
Configuration used:

<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
       <property name="schemaHandler" ref="schemaHolder"/>
    </bean>

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

    <util:list id="theSchemas">
      <value>my_complex_types_and_elements.xsd</value>
    </util:list>

I'm sending an invalid JSON which does not match the defined pattern, but the validation doesn't strike.

The only message I see in the log is:
o.apache.cxf.jaxrs.utils.ResourceUtils : No resource classpath:META-INF/jax-rs-catalog.xml is available

Is there anything else I have to set to activate schema validation?

Or is the JAXBElementProvider only active for XML request processing and schema validation is not possible using JacksonProvider ?

2.) jettison/org.apache.cxf.jaxrs.provider.json.JSONProvider

When I try to use jettison/org.apache.cxf.jaxrs.provider.json.JSONProvider and add the schemaHandler:

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
       <property name="schemaHandler" ref="schemaHolder"/>
    </bean>

Then I get with the first attempt (model generated using wadl2java):
Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "..." as an element because it is missing an @XmlRootElement annotation

After adding @XmlRootElement(namespace="|http://www.example.org/books|"), the exception changes: Payload: JAXBException occurred : cvc-elt.1: Cannot find the declaration of element "..."

The Json request sent using the CXF client includes a namespace prefix:
{"ns2:myRequestType":{...}}

If I remove the namespace prefix, the error stays the same:
{"myRequestType":{...}}

Next I thought to add a jsonNamespaceMap (as described here http://cxf.apache.org/docs/jax-rs-data-bindings.html):

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
       <property name="schemaHandler" ref="schemaHolder"/>
<property name="namespaceMap" ref="jsonNamespaceMap"/>
    </bean>

|<||util:map| |id||=||"jsonNamespaceMap"| |map-class||=||"java.util.Hashtable"||>|
|<||entry| |key||=||"http://www.example.org/books";| |value||=||"ns2"||/>|
|</||util:map||>
But still no luck, the error stays the same, regardless if the Json includes the prefix or not.
|

Any ideas on this?

best regards,

Johannes

Reply via email to