[ 
https://issues.apache.org/jira/browse/CXF-6666?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Christopher Leung updated CXF-6666:
-----------------------------------
    Description: 
How does one disable the strict validation on the *SOAP message header* that 
causes a "Unmarshalling Error: unexpected element" exception when unknown 
elements and attributes are encountered in the unmarshalling process. (In this 
case _unknown_ means that elements and attributes are present in the incoming 
SOAP header but do not exist in the object model.)

The flow seems to be that 
[ReadHeadersInterceptor|https://cxf.apache.org/javadoc/latest/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.html]
 creates a {{DataReader}} that creates an unmarshaller. The unmarshaller 
determines whether the custom {{ValidationEventHandler}},
{{WSUIDValidationHandler}}, is set or not. {{WSUIDValidationHandler}} is 
ultimately responsible for throwing the exception.

There appears to be a couple of ways at least to disable 
{{WSUIDValidationHandler}}. One is to set the {{setEventHandler}} flag of 
{{DataReaderImpl}} to false. The other is to ensure the {{veventHandler}} field 
of the same class is set to a more lenient custom {{ValidationEventHandler}}. 

I cannot determine a way in which to manipulate either of these two fields in 
{{DataReaderImpl}}. Is there a way to do it?

{{setProperty(String prop, Object value)}} method of {{DataReaderImpl}} looks 
promising because it has lots of logic related to setting the 
ValidationEventHandler - in particular the 
{{set-jaxb-validation-event-handler}} property seems perfect - but 
unfortunately this method is not called when unmarshalling the SOAP header 
part, unless I'm mistaken.

  was:
How does one disable the strict validation on the *SOAP message header* that 
causes a "Unmarshalling Error: unexpected element" exception when unknown 
elements and attributes are encountered in the unmarshalling process. (In this 
case _unknown_ means that elements and attributes are present in the incoming 
SOAP header but do not exist in the object model.)

The flow seems to be that 
[ReadHeadersInterceptor|https://cxf.apache.org/javadoc/latest/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.html]
 creates a {{DataReader}} that creates an unmarshaller. The unmarshaller 
determines whether the custom {{ValidationEventHandler}},
{{WSUIDValidationHandler}}, is set or not. {{WSUIDValidationHandler}} is 
ultimately responsible for throwing the exception.

There appears to be a couple of ways at least to disable 
{{WSUIDValidationHandler}}. One is to set the {{setEventHandler}} flag of 
{{DataReaderImpl}} to false. The other is to ensure the {{veventHandler}} field 
of the same class is set to a more lenient custom {{ValidationEventHandler}}. 

I cannot determine a way in which to manipulate either of these two fields in 
{{DataReaderImpl}}. Is there a way to do it?


> Permit "unknown" SOAP message header elements and attributes to prevent 
> Unmarshalling Error: unexpected element
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-6666
>                 URL: https://issues.apache.org/jira/browse/CXF-6666
>             Project: CXF
>          Issue Type: Wish
>          Components: JAXB Databinding, Soap Binding
>    Affects Versions: 3.0.2
>            Reporter: Christopher Leung
>
> How does one disable the strict validation on the *SOAP message header* that 
> causes a "Unmarshalling Error: unexpected element" exception when unknown 
> elements and attributes are encountered in the unmarshalling process. (In 
> this case _unknown_ means that elements and attributes are present in the 
> incoming SOAP header but do not exist in the object model.)
> The flow seems to be that 
> [ReadHeadersInterceptor|https://cxf.apache.org/javadoc/latest/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.html]
>  creates a {{DataReader}} that creates an unmarshaller. The unmarshaller 
> determines whether the custom {{ValidationEventHandler}},
> {{WSUIDValidationHandler}}, is set or not. {{WSUIDValidationHandler}} is 
> ultimately responsible for throwing the exception.
> There appears to be a couple of ways at least to disable 
> {{WSUIDValidationHandler}}. One is to set the {{setEventHandler}} flag of 
> {{DataReaderImpl}} to false. The other is to ensure the {{veventHandler}} 
> field of the same class is set to a more lenient custom 
> {{ValidationEventHandler}}. 
> I cannot determine a way in which to manipulate either of these two fields in 
> {{DataReaderImpl}}. Is there a way to do it?
> {{setProperty(String prop, Object value)}} method of {{DataReaderImpl}} looks 
> promising because it has lots of logic related to setting the 
> ValidationEventHandler - in particular the 
> {{set-jaxb-validation-event-handler}} property seems perfect - but 
> unfortunately this method is not called when unmarshalling the SOAP header 
> part, unless I'm mistaken.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to