I managed to fix this by adding an inInterceptor to the cxf bean. The interceptor removes the SOAPAction protocol header and is configured to run before the "official" SoapActionInInterceptor.
public class RemoveSoapActionInInterceptor extends AbstractSoapInterceptor { public RemoveSoapActionInInterceptor() { super(Phase.READ); addBefore(SoapActionInInterceptor.class.getName()); } @Override public void handleMessage(SoapMessage message) throws Fault { if (message.getVersion() instanceof Soap11) { Map<String, List<String>> headers = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS)); headers.remove("SOAPAction"); } } } For some strange reason I wasn't able to create a new SpringBus bean under a different name. I had to use the existing "cxf" beanId for it to work. <from uri="cxf://dynamicService?dataFormat=PAYLOAD&bus=#cxf"/> ddewaele wrote > I'm using the cxfEndpoint in my camel flow to act as a webservice > producer. > > I have a number of clients that are able to send SOAP messages to that > endpoint, where Camel does the > required processing and returns either a valid SOAP response or a SOAP > fault. > > > <cxf:cxfEndpoint id="soapMessageEndpoint" > > address="http://localhost:9080/app/webservices/service1" > endpointName="s:SoapOverHttpRouter" > serviceName="s:SOAPService" > xmlns:s="http://apache.org/service_soap_http"> > > > <cxf:properties> > > <entry key="dataFormat" value="PAYLOAD"/> > > </cxf:properties> > > > </cxf:cxfEndpoint> > > <from uri="cxf:bean:soapMessageEndpoint"/> > This endpoint is very dynamic in nature as > > * we are using payload mode > * are not bound to a particular WSDL / service class > * can accept different type of soap request payloads (for different soap > actions). > > We discovered an issue with a Soap 1.1 client that is sending a SOAPAction > HTTP header to the endpoint. When the SOAPAction HTTP header is present > the following soap fault is returned: > > The given SOAPAction > ServiceCommercialKnowledgeDatabase/v1/ServiceCommercialKnowledgeDatabasePortType_Soap11_HTTP/KnowledgeDatabaseConsultationLogEntryCreation > does not match an operation. > > As there is no WSDL associated with the endpoint (the endpoint is running > in payload mode) how can the SOAPAction HTTP header ever be matched ? > > What is the proper way to handle this ? ddewaele wrote > I'm using the cxfEndpoint in my camel flow to act as a webservice > producer. > > I have a number of clients that are able to send SOAP messages to that > endpoint, where Camel does the > required processing and returns either a valid SOAP response or a SOAP > fault. > > > <cxf:cxfEndpoint id="soapMessageEndpoint" > > address="http://localhost:9080/app/webservices/service1" > endpointName="s:SoapOverHttpRouter" > serviceName="s:SOAPService" > xmlns:s="http://apache.org/service_soap_http"> > > > <cxf:properties> > > <entry key="dataFormat" value="PAYLOAD"/> > > </cxf:properties> > > > </cxf:cxfEndpoint> > > <from uri="cxf:bean:soapMessageEndpoint"/> > This endpoint is very dynamic in nature as > > * we are using payload mode > * are not bound to a particular WSDL / service class > * can accept different type of soap request payloads (for different soap > actions). > > We discovered an issue with a Soap 1.1 client that is sending a SOAPAction > HTTP header to the endpoint. When the SOAPAction HTTP header is present > the following soap fault is returned: > > The given SOAPAction > ServiceCommercialKnowledgeDatabase/v1/ServiceCommercialKnowledgeDatabasePortType_Soap11_HTTP/KnowledgeDatabaseConsultationLogEntryCreation > does not match an operation. > > As there is no WSDL associated with the endpoint (the endpoint is running > in payload mode) how can the SOAPAction HTTP header ever be matched ? > > What is the proper way to handle this ? ddewaele wrote > I'm using the cxfEndpoint in my camel flow to act as a webservice > producer. > > I have a number of clients that are able to send SOAP messages to that > endpoint, where Camel does the > required processing and returns either a valid SOAP response or a SOAP > fault. > > > <cxf:cxfEndpoint id="soapMessageEndpoint" > > address="http://localhost:9080/app/webservices/service1" > endpointName="s:SoapOverHttpRouter" > serviceName="s:SOAPService" > xmlns:s="http://apache.org/service_soap_http"> > > > <cxf:properties> > > <entry key="dataFormat" value="PAYLOAD"/> > > </cxf:properties> > > > </cxf:cxfEndpoint> > > <from uri="cxf:bean:soapMessageEndpoint"/> > This endpoint is very dynamic in nature as > > * we are using payload mode > * are not bound to a particular WSDL / service class > * can accept different type of soap request payloads (for different soap > actions). > > We discovered an issue with a Soap 1.1 client that is sending a SOAPAction > HTTP header to the endpoint. When the SOAPAction HTTP header is present > the following soap fault is returned: > > The given SOAPAction > ServiceCommercialKnowledgeDatabase/v1/ServiceCommercialKnowledgeDatabasePortType_Soap11_HTTP/KnowledgeDatabaseConsultationLogEntryCreation > does not match an operation. > > As there is no WSDL associated with the endpoint (the endpoint is running > in payload mode) how can the SOAPAction HTTP header ever be matched ? > > What is the proper way to handle this ? -- View this message in context: http://camel.465427.n5.nabble.com/CXFEndpoint-and-SOAPAction-HTTP-header-tp5731906p5732124.html Sent from the Camel - Users mailing list archive at Nabble.com.