Hi Esteban,

The exception you see in smx 3.2.1 already get fixed, [1] track this issue.
And now we add SoapActionOutInterceptor by default for cxf bc provider, so you needn't add it in your configuratin, [2] track this issue.

[1]http://issues.apache.org/activemq/browse/SM-1159
[2]http://issues.apache.org/activemq/browse/SM-1313

Regards

Freeman

Esteban Forzani wrote:
Thanks Freeman! It worked!!!
The xbean.xml  was like this:

<cxfbc:consumer wsdl="classpath:hellopf.wsdl"
        endpoint="helloPFPort" targetEndpoint="helloPFSoap"
        targetService="tempuri:helloPF">
    </cxfbc:consumer>
    <cxfbc:provider
        wsdl="http://test.intranet/webservices/hellopf.asmx?WSDL";
        locationURI="http://test.intranet/webservices/hellopf.asmx";
        service="tempuri:helloPF" endpoint="helloPFSoap">
        <cxfbc:outInterceptors>
            <bean

class="org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor" />
        </cxfbc:outInterceptors>
    </cxfbc:provider>

The only comment is that in Servicemix-3.2.1 throws the next exception, but
it works well:

    INFO  [STDOUT] javax.jbi.messaging.MessagingException: Out not supported
    INFO  [STDOUT]     at
org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:357)
    INFO  [STDOUT]     at
org.apache.servicemix.cxfbc.CxfBcProviderMessageObserver.onMessage(CxfBcProviderMessageObserver.java:125)
    INFO  [STDOUT]     at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1932)
    INFO  [STDOUT]     at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1790)
    INFO  [STDOUT]     at
org.apache.servicemix.cxfbc.CxfBcProvider.process(CxfBcProvider.java:166)
    INFO  [STDOUT]     at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
    INFO  [STDOUT]     at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
    INFO  [STDOUT]     at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
    INFO  [STDOUT]     at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
    INFO  [STDOUT]     at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
    INFO  [STDOUT]     at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
    INFO  [STDOUT]     at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
    INFO  [STDOUT]     at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
    INFO  [STDOUT]     at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
    INFO  [STDOUT]     at java.lang.Thread.run(Thread.java:595)

In servicemix-3.2.2-SNAPSHOT works correctly.

Regards

Esteban


On Wed, Apr 9, 2008 at 9:30 PM, Freeman Fang <[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
   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]>
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]>


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





  <http://qtl.co.il/aff> 
<http://qtl.co.il><http://search.babylon.com/web/%0D%0A%0D%0A%0D%0A--%20%0D%0AEsteban%20Forzani?babsrc=qtl><http://search.yahoo.com/search?p=%0D%0A%0D%0A%0D%0A--%20%0D%0AEsteban%20Forzani><http://www.flickr.com/search/?q=%0D%0A%0D%0A%0D%0A--%20%0D%0AEsteban%20Forzani><http://www.youtube.com/results?search_query=%0D%0A%0D%0A%0D%0A--%20%0D%0AEsteban%20Forzani&amp;search=Search>



Reply via email to