All clear :-) Thanks and regards !!!
2013/12/12 Anders Clausen <[email protected]>: > Jose, > > I had the following header value 'accept=application/xml' set, so I was > getting XML returned rather than JSON, hence why I showed the definition > for the JAXB provider. I also set the 'validateOutput=true' on the JSON > provider and that also triggered an error (I removed the > 'accept=application/xml' header value for that test). The only difference I > see in the way that error handling is done, is that the JSON provider > throws a javax.ws.rs.InternalServerErrorException and the JAXB provider > throws a javax.ws.rs.BadRequestException. > > I hope that answers your question but let me know if you need more info. > > > On 11 December 2013 19:55, Jose María Zaragoza <[email protected]> wrote: > >> Thanks, but I don't understand one thing >> You are enabled it for JAXB provider, but not for JSON provider . And >> your question were about output validation schema for JSON messages, >> right ? >> >> >> >> 2013/12/11 Anders Clausen <[email protected]>: >> > 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 >> >> >> >>> >> >> >> >>> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >>
