[
https://issues.apache.org/jira/browse/CXF-6666?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chris 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}} in {{DataReaderImpl}}:
1. Set the {{setEventHandler}} flag to _false_.
2. Ensure the {{veventHandler}} field 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?
The {{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.
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?
{{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.
> 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: Chris
>
> 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}} in {{DataReaderImpl}}:
> 1. Set the {{setEventHandler}} flag to _false_.
> 2. Ensure the {{veventHandler}} field 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?
> The {{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.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)