Hi
On 07/02/14 09:08, Andrew Clark wrote:
I am trying to send a POST request with a JSON or XML body to a service. This 
request body conforms to an xsd I have defined in the schemaHandler property, 
which i have registered with the JSONProvider and the JAXBProvider.
        <bean id="bgacRSJsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">        <property name="dropRootElement" value="false"/>        <property 
name="supportUnwrapped" value="true"/>        <property name="ignoreNamespaces" value="true"/>        <property name="schemaHandler" ref="schemaHolder"/>        
<property name="validateOutput" value="true"/>
     <bean id="schemaHolder" class="org.apache.cxf.jaxrs.utils.schemas.SchemaHandler">        <property 
name="schemas" ref="schemas"/>    </bean>
     <util:list id="schemas">        <value>classpath:webapi/xsd/schema.xsd</value>   
 </util:list>
With an xml body the service will return a valid response if the request is 
valid.....if the request breaks the schema rules it will return an error as 
expected. However if the request body is JSON (where no namespace is specified) 
the response is an error similar to that below:
[org.xml.sax.SAXParseException; columnNumber: 0; cvc-elt.1: Cannot find the 
declaration of element 'xxxRequest'.]
The xxxRequest refers to the Class of the object the resource is expecting.
Could you explain why the XML works but the JSON doesn't.
You have the JSON payload converted into the unqualified XML internally and hence this is where the validation stops as the validator can not find xxxRequest in the schema which has a targetNamespace

Try using an inTransformElements property with a pair like "{myns}*":"*", this should fix it, see

http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-CustomizingJAXBXMLandJSONinputandoutput

Sergey

ThanksAndy                                      


Reply via email to