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>>