I did the following:
<bean id="jaxbProvider"
class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
<property name="schemaHandler" ref="schemaHolder"/>
<property name="validateOutput" value="true"/>
</bean>
I haven't tested 'validateBeforeWrite' but will do that tomorrow.
On 11 December 2013 17:07, Jose María Zaragoza <[email protected]> wrote:
> 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
> >> >>>
> >> >>>
> >> >>
> >> >>
> >> >>
> >>
>