cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jose María Zaragoza <demablo...@gmail.com>
Subject Re: JSON, XSD and response validation
Date Thu, 12 Dec 2013 08:10:55 GMT
All clear :-)

Thanks and regards !!!

2013/12/12 Anders Clausen <anders.s.clausen@gmail.com>:
> 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 <demablogia@gmail.com> 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 <anders.s.clausen@gmail.com>:
>> > 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 <demablogia@gmail.com>
>> wrote:
>> >
>> >> Can you paste your code  ?
>> >> So I can see the final solution
>> >>
>> >> Regards
>> >>
>> >> 2013/12/11 Anders Clausen <anders.s.clausen@gmail.com>:
>> >> > 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 <demablogia@gmail.com>
>> >> 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 <anders.s.clausen@gmail.com>:
>> >> >> > 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 <sberyozkin@gmail.com>
>> >> >> 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
>> >> >> >>>
>> >> >> >>>
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >>
>> >>
>>

Mime
View raw message