Hi:
I've never tried to enable schema validation to data output ( it
doesn't make sense *for me* )
Reading that webpage:
- I think that
<jaxrs:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxrs:properties>
doesn't enable JAX-RS schema validation
- About that webpage
"By default, after a valid schema has been located, only JAXB
Unmarshaller will use it to validate the input.
Starting from CXF 2.3.4 and 2.4, the following properties can be used
to enable the output validation:
validateOutput
validateBeforeWrite
Setting the 'validateOutput' property will ensure that JAXBMarshaller
will validate the output while writing the data. The
'validateBeforeWrite' property can be set to ensure the validation is
done before data are written to the output stream."
Did you test these properties ?
2013/12/11 Anders Clausen <[email protected]>:
> Hi Sergey
>
> Thanks for replying so quickly. Yes, it is the output data (the response
> sent back to the calling client) that we're trying to validate.
>
> Cheers
> Anders
>
>
> On 11 December 2013 15:45, Sergey Beryozkin <[email protected]> wrote:
>
>> Hi
>>
>>
>> On 11/12/13 15:22, Anders Clausen wrote:
>>
>>> Hi
>>>
>>> I've only used CXF for a little while and still trying to find my way.
>>> I've
>>> got a question that I hope you can help me resolve. For our current
>>> project
>>> we expose a service both as REST and as SOAP. We have defined our
>>> interfaces through XSDs and use JAXB2. We want to turn on response
>>> validation during development time and have successfully done that for our
>>> SOAP service, however, when it comes to our REST service I am not sure if
>>> this can be done. How does JSON work with XSDs? I've been trying to follow
>>> the guidelines from this page
>>> CXF<https://cwiki.apache.org/confluence/display/CXF20DOC/
>>> JAX-RS+Data+Bindings#JAX-RSDataBindings-Schemavalidation>
>>>
>>> but
>>> without any luck.
>>>
>>> This is the code I've used:
>>>
>>> <bean id="exRSJsonProvider"
>>> 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"/>
>>> </bean>
>>>
>>> <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>classpath:webapi/xsd/GetSchedulesV01_C.xsd</value>
>>> </util:list>
>>>
>>> <jaxrs:server name="exRSScheduleResource"
>>> address="${ex.rs.endpoint.address}">
>>> <jaxrs:serviceBeans>
>>> <bean
>>> class="com.ex.rs.ScheduleResource" />
>>> <bean class="com.ex.rs.LocationResource" />
>>> </jaxrs:serviceBeans>
>>> <jaxrs:properties>
>>> <entry key="schema-validation-enabled" value="true" />
>>> </jaxrs:properties>
>>> <jaxrs:schemaLocations>
>>>
>>> <jaxrs:schemaLocation>classpath:/webapi/xsd/GetSchedulesV01_C.xsd</jaxrs:
>>> schemaLocation>
>>> </jaxrs:schemaLocations>
>>> <jaxrs:providers>
>>> <ref bean="exRSJsonProvider" />
>>> <ref bean="jaxbProvider" />"
>>> <ref bean="dateParamHandler" />
>>> <ref bean="timeParamHandler" />
>>> </jaxrs:providers>
>>>
>>> ....................
>>> ....................
>>> </jaxrs:server>
>>>
>>> Is this even possible to be done or should I just drop the idea?
>>>
>> Technically it is possible, we have tests where input JSON sequences are
>> validated, it works with Jettison because they are eventually handled by
>> JAXB.
>>
>> I'm presuming that the input JSON sequence has no namespace prefixes,
>> right ? Does the JAX-RS resource method accepting a JAXB bean populated
>> from such a sequence has a namespace property at all ?
>>
>> Or are you trying to validate output data by any chance ?
>>
>> Cheers, Sergey
>>
>>>
>>> Cheers
>>> Anders
>>>
>>>
>>
>>
>>