cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: UnmarshalException instead of SchemaValidationException
Date Thu, 20 Sep 2012 14:48:35 GMT
On 20/09/12 15:39, Voß, Marko wrote:
>> I guess I'm not understanding the problem well. You said earlier:
>
>>>> In a negative test, I send some XML to this service, which is wrong XML for
type A. Let's say the XML is of type B. The XML passes the schema validation, because of it
is valid for type B".
>
>> AFAIK, at the schema validation level, all JAXB does is ensures the incoming XML
is valid according to the schema, which it is according to what you said earlier on.
>
> In the old code of this service, the service validated the incoming XML against the schema
of the expected type.
> In the example, the XML got validated against the schema of type A, no matter what XML
was incoming. I expected the same behavior with CXF, since I define the expected type in the
signature.
>
>> Unmarshalling is at the next stage, so if the previous stage let 'B' to come in then
obviously the unmarshaller expecting it to be 'A' throws UnmarshallException. I do not see
how to make SchemaValidationException thrown if the schema validation phase passes...
>
> I meant, that the schema validation phase should not pass, because the wrong schema is
being used right now.

Well, you have a schema document which is registered with the JAXB 
provider so this is what is used to validate the incoming XML.


> It should use the schema of the type defined in the signature and not the schema, which
fits to the incoming XML.

Is it possible in JAXB to configure Unmrashaller such that it validates 
the incoming XML based on the information it obtains while populating A, 
some kind of Java-based in validation ?

If yes we can do that

Cheers, Sergey


>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: Thursday, September 20, 2012 4:21 PM
> To: Voß, Marko
> Cc: users@cxf.apache.org
> Subject: Re: UnmarshalException instead of SchemaValidationException
>
> On 20/09/12 14:08, Voß, Marko wrote:
>> Hello,
>>
>>> I guess if a schema is open enough to accept either A or B representations, then
there's no bug.
>>
>> That is not the case here.
>>
>
> I guess I'm not understanding the problem well. You said earlier:
>
>   >>  In a negative test, I send some XML to this service, which is wrong XML for
type A. Let's say the XML is of type B. The XML passes the schema validation, because of it
is valid for type B".
>
> AFAIK, at the schema validation level, all JAXB does is ensures the incoming XML is valid
according to the schema, which it is according to what you said earlier on.
>
> Unmarshalling is at the next stage, so if the previous stage let 'B' to come in then
obviously the unmarshaller expecting it to be 'A' throws UnmarshallException. I do not see
how to make SchemaValidationException thrown if the schema validation phase passes...
>
>>> I can see that Unmarshaller can also accept ValidationEventHandler ("validationHandler"
provider property). Not sure if it can help - may be you can restrict it there somehow.
>>
>> Well, we are using the schema validation setup this way already:
>>
>> <bean name"myJaxbProvider" class="...">
>>     <property name="catalogLocation" value="..."/>
>>     <property name="schemaLocations" value="...">
>>       <list>
>>         <value>classpath:/xsd/foo.xsd</value>
>>         ...
>>       </list>
>>     </property>
>> </bean>
>>
>> So we have to setup the validation twice or remove this kind of validation, we have
been talking about lately, and use the validationHandler instead?
>>
> I think ValidationEventHandler is there to complement the validation set up, for the
handler to get more info about the validation process
>
>>> May my using JAXBElement<A>   instead of A is more restrictive, can you
try it ?
>>
>> Tested this with no difference in the result.
>>
> OK...
>
> Cheers, Sergey
>>
>> Best,
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>> Sent: Thursday, September 20, 2012 2:27 PM
>> To: users@cxf.apache.org
>> Cc: Voß, Marko
>> Subject: Re: UnmarshalException instead of SchemaValidationException
>>
>> Hi
>> On 20/09/12 13:02, Voß, Marko wrote:
>>> Hello,
>>>
>>> Say, we have a JAX-RS method like this:
>>>
>>> @PUT
>>> @Path("/foo")
>>> @Produces(MediaType.TEXT_XML)
>>> @Consumes(MediaType.TEXT_XML)
>>> public static A create(A a);
>>>
>>> In a negative test, I send some XML to this service, which is wrong XML for type
A. Let's say the XML is of type B. The XML passes the schema validation, because of it is
valid for type B but this method expects type A and so we get a UnmarshalException instead
of the SchemaValidationException complaining about the wrong element found.
>>>
>>> Is it a bug, that the schema validation is not using the schema for type A? It
looks like it is using the schema, which is responsible for the root element of the passed
XML if found.
>>>
>>
>> I guess if a schema is open enough to accept either A or B representations, then
there's no bug.
>>
>> I can see that Unmarshaller can also accept ValidationEventHandler ("validationHandler"
provider property). Not sure if it can help - may be you can restrict it there somehow.
>>
>> May my using JAXBElement<A>   instead of A is more restrictive, can you try
it ?
>>
>> Cheers, Sergey
>>
>>> best,
>>>
>>>
>>> -------------------------------------------------------
>>>
>>> Fachinformationszentrum Karlsruhe, Gesellschaft für wissenschaftlich-technische
Information mbH.
>>> Sitz der Gesellschaft: Eggenstein-Leopoldshafen, Amtsgericht Mannheim HRB 101892.
>>> Geschäftsführerin: Sabine Brünger-Weilandt.
>>> Vorsitzender des Aufsichtsrats: MinDirig Dr. Thomas Greiner.
>>>
>>>
>>
>>
>> -------------------------------------------------------
>>
>> Fachinformationszentrum Karlsruhe, Gesellschaft für wissenschaftlich-technische
Information mbH.
>> Sitz der Gesellschaft: Eggenstein-Leopoldshafen, Amtsgericht Mannheim HRB 101892.
>> Geschäftsführerin: Sabine Brünger-Weilandt.
>> Vorsitzender des Aufsichtsrats: MinDirig Dr. Thomas Greiner.
>>
>>
>
>
>
> -------------------------------------------------------
>
> Fachinformationszentrum Karlsruhe, Gesellschaft für wissenschaftlich-technische Information
mbH.
> Sitz der Gesellschaft: Eggenstein-Leopoldshafen, Amtsgericht Mannheim HRB 101892.
> Geschäftsführerin: Sabine Brünger-Weilandt.
> Vorsitzender des Aufsichtsrats: MinDirig Dr. Thomas Greiner.
>
>

Mime
View raw message