6 Replies Latest reply on Feb 10, 2010 1:21 PM by micdic

    Proxy CXF - Operation not bound on this message

    micdic

      I'm trying to expose a remote wsdl (made with Axis 1.4) on the FUSE ESB 4.1.0.2, using cfx (provider - consumer). (See attached files)

       

      I correctly see the WSDL exposed through the bus, but if i call the service using a common SOAP cliet (ie SoapUI) i get the following error:

      "Operation not bound on this message".

       

      From the servicemix.log

      -


      org.apache.cxf.interceptor.Fault: Operation not bound on this message

           at org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor.getOperation(JbiInWsdl1Interceptor.java:327) . .

      -


       

      If i call the service directly on Axis it works fine.

       

      Can someone please give me some help or hints about?.

      Thanks in advance.

        • 1. Re: Proxy CXF - Operation not bound on this message
          carnacchiola

          I have your same problem.

          I haven't received any reply and don't think that I and you will receive any.

          For that that I have thought the problem stay on chain of interceptor of FUSE.

          I have tried to view the source code of fuce cxf-bc and I have noticed what is the problem.

          Create a new interceptor that come before of that of FUSE that give the error do not solve the problem(If fail one interceptor fail all the chain).

          For me three are the possible solution.

          A)Disable all interceptor. I don't know how is possible and if is possible

          B)Modify source code of apache cxf-bc trying to resolve the bug(if this is a bug...)

          C)Another solution that try to modify xbean.xml of cxf-bc su or the wsdl of the service(I have tried but with no solution).

          I try with B I if find a solution I will tell you it.

           

          P.S

          I want say that if I see many and many thread with a lot of views and nobody response I think that 2 are possible reason:

          1)Nobody knows well FUSE(maybe...but I don't think so)

          2)Nobody wants share it knowledge(more and more possible)

          • 2. Re: Proxy CXF - Operation not bound on this message
            micdic

            Hi there.

            I'm trying to solve the problem posted with some debug activity.

            I've noticed that the error message come from this line of code

             

            BindingOperationInfo operation = (BindingOperationInfo)message.getExchange().get(BindingOperationInfo.class);

            in the org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor class.

             

            This object (operation) retrieved is null.

             

            I've printed the Exchange hash set:

            [

            org.apache.cxf.service.Service=[ServiceImpl CalcolatriceService],

            javax.xml.ws.wsdl.port=Calcolatrice,

            javax.xml.ws.wsdl.interface=Calcolatrice,

            javax.xml.ws.wsdl.description=http://localhost:8192/services/CalcolatriceService?wsdl,

            javax.jbi.component.ComponentContext=org.apache.servicemix.common.EndpointComponentContext@1eccd21,

            org.apache.cxf.Bus=org.apache.cxf.bus.CXFBusImpl@1ff5160, javax.xml.ws.wsdl.service=CalcolatriceService,

            org.apache.servicemix.cxfbc.CxfBcConsumer=Endpoint[service: CalcolatriceService, endpoint: CalcolatriceProxy, role: consumer],

            org.apache.cxf.binding.Binding=org.apache.cxf.binding.soap.SoapBinding@18f3cc5, org.apache.cxf.endpoint.Endpoint={}

            ]

             

            and no content is related to the BindingOperationInfo.class.

             

            I've also put in xbean.xml of the consumer component the targetOperation parameter specifing the operation (the only one) to bind, but nothing happens (always the same errror).

             

            <cxfbc:consumer

                      locationURI="http://localhost:8192/services/CalcolatriceService"

                            targetEndpoint="Calcolatrice"                    

                      endpoint="CalcolatriceProxy"

                      targetOperation="test:somma"

                                targetService="test:CalcolatriceService">

            </cxfbc:consumer>

             

            I've attached my new SA files (little bit cleaned). The problem seems to be related to the fact that the CXF Provider did not pass the binding operation info required.

             

            Any help?

            Thanks.

            • 3. Re: Proxy CXF - Operation not bound on this message
              micdic

              These are the component deployed in my test sample

              • 4. Re: Proxy CXF - Operation not bound on this message
                carnacchiola

                Hi.

                Your conclusions are right.

                I have noticed the same things few days ago.

                I think that a possible solution is this.

                Create an interceptor and insert it between the two interceptors

                JbiOperationInterceptor and JbiInWsdl1Interceptor, because between the call of theese two interceptor born the problem,  and then adding it the right operation for object Binding OperationInfo.

                I have tried with FUSE SERVICE FRAMEWORK INTERCEPTOR guide to create an interceptor.

                I have builded the interceptor and added it to my web service implementation class and interface but this interceptor is never called by FUSE.

                This now is my problem...how correctly create an interceptor?.

                I think that solving this problem the solution to the initial problem is more simple.

                 

                P.S

                How you have printed the Exchange hash set?.

                • 5. Re: Proxy CXF - Operation not bound on this message
                  micdic

                  Hi,

                  i've attached my source code for JbiInWsdl1Interceptor.java, where i simply

                  use System.out.println() to print the Exchange Hash Set.

                   

                  protected BindingOperationInfo getOperation(Message message)

                  {

                           if(message!=null)

                           {

                               System.out.println(message.getExchange().entrySet());

                  . . . .

                  }

                  • 6. Re: Proxy CXF - Operation not bound on this message
                    micdic

                    Even if the problem still remain the same for CXF, at least i've successfully proxied a WSDL through the ESB but with HTTP endpoint.

                     

                    I've attached here my components (consumer and provider).

                     

                    I've noticed that calling the consumer endpoint with SOAPUI caused a problem. In particular the request automatically generated was wrong and the so the call failed.

                     

                    As a workaorund I've generated the xml request envelope pointing directly to the remote WSDL (that i wish to expose), and generated a soap request, always using SOAPUI, and then i've successfully used this generated request with the ESB endpoint obtaining the correct answer.

                     

                    Hope this can help.