[ 
https://issues.apache.org/jira/browse/CXF-6319?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14381751#comment-14381751
 ] 

Alessio Soldano edited comment on CXF-6319 at 3/26/15 11:38 AM:
----------------------------------------------------------------

I've had a preliminary look at the issue here. The problem seems to come from 
the fact that the the namespace 'xs' in the message above is declared in the 
body element and the SOAPBody of the message is built in SAAJInterceptor from a 
stax stream that points to the first element after the body. The elements 
before and up to the body are consumed from the stream when looking for soap 
headers in the ReadHeadersInterceptor, which is where the CXF-5891 optimization 
took place.
Now, if there's no soap header and hence CXF-5891 causes no DOM content to be 
created during headers scan, namespace declarations in body and envelope 
elements (e.g. the only possible parents of body content elements) are lost. 
The SAAJInterceptor has a hack for copying the contents of the DOM created by 
ReadHeadersInterceptor into the SOAPPart that will contain the SOAPBody to be 
created later; this of course is of no use if no DOM was created in 
ReadHeadersInterceptor as no soap headers were detected.
I'll likely fix this by explicitly keeping track of the namespace declarations 
found in envelope and body elements and applying them on the SOAPPart in 
SAAJInInterceptor.


was (Author: asoldano):
I've had a preliminary look at the issue here. The problem seems to come from 
the fact that the the namespace 'xs' in the message above is declared in the 
body element and the SOAPBody of the message is built in SAAJInterceptor from a 
stax stream that points to the first element after the body. The elements 
before and up to the body are consumed from the stream when looking for soap 
headers in the ReadHeadersInterceptor, which is where the CXF-5891 optimization 
took place.
Now, if there's no soap header and hence CXF-5891 causes no DOM content to be 
created during headers scan, namespace declarations in body and envelope 
elements (e.g. the only possible parents of body content elements) are lost. 
The SAAJInterceptor has a hack for copying the contents of the DOM created by 
ReadHeadersInterceptor into the SOAPPart that will contain the SOAPBody to be 
created later; this of course is of no use if no DOM was created in 
ReadHeadersInterceptor as no soap headers were detected.
I'll likely fix this by explicitly storing namespace declarations in envelope 
and body elements and applying them on the SOAPPart in SAAJInInterceptor.

> Regression: failing namespace resolution after CXF-5891
> -------------------------------------------------------
>
>                 Key: CXF-6319
>                 URL: https://issues.apache.org/jira/browse/CXF-6319
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime
>    Affects Versions: 2.7.14, 2.7.15
>            Reporter: mustafa
>
> When using CXF 2.7.14 or later this request fails 
> {code:xml}
> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
>    <SOAP-ENV:Body xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>       <ns0:echo xmlns:ns0="http://example.com";>
>          <ns0:s xsi:type="xs:string">hello</ns0:s>
>       </ns0:echo>
>    </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>
> {code}
> with the error
> {code:xml}
> <Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
>    <SOAP-ENV:Header 
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
>    <soap:Body>
>       <soap:Fault>
>          <faultcode>soap:Server</faultcode>
>          <faultstring>prefix xs is not bound to a namespace</faultstring>
>       </soap:Fault>
>    </soap:Body>
> </soap:Envelope>
> {code}
> Prior to the changes for CXF-5891 this worked without any problems. Analysis 
> from Red Hat engineering seems to say that it looks that all attributes and 
> namespace settings in soap:envelop or soap:body elements are all ignored in 
> ReadHeaderInterceptor and SAAJInInterceptor.



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

Reply via email to