[ https://issues.apache.org/jira/browse/CXF-8904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17748133#comment-17748133 ]
Sreenivas K commented on CXF-8904: ---------------------------------- [~reta] That interceptor coming into picture when we configured {color:#2a00ff}org.apache.cxf.feature.StaxTransformFeature{color} to map namespace mappings in cxf bus like this: _{color:#008080}<{color}{color:#3f7f7f}bean{color} {color:#7f007f}id{color}={color:#2a00ff}"nsTransformFeature"{color} {color:#7f007f}class{color}={color:#2a00ff}"org.apache.cxf.feature.StaxTransformFeature"{color}{color:#008080}>{color}_ _{color:#008080}<{color}{color:#3f7f7f}property{color} {color:#7f007f}name{color}={color:#2a00ff}"inTransformElements"{color} {color:#7f007f}ref{color}={color:#2a00ff}"inTransformMap"{color}{color:#008080}/>{color}_ _{color:#3f5fbf}<!-- <property name="outTransformElements" {color}{color:#3f5fbf}ref{color}{color:#3f5fbf}="outTransformMap"/> -->{color}_ _{color:#008080}</{color}{color:#3f7f7f}bean{color}{color:#008080}>{color}_ _{color:#008080}<{color}{color:#3f7f7f}util:map{color} {color:#7f007f}id{color}={color:#2a00ff}"inTransformMap"{color}{color:#008080}>{color}_ _{color:#008080}<{color}{color:#3f7f7f}entry{color} {color:#7f007f}key{color}={color:#2a00ff}"\{http://xyz.service.com}*"{color} {color:#7f007f}value{color}={color:#2a00ff}"http://api.service.spring.demo/}*"{color} {color:#008080}/>{color}_ _{color:#008080}</{color}{color:#3f7f7f}util:map{color}{color:#008080}>{color}_ _{color:#008080}<{color}{color:#3f7f7f}cxf:bus{color}{color:#008080}>{color}_ _{color:#008080}<{color}{color:#3f7f7f}cxf:features{color}{color:#008080}>{color}_ _{color:#008080}<{color}{color:#3f7f7f}ref{color} {color:#7f007f}bean{color}={color:#2a00ff}"nsTransformFeature"{color}{color:#008080}/>{color}_ _{color:#008080}</{color}{color:#3f7f7f}cxf:features{color}{color:#008080}>{color}_ _{color:#008080}</cxf:bus>{color}_ Without these mappings, that interceptor is not getting added into interceptor chain and everything just works. When i looked at code of {*}TransformInInterceptor{*}, found this: _{color:#7f0055}public{color}{color:#000000} {color}{color:#7f0055}void{color}{color:#000000} handleMessage(Message {color}{color:#6a3e3e}message{color}{color:#000000}) {{color}_ _{color:#000000}{color}{color:#7f0055}if{color}{color:#000000} ({color}{color:#7f0055}this{color}{color:#000000}.{color}{color:#0000c0}contextPropertyName{color}{color:#000000} == {color}{color:#7f0055}null{color}_ _{color:#000000}|| MessageUtils.{color}{color:#000000}getContextualBoolean{color}{color:#000000}({color}{color:#6a3e3e}message{color}{color:#000000}, {color}{color:#7f0055}this{color}{color:#000000}.{color}{color:#0000c0}contextPropertyName{color}{color:#000000}, {color}{color:#7f0055}false{color}{color:#000000})) {{color}_ _{color:#000000}XMLStreamReader {color}{color:#6a3e3e}reader{color}{color:#000000} = (XMLStreamReader) {color}{color:#6a3e3e}message{color}{color:#000000}.getContent(XMLStreamReader.{color}{color:#7f0055}class{color}{color:#000000});{color}_ _{color:#000000}InputStream {color}{color:#6a3e3e}is{color}{color:#000000} = (InputStream) {color}{color:#6a3e3e}message{color}{color:#000000}.getContent(InputStream.{color}{color:#7f0055}class{color}{color:#000000});{color}_ _{color:#000000}XMLStreamReader {color}{color:#6a3e3e}transformReader{color}{color:#000000} = {color}{color:#7f0055}this{color}{color:#000000}.createTransformReaderIfNeeded({color}{color:#6a3e3e}reader{color}{color:#000000}, {color}{color:#6a3e3e}is{color}{color:#000000});{color}_ _{color:#000000}{color}{color:#7f0055}if{color}{color:#000000} ({color}{color:#6a3e3e}transformReader{color}{color:#000000} != {color}{color:#7f0055}null{color}{color:#000000}) {{color}_ _{color:#000000}{color}{color:#6a3e3e}message{color}{color:#000000}.setContent(XMLStreamReader.{color}{color:#7f0055}class{color}{color:#000000}, {color}{color:#6a3e3e}transformReader{color}{color:#000000});{color}_ _{color:#000000}}{color}_ _{color:#000000}}{color}_ _{color:#000000}}{color}_ This logic setting XMLStreamReader to Message. > TransformInInterceptor and SAAJInInterceptor - Getting SoapFault when > accessing WSDL > ------------------------------------------------------------------------------------ > > Key: CXF-8904 > URL: https://issues.apache.org/jira/browse/CXF-8904 > Project: CXF > Issue Type: Bug > Components: JAX-WS Runtime > Affects Versions: 3.5.3 > Reporter: Sreenivas K > Priority: Major > > Due to my peculiar usecase, i had to configure both *TransformInInterceptor > (to transform namespaces) and SAAJInInterceptor* *(to modify soap body for a > case).* > But due to this, when i accessed webservice *?wsdl* in browser, its failing > with below exception: > _org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader._ > _at > org.apache.cxf.binding.soap.saaj.SAAJInInterceptor$SAAJPreInInterceptor.handleMessage(SAAJInInterceptor.java:145) > ~[cxf-rt-bindings-soap-3.5._ > _3.jar:3.5.3]_ > _Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog_ > _at [row,col \\{unknown-source}]: [1,0]_ > _at > com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:701) > ~[woodstox-core-6.2.8.jar:6.2.8]_ > _at > com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2235) > ~[woodstox-core-6.2.8.jar:6.2.8]_ > > When i looked into source code of > _*org.apache.cxf.binding.soap.saaj.SAAJInInterceptor$SAAJPreInInterceptor, > found below code to validate whether its GET request or not, which is failing > and so it proceeded further and thrown that exception:*_ > > {color:#000000} {color}{color:#7f0055}public{color}{color:#000000} > {color}{color:#7f0055}boolean{color}{color:#000000} isGET(T > {color}{color:#6a3e3e}message{color}{color:#000000}) {{color} > {color:#000000} String {color}{color:#6a3e3e}method{color}{color:#000000} = > (String) > {color}{color:#6a3e3e}message{color}{color:#000000}.get({color}{color:#2a00ff}"org.apache.cxf.request.method"{color}{color:#000000});{color} > {color:#000000} {color}{color:#7f0055}return{color}{color:#000000} > {color}{color:#2a00ff}"GET"{color}{color:#000000}.equals({color}{color:#6a3e3e}method{color}{color:#000000}) > && > {color}{color:#6a3e3e}message{color}{color:#000000}.{color}{color:#000000}getContent{color}{color:#000000}(XMLStreamReader.{color}{color:#7f0055}class{color}{color:#000000}) > == {color}{color:#7f0055}null{color}{color:#000000};{color} > {color:#000000} }{color} > Here, this condition, > *{color:#6a3e3e}message{color}{color:#000000}.{color}{color:#000000}getContent{color}{color:#000000}(XMLStreamReader.{color}{color:#7f0055}class{color}{color:#000000}) > == {color}{color:#7f0055}null,{color}* {color:#172b4d}is failing and reason > i found is, its being set in *TransformInInterceptor.*{color} > {color:#172b4d}To fix it (for now), i can remove that condition by extending > the interceptor and overriding *isGET* method. But i just want to know is > this expected or a bug ? And if i remove that condition, any other issues i > may get? Or is there any other solution to address my problem?{color} > -- This message was sent by Atlassian Jira (v8.20.10#820010)