Hi Guillaume,

Yes, we'd better add it, since soapaction header check is mandatory for lots of servers, even though not for cxf server.
I will take care of this issue.
Cheers
Freeman

Guillaume Nodet wrote:
Hi Freeman, I'm just wondering if this interceptor should be added by default. Any opinion ?

On Thu, Apr 10, 2008 at 2:30 AM, Freeman Fang <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Hi Esteban,

    I forget to mention you need add
    <cxfbc:outInterceptors>
                       <bean
    class="org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor"/>
            </cxfbc:outInterceptors>
    for your cxf bc provider configuration, this interceptor will
    add soapAction according to the wsdl to your message.
    Best Regards


    Freeman

    Esteban Forzani wrote:

        Hi, I used ServiceMix-3.2.2-SNAPSHOT also, but don't work,
        throw it the
        following exception:

        09-abr-2008 15:54:32
        org.apache.cxf.phase.PhaseInterceptorChain doIntercept
        INFO: Interceptor has thrown exception, unwinding now
        java.lang.NullPointerException
               at
        org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown Source)
               at
        org.apache.xerces.dom.CoreDocumentImpl.importNode(Unknown Source)
               at
        
org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor.handleJBIFault(JbiInWsdl1I
        nterceptor.java:220)
               at
        
org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor.handleMessage(JbiInWsdl1In
        terceptor.java:142)
               at
        
org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor.handleMessage(JbiInWsdl1In
        terceptor.java:60)
               at
        
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
               at
        
org.apache.servicemix.cxfbc.CxfBcProviderMessageObserver.onMessage(CxfBcProviderMessageOb
        server.java:121)
               at
        
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.
        java:1976)
               at
        
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1812
        )
               at
        
org.apache.servicemix.cxfbc.CxfBcProvider.process(CxfBcProvider.java:200)
               at
        
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
               at
        
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:4
        90)
               at
        
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
               at
        
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImp
        l.java:610)
               at
        
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
               at
        
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
               at
        
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
               at
        
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
               at
        
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
               at java.lang.Thread.run(Thread.java:595)

        I used to capture the messages TCPMon  and  I discovered that
        it are not
        send the SOAPAction from the provider to external webservice.
        The exception is thrown when trying parse the fault.

        The request from the client to ESB is:

           POST /hello/ HTTP/1.1
           Content-Type: text/xml;charset=UTF-8
           SOAPAction: "http://tempuri.org/Operation1";
           User-Agent: Jakarta Commons-HttpClient/3.0.1
           Host: localhost:8082
           Content-Length: 424

           <soapenv:Envelope xmlns:soapenv="
        http://schemas.xmlsoap.org/soap/envelope/";
        xmlns:tem="http://tempuri.org/";>
              <soapenv:Header/>
              <soapenv:Body>
                 <tem:Operation1>
                    <!--Optional:-->
                    <tem:aplicacion>app1</tem:aplicacion>
                    <!--Optional:-->
                    <tem:usuario>user1</tem:usuario>
                 </tem:Operation1>
              </soapenv:Body>
           </soapenv:Envelope>


        The request from de ESB is:

           POST /webservices/hello.asmx HTTP/1.1
           Content-Type: text/xml; charset=UTF-8
           Accept: *
           Cache-Control: no-cache
           Pragma: no-cache
           User-Agent: Java/1.5.0_09
           Host: test.intranet:8085
           Connection: keep-alive
           Transfer-Encoding: chunked

           18a
           <soap:Envelope
        
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Body><tem:Operation1
        xmlns:tem="http://tempuri.org/";>

                    <tem:aplicacion xmlns:tem="http://tempuri.org/
        ">app1</tem:aplicacion>

                    <tem:usuario xmlns:tem="http://tempuri.org/
        ">user1</tem:usuario>
                 </tem:Operation1></soap:Body></soap:Envelope>
           0

        The Response:

           HTTP/1.1 500 Internal Server Error.
           Date: Wed, 09 Apr 2008 18:56:49 GMT
           Server: Microsoft-IIS/6.0
           IISExport: This web site was exported using IIS Export v4.1
           X-Powered-By: ASP.NET <http://ASP.NET>
           X-AspNet-Version: 1.1.4322
           Cache-Control: private
           Content-Type: text/xml; charset=utf-8
           Content-Length: 848

           <?xml version="1.0" encoding="utf-8"?>
           <soap:Envelope
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="
        http://www.w3.org/2001/XMLSchema";>
             <soap:Body>
               <soap:Fault>
                 <faultcode>soap:Client</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: Unable
        to handle request without a valid action parameter. Please
        supply a valid
        soap action.
              at
        System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
              at
        System.Web.Services.Protocols.SoapServerProtocol.Initialize()
              at
        System.Web.Services.Protocols.ServerProtocolFactory.Create(Type
        type, HttpContext context, HttpRequest request, HttpResponse
        response,
        Boolean&amp; abortProcessing)</faultstring>
                 <detail />
               </soap:Fault>
             </soap:Body>
           </soap:Envelope>


        Regards

        Esteban

        On Wed, Apr 9, 2008 at 1:10 PM, antoniofer
        <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

            Yes, as suggested in the thread we are using
            ServiceMix-3.2.2-SNAPSHOT but
            still getting that error :(



            gnodet wrote:
                Have you tried with 3.2.2-SNAPSHOT ? Lots of issues
                have been fixed in
            the
                cxf components afaik.

                On Wed, Apr 9, 2008 at 4:32 PM, antoniofer
                <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
            wrote:
                    Hi Esteban, Freeman, Guillaume,

                    I've been following this thread because I was
                    having the same issue
            than
                    Esteban (SoapAction header) when proxying web
                    services through
                    ServiceMix.
                    I'm getting an exception when the WS client tries
                    to run the WS by
                    connecting to ServiceMix:

                    INFO  - AutoDeploymentService  - Directory:
                    hotdeploy: Finished
                    installation
                    of archive:  wsproxy-cxf-sa.zip <- my SA
                    Apr 9, 2008 4:22:28 PM
                    org.apache.cxf.phase.PhaseInterceptorChain
                    doIntercept
                    INFO: Interceptor has thrown exception, unwinding now
                    java.lang.NullPointerException
                          at


            
org.apache.servicemix.cxfbc.CxfBcConsumer$JbiPostInvokerInterceptor.processFaultDetail(CxfBcConsumer.java:560)
                          at


            
org.apache.servicemix.cxfbc.CxfBcConsumer$JbiPostInvokerInterceptor.handleMessage(CxfBcConsumer.java:518)
                    ....etc.

                    My xbean.xml (gondor2 is the hostname of
                    ServiceMix server and altair
            is
                    the
                    hostname where the WebService is running) is:

                    <?xml version="1.0" encoding="UTF-8"?>
                    <beans
                    xmlns:sm="http://servicemix.apache.org/config/1.0";
                     xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
xmlns:firma="http://currencyconverter.strast.dit.upm.es";>
                             <cxfbc:consumer

                    
wsdl="http://altair:8080/CurrencyConverter/services/EURUSD?wsdl";
                                 service="firma:EURUSDService"
                                 endpoint="EURUSDProxy"
                                 targetEndpoint="EURUSD"
                                 targetService="firma:EURUSDService"
                                 targetInterface="firma:EURUSDSoapBinding"

                    
locationURI="http://gondor2:8080/CurrencyConverter/services/EURUSD";>
                             </cxfbc:consumer>
                             <cxfbc:provider

                    
wsdl="http://altair:8080/CurrencyConverter/services/EURUSD?wsdl";

                    
locationURI="http://altair:8080/CurrencyConverter/services/EURUSD";
                                 service="firma:EURUSDService"
                                 endpoint="EURUSD"
                                 interfaceName="firma:EURUSDSoapBinding">
                             </cxfbc:provider>
                    </beans>

                    I don't know if you need the .wsdl file. I'm not
                    sure if the endpoint,
                    service and interfaceName configuration is right.
                    Perhaps the problem
            is
                    different. Any suggestions?

                    Thank you very much!

                    Antonio


                    Freeman Fang wrote:
                        Hi Esteban,

                        The url is specified in the wsdl, or you can add
                        locationURI="http://whatyouwant"; to cxf bc
                        consumer to override it.
                        Regards

                        Freeman

                        Esteban Forzani wrote:
                            OK, thanks Freeman, it worked!  and how
                            can I invoke the consumer
            from
                    a
                            client? Which is your URL?

                            Thanks

                            Regards

                            Esteban

                            On Tue, Apr 8, 2008 at 9:43 AM, Freeman
                            Fang <[EMAIL PROTECTED]
                            <mailto:[EMAIL PROTECTED]>
                                       wrote:


                                Hi Esteban,
                                If you deploy su into a standalone
                                servicemix, you shouldn't
                    configure
                                an
                                embeded jbi bus, so just try

                                <?xml version="1.0" encoding="UTF-8"?>
                                <beans
                                
xmlns:sm="http://servicemix.apache.org/config/1.0";
                                 
xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
                                 xmlns:tempuri="http://tempuri.org/";>
                                        <cxfbc:consumer
wsdl="http://test.intranet/webservices/hello.asmx?WSDL
            "
                                            service="tempuri:helloPF"
                                            endpoint="helloPFPort"
targetEndpoint="helloPFPortProxy" targetService="tempuri:helloPF" targetInterface="tempuri:helloPFSoap">
                                        </cxfbc:consumer>
                                        <cxfbc:provider
wsdl="http://test.intranet/webservices/hello.asmx?WSDL
            "
                    locationURI="http://test.intranet/webservices/hello.asmx";
                                            service="tempuri:helloPF"
                                            endpoint="helloPFPortProxy"
interfaceName="tempuri:helloPFSoap">
                                        </cxfbc:provider>
                                </beans>

                                Regards
                                Freeman


                                Freeman

                                Esteban Forzani wrote:


                                    Hi Freeman, my jbi.xml of the SA is:

                                    <?xml version="1.0" encoding="UTF-8"?>
                                    <jbi
                                    xmlns="http://java.sun.com/xml/ns/jbi";
                                    version="1.0">
                                     <service-assembly>
                                      <identification>
                                        <name>HelloProxy-sa</name>
                                        <description>HelloProxy :: SA
                                    (Proxy Service)</description>
                                      </identification>
                                      <service-unit>
                                        <identification>
                                          <name>HelloProxy-cxfbc-su</name>
                                          <description>Este módulo es
                                    el encargado de configurar un
                                    servicio
                                    proxy usando el CXF BC del
                                    ESB.</description>
                                        </identification>
                                        <target>


             <artifacts-zip>HelloProxy-cxfbc-su-1.0-SNAPSHOT.zip</artifacts-zip>
<component-name>servicemix-cxf-bc</component-name>
                                        </target>
                                      </service-unit>
                                     </service-assembly>
                                    </jbi>

                                    This is generated by maven when
                                    run the install.

                                    Regards

                                    Esteban


                                    On Mon, Apr 7, 2008 at 11:50 AM,
                                    Freeman Fang
                    <[EMAIL PROTECTED]
                    <mailto:[EMAIL PROTECTED]>
                                    wrote:




                                        Hi Esteban,

                                        Seems your jbi descriptor
                                         didn't specify
                                        servicemix-cxf-bc as
                                        component-name. Would you
                                        please append your jbi.xml of
                                        the SA?

                                        Freeman


                                        Esteban Forzani wrote:




                                            Hi Freeman,

                                            When I use cxf bc provider
                                            an consumer I couldn't
                                            deploy the SU
                                            because
                                            throws the following error:
                                            "No endpoints found" in
                                            org.apache.servicemix.common
                                            .xbean.AbstractXBeanDeployer

                                            The xbean.xml for the
                                            cxf-bc-su is:
                                            <?xml version="1.0"
                                            encoding="UTF-8"?>
                                            <beans
                                            
xmlns:sm="http://servicemix.apache.org/config/1.0";
                                             
xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
                                             
xmlns:tempuri="http://tempuri.org/";>
                                             <sm:container id="jbi"
                                            embedded="true">
                                                 <sm:endpoints>
                                                     <cxfbc:consumer
                                                         wsdl="
                    http://test.intranet/webservices/hello.asmx?WSDL
                                            "
service="tempuri:helloPF" endpoint="helloPFPort" targetEndpoint="helloPFPortProxy" targetService="tempuri:helloPF" targetInterface="tempuri:helloPFSoap">
                                                     </cxfbc:consumer>
                                                     <cxfbc:provider
                                                         wsdl="
                    http://test.intranet/webservices/hello.asmx?WSDL
                                            "
                                                         locationURI="
                                            
http://test.intranet/webservices/hello.asmx";
service="tempuri:helloPF" endpoint="helloPFPortProxy" interfaceName="tempuri:helloPFSoap">
                                                     </cxfbc:provider>
                                                 </sm:endpoints>
                                             </sm:container>
                                            </beans>

                                            Thanks

                                            Esteban

                                            On Fri, Apr 4, 2008 at
                                            9:58 PM, Freeman Fang <
                    [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
                                            wrote:






                                                Hi Esteban,
                                                They both should work.
                                                For cxf bc consumer
                                                and provider, ensure
                                                the endpoint name used
                    in
                                                consumer and provider
                                                is different, for
                                                example, use
                                                helloPFPortProxy
                                                for
                                                provider in your case.
                                                And ensure the service
                                                / endpoint for
            your
                                                cxf
                                                bc
                                                consumer is same as it
                                                defined in the wsdl.
                                                We have a test to show
                                                how to configure cxf
                                                bc as a bridge, [1]
                    is
                                                the
                                                configuration for more
                                                details.
                                                For cxf bc provider
                                                and http consumer,
                                                ensure you add
                                                useJBIWrapper="false"
                                                for cxf bc provider
                                                configuration, this
            is
                                                new
                                                feature
                                                ([2] is jira to track
                                                it) after servicemix
                                                3.2.1 release, so
            you
                                                should try
                                                it with 3.2.2 snapshot.

                                                Best Regards

                                                Freeman

                                                [1]



            
http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/cxf_provider_consumer_bridge.xml
                                                
[2]http://issues.apache.org/activemq/browse/SM-1242

                                                Esteban Forzani wrote:






                                                    Thanks Freeman and
                                                    Guillaume, Can I
                                                    try with cxf bc
                                                    provider
            and
                                                    cxf
                                                    bc
                                                    consumer or http
                                                    consumer?

                                                    I tried both, when
                                                    I use cxf bc
                                                    provider an consumer I
            couldn't
                                                    deploy
                                                    the
                                                    SU because throws
                                                    the following error:
                                                    "No endpoints
                                                    found" in
                                                    
org.apache.servicemix.common.xbean.AbstractXBeanDeployer

                                                     E.g:
                                                    the xbean.xml for
                                                    the cxf-bc-su is:
                                                    <?xml
                                                    version="1.0"
                                                    encoding="UTF-8"?>
                                                    <beans
                                                    
xmlns:sm="http://servicemix.apache.org/config/1.0";
                                                     
xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
                                                     
xmlns:tempuri="http://tempuri.org/";>
                                                     <sm:container
                                                    id="jbi"
                                                    embedded="true">
                                                        <sm:endpoints>
<cxfbc:consumer
                                                                wsdl="
                                                    
http://test.intranet/webservices/hello.asmx?WSDL
                                                    "
service="tempuri:helloPF" endpoint="helloPFPort" targetEndpoint="helloPFPort" targetService="tempuri:helloPF" targetInterface="tempuri:helloPFSoap"> </cxfbc:consumer> <cxfbc:provider
                                                                wsdl="
                                                    
http://test.intranet/webservices/hello.asmx?WSDL
                                                    "
locationURI="
                                                    
http://test.intranet/webservices/hello.asmx";
service="tempuri:helloPF" endpoint="helloPFPort" interfaceName="tempuri:helloPFSoap"> </cxfbc:provider>
                                                        </sm:endpoints>
                                                     </sm:container>
                                                    </beans>

                                                    When I tried with
                                                    cxf bc provider
                                                    and http consumer
                                                    throw a
                                                    NullPointerException
                                                    in
                                                    
org.apache.servicemix.cxfbc.CxfBcProvider
                                                    becoause
                                                    exchange.getOperation()
                                                    is null!
                                                    The xbean.xml for
                                                    cxf-bc-su is:

                                                    <?xml
                                                    version="1.0"
                                                    encoding="UTF-8"?>
                                                    <beans
                                                     
xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
                                                     
xmlns:tempuri="http://tempuri.org/";>
<cxfbc:provider
                                                                wsdl="
                                                    
http://test.intranet/webservices/hellopf.asmx?WSDL";
locationURI="
                                                    
http://test.intranet/webservices/hellopf.asmx";
service="tempuri:helloPF" endpoint="helloPFPortProxy" interfaceName="tempuri:helloPFSoap"/>
                                                    </beans>

                                                    The xbean.xml for
                                                    http-su is:

                                                    <?xml
                                                    version="1.0"
                                                    encoding="UTF-8"?>

                                                    <beans
                                                    
xmlns:http="http://servicemix.apache.org/http/1.0";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="
                                                    
http://servicemix.apache.org/http/1.0servicemix-http.3.2.xsd";

xmlns:tempuri="http://tempuri.org/";
                                                    >
                                                     <http:endpoint
service="tempuri:helloPF" endpoint="soap" role="consumer" locationURI="http://0.0.0.0:8192/helloPF/"; targetEndpoint="helloPFPortProxy" targetService="tempuri:helloPF"/>
                                                    </beans>

                                                    Thanks

                                                    Esteban


                                                    On Tue, Apr 1,
                                                    2008 at 3:30 AM,
                                                    Freeman Fang <
                                                    [EMAIL PROTECTED]
                                                    <mailto:[EMAIL PROTECTED]>
                                                            wrote:








                                                        Hi Esteban,

                                                        You can try
                                                        with cxf bc
                                                        provider,
                                                        which needn't
                                                        specify soap
                                                        action
                                                        explicitly in
                                                        the xbean and
                                                        abstract it
                                                        dynamically
                                                        from the
                                                        message.

                                                        Regards

                                                        Freeman




                                                        Esteban
                                                        Forzani wrote:








                                                            Hello,

                                                            I have a
                                                            web
                                                            service
                                                            with 5
                                                            operations,
                                                            each with a
                                                            different
                                                            SOAPAction.
                                                            I'm using
                                                            the
                                                            servicemix-http
                                                            component
                                                            (proxy) to
                                                            send a
                                                            soap
                                                            request
                                                            to
                                                            this
                                                            webservice.
                                                            E.g.:

                                                             <http:endpoint
                                                            
service="WebServicesProxy-http-su:webServices"
endpoint="providerEndpoint" role="provider" locationURI="
                                                            
http://test.example/webservices/webservices.asmx";
defaultMep="
                                                            
http://www.w3.org/2004/08/wsdl/in-out";
soap="true" soapVersion="1.1"/>

                                                            The
                                                            request is
                                                            send to
                                                            the ESB
                                                            with the
                                                            SOAPAction
                                                            (E.g.
                                                            SOAPAction:
                                                            operation1)
                                                             but the
                                                            HTTP-BC
                                                            set the
                                                            SOAPAction
                                                            with "".

                                                            I used the
                                                            property
                                                            soapAction
                                                            in
                                                            xbean.xml,
                                                            but fixed me
                                                            the
                                                            operation
                                                            to
                                                            the endpoint.
                                                            E.g.:
                                                             <http:endpoint
                                                            
service="WebServicesProxy-http-su:webServices"
endpoint="providerEndpoint" role="provider" locationURI="
                                                            
http://test.example/webservices/webservices.asmx";
defaultMep="
                                                            
http://www.w3.org/2004/08/wsdl/in-out";
soap="true" soapVersion="1.1" soapAction="http://example.org/operation1"/>

                                                            Is it
                                                            possible
                                                            to put
                                                            this
                                                            property
                                                            dynamically
                                                            or take it
                                                            from
                                                            the
                                                            client's
                                                            request ?

                                                            Regards,

                                                            Esteban















                    --
                    View this message in context:

            
http://www.nabble.com/Take-SOAPAction-from-client%27s-request-tp16407528p16586203.html
                    Sent from the ServiceMix - User mailing list
                    archive at Nabble.com.


                --
                Cheers,
                Guillaume Nodet
                ------------------------
                Blog: http://gnodet.blogspot.com/


            --
            View this message in context:
            
http://www.nabble.com/Take-SOAPAction-from-client%27s-request-tp16407528p16589559.html
            Sent from the ServiceMix - User mailing list archive at
            Nabble.com.







--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/

Reply via email to