Can you paste your code  ?
So I can see the final solution

Regards

2013/12/11 Anders Clausen <[email protected]>:
> Jose,
>
> that did the trick! I tried out the 'validateOutput' property on the JAXB
> provider and it works. I have to be honest and say that I didn't see that
> section on the page - thought it would have been before the stuff about
> 'catalogs' but that's just me;-)
>
> Thank you all for your quick replies - the solution has made my day!
>
> Cheers!
>
>
> On 11 December 2013 16:15, Jose María Zaragoza <[email protected]> wrote:
>
>> 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
>> >>>
>> >>>
>> >>
>> >>
>> >>
>>

Reply via email to