Hi everyone,

I further looked into the problem and found that the issue mentioned 
(error.txt) is probably caused by the SAAJOutInterceptor. I found in 
SAAJOutInterceptor:L123 there will be a MessageFactory created based on the 
currently handled Message (which is soap12). This will create a 
SAAJStreamWriter based on a SOAP12 message (L132). This will later cause the 
problem.

In the interceptor chain, the soapVersion is set only after the 
SAAJOutInterceptor:
  setup [PolicyOutInterceptor]
  pre-logical [SoapHeaderOutFilterInterceptor]
  post-logical [SoapPreProtocolOutInterceptor]
  prepare-send [MessageSenderInterceptor]
  pre-stream [LoggingOutInterceptor, AttachmentOutInterceptor, 
StaxOutInterceptor]
  pre-protocol [SAAJOutInterceptor]
  write [SetSoapVersionInterceptor, SoapOutInterceptor]
  marshal [BareOutInterceptor]
  write-ending [SoapOutEndingInterceptor]
  pre-protocol-ending [SAAJOutEndingInterceptor]
  pre-stream-ending [StaxOutEndingInterceptor]
  prepare-send-ending [MessageSenderEndingInterceptor]

I found two ways to work around this problem:

  *   Change the phase of SetSoapVersionInterceptor (i.e. to PHASE.SETUP)
  *   Change the SAAJOutInterceptor (to create the MessageFactory in 
SAAJOutInteceptor based on the in-message)

I also attached a example for your reference (start Server.java and use the 
Client.java to do a request).

What do you think, would it be possible/ make sense to have the 
SetSoapVersionInterceptor in an earlier phase?

Best regards,
Manuel

From: Shenavai, Manuel <manuel.shena...@sap.com>
Sent: Donnerstag, 22. Oktober 2020 10:09
To: users@camel.apache.org
Subject: [CAUTION] Camel CXF with SOAP 1.1 and SOAP 1.2

Hi everyone,

I have a question regarding the camel CXF component. I setup a cxfEndpoint 
using a SOAP 1.2 WSDL, endpoint & port. This allows to call the endpoint with 
SOAP 1.2. But when I call the endpoint with SOAP 1.1 messages, I got different 
results. In CamelBlueprintTestSupport this works (with SOAP 1.1 request I get 
SOAP 1.1 response), but in my real application it fails. With SOAP 1.1 the 
route is entered, but an error occurs when the response is trying to be send 
(logs attached, HIERARCHY_REQUEST_ERR: An attempt was made to insert a node 
where it is not permitted)

What is the expected behavior in this use-case? Should a SOAP1.2 Endpoint be 
able to handle SOAP1.1 message?

Thanks in advance &
Best regards,
Manuel


2020 10 19 
09:41:18#+00#WARN#org.apache.cxf.phase.PhaseInterceptorChain##P1940723736#https-jsse-nio-8041-exec-19###hil88r539g#na#na#na#na#Interceptor
 for 
{http://camel.apache.org/cxf/jaxws/provider}service\#{http://camel.apache.org/cxf/jaxws/provider}invoke
 has thrown exception, unwinding noworg.w3c.dom.DOMException: 
HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not 
permitted. 
        at 
com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:439)
        at 
com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:237)
        at 
com.sun.xml.messaging.saaj.soap.SOAPPartImpl.appendChild(SOAPPartImpl.java:498)
        at 
org.apache.cxf.staxutils.W3CDOMStreamWriter.setChild(W3CDOMStreamWriter.java:122)
        at 
org.apache.cxf.staxutils.W3CDOMStreamWriter.newChild(W3CDOMStreamWriter.java:112)
        at 
org.apache.cxf.staxutils.W3CDOMStreamWriter.createAndAddElement(W3CDOMStreamWriter.java:166)
        at 
org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter.createAndAddElement(OverlayW3CDOMStreamWriter.java:65)
        at 
org.apache.cxf.binding.soap.saaj.SAAJStreamWriter.createAndAddElement(SAAJStreamWriter.java:193)
        at 
org.apache.cxf.staxutils.W3CDOMStreamWriter.writeStartElement(W3CDOMStreamWriter.java:143)
        at 
org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter.writeStartElement(OverlayW3CDOMStreamWriter.java:210)
        at 
org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:132)
        at 
org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:87)
        at 
org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:67)
        at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
        at 
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:83)
        at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
        at 
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
        at 
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
        at 
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
        at 
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:189)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:303)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:222)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:278)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at 
com.sap.esb.security.cloud.authentication.CloudAuthenticationFilter.doFilter(CloudAuthenticationFilter.java:57)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at 
org.ops4j.pax.web.service.tomcat.internal.ServiceValve.invoke(ServiceValve.java:51)
        at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
        at 
com.sap.cloud.runtime.impl.bridge.security.AbstractAuthenticator.invoke(AbstractAuthenticator.java:142)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at 
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
        at 
com.sap.core.tenant.valve.TenantValidationValve.invokeNextValve(TenantValidationValve.java:182)
        at 
com.sap.core.tenant.valve.TenantValidationValve.invoke(TenantValidationValve.java:97)
        at 
com.sap.js.statistics.tomcat.valve.RequestTracingValve.callNextValve(RequestTracingValve.java:113)
        at 
com.sap.js.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:59)
        at 
com.sap.core.js.monitoring.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:27)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at 
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
        at 
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at 
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
        at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1626)
        at 
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:836)

<<attachment: soap.zip>>

Reply via email to