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 >> >>> >> >>> >> >> >> >> >> >> >>
