No, it works with and without namespace :).
Thx so I better stay with JacksonProvider with manual BeanValidation for
now until wadljava+@Valid or do you actually recommend using
MoxyJsonProvider in favor of JacksonProvider (cxf-docs about
MoxyJsonProvider seems to be scarce for now...)?
Best regards,
Johannes
Am 26.08.2016 um 11:03 schrieb Vjacheslav V. Borisov:
Does @XmlRootElement requires namespace?
I think Jaxb generation should create package-info.java with
@javax.xml.bind.annotation.XmlSchema(namespace ...
And btw, Jettison has array serialization issue bug, where "single item"
arrays serialized without []
I think better way, if you require xsd validation, use moxy json provider,
or wait for JSR303 validation switch for wadl2java.
2016-08-26 12:32 GMT+04:00 J. Fiala <[email protected]>:
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.pr
ovider.JAXBElementProvider">
<property name="schemaHandler" ref="schemaHolder"/>
</bean>
<bean id="schemaHolder" class="org.apache.cxf.jaxrs.ut
ils.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.pr
ovider.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.pr
ovider.json.JSONProvider">
<property name="schemaHandler" ref="schemaHolder"/>
<property name="namespaceMap" ref="jsonNamespaceMap"/>
</bean>
|<||util:map| |id||=||"jsonNamespaceMap"| |map-class||=||"java.util.Hash
table"||>|
|<||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