You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Sergey Beryozkin <se...@iona.com> on 2009/10/29 11:59:05 UTC

servicemix-http and cxf-bc interoperability

Hi,

I'm working on a test which has to verify that servicemix-http and cxf-bc
components can interoperate (using soap payloads just for now).

So I'm trying to build a route which can be initiated by the test.
The route can be described as follows :

1. The test sends a SOAP request to the HTTP SOAP consumer (port 8192,
endpoint 'soap') which gets and and routes it to the HTTP SOAP provider
(endpoint 'soap2') which pushes it further to a service endpoint listening
on localhost:9000. 

2. CXF BC consumer listening on localhost:9000 receives it and routes it to
CXF BC provider which pushes it further to a service endpoint listening on
localhost:9001.

3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap request
and drops it to a jms queue which will be checked by the test.

I've gone ahead with implementing this route and it appears that the initial
message is received at 1 and eventually dropped to the queue, however I'm
seeing that the initiator (the browser in this case) gets HTTP 500 due to
one of the exchanges expiring.

I've posted some more details here :

http://pastebin.com/m7180a31e


I have few questions.

Is this test route built correctly, given what needs to be tested ? 

Why the initiator does not get the confirmation like 202/200 back given that
an initial soap consumer is listening in the in-only mode ? 

I think the problem has to do with the fact that a cxfbc:provider expects
some response back but the final http soap consumer just drops the in
message to the queue so cxfbc:provider fails.

Any hints will be appreciated

thanks, Sergey












-- 
View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: servicemix-http and cxf-bc interoperability

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Sorry typo mistake, I mean mep not map ;)
-----Original Message-----
From: Sergey Beryozkin <se...@iona.com>
Date: Thu, 29 Oct 2009 05:15:13 
To: <us...@servicemix.apache.org>
Subject: Re: servicemix-http and cxf-bc interoperability


Hi JB,

I'm not quite sure what you mean when you say 'with the map', but I'll try
to give more info...

The test service assembly has 3 units, http-in-su, cxf-bc-su, jms-su.

1. http-in-su :

<beans xmlns:http="http://servicemix.apache.org/http/1.0"
       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
  <!-- gets the initial request and redirects to 'soap2' -->
  <http:soap-consumer service="person:PersonService"
                      endpoint="soap"
                      targetEndpoint="soap2"  
                      targetService="person:PersonService"
                      locationURI="http://0.0.0.0:8192/PersonService/"
                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only"
                      wsdl="classpath:person.wsdl"/>

  <!-- sends it to the external service exposed by cxfbc:consumer -->
  <http:soap-provider service="person:PersonService"
                   endpoint="soap2"
                   interfaceName="person:Person"
                   locationURI="http://localhost:9000/PersonService/"
                   wsdl="classpath:person.wsdl"/>

  <!-- gets the message from the cxf:bc provider and drops it to the queue
-->

  <http:soap-consumer service="person:PersonService"
                      endpoint="soap3"
                      targetService="person:jms"
                      locationURI="http://localhost:9001/PersonService/"
                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only"
                      wsdl="classpath:person.wsdl"/>
 
</beans>

person.wsdl has 3 ports for PersonService, named soap, soap2 and soap3.

Next is the cxfbc-su :


<beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">

  <!-- gets the message sent from a http:soap-provider 'soap2' endpoint and
redirects to cxf:bc provider -->

  <cxfbc:consumer wsdl="classpath:person.wsdl"
                      targetService="person:PersonService"
                      targetInterface="person:Person"
                      endpoint="pojo"  
                      targetEndpoint="pojo2"/>

  <!-- sends it back to the http:soap-consumer 'soap3' -->
  <cxfbc:provider wsdl="classpath:person.wsdl"
                      locationURI="http://localhost:9001/PersonService/"
                      service="person:PersonService"
                      endpoint="pojo2"
                      interfaceName="person:Person"/>
</beans>

The person.wsdl shipped with the cxf-bc su has two ports named 'pojo' and
'pojo2'.

There's also a jms su which the 'soap3' endpoint delegates to :

beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
  <jms:endpoint service="person:jms"
                endpoint="jmsendpoint"
                role="provider"
                destinationStyle="queue"
                jmsProviderDestinationName="bridge.output"
                connectionFactory="#connectionFactory" />
  <bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="tcp://localhost:61616" />
  </bean>
</beans>

Let me know please if I can provide more info...
There're some log entries here : http://pastebin.com/m7180a31e

I'm going to look into it further. The interesting thing is that if I
introduce  cxf:se endpoint into the route and have a cxf:bc consumer
delegating to it (as opposed to cxfbc:provider) then the cxf:se endpoint
gets called and the initiator (browser) gets the 200 OK back...

So I'm wondering may be I need to add a cxf:se and a wiretap, for the
cxfbc:consumer to delegate to this wiretap instead, and with the wiretap
targeting the cxfse, but also copying the request (through inListener) to
the cxfbc:provider....

thanks, Sergey


Jean-Baptiste Onofré wrote:
> 
> Hi Sergey,
> 
> Could you provide the xbeans used (especially with the map) ?
> 
> Thx,
> Regards
> JB
> ------Original Message------
> From: Sergey Beryozkin
> To: users@servicemix.apache.org
> ReplyTo: users@servicemix.apache.org
> Subject: servicemix-http and cxf-bc interoperability
> Sent: Oct 29, 2009 11:59
> 
> 
> Hi,
> 
> I'm working on a test which has to verify that servicemix-http and cxf-bc
> components can interoperate (using soap payloads just for now).
> 
> So I'm trying to build a route which can be initiated by the test.
> The route can be described as follows :
> 
> 1. The test sends a SOAP request to the HTTP SOAP consumer (port 8192,
> endpoint 'soap') which gets and and routes it to the HTTP SOAP provider
> (endpoint 'soap2') which pushes it further to a service endpoint listening
> on localhost:9000. 
> 
> 2. CXF BC consumer listening on localhost:9000 receives it and routes it
> to
> CXF BC provider which pushes it further to a service endpoint listening on
> localhost:9001.
> 
> 3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap request
> and drops it to a jms queue which will be checked by the test.
> 
> I've gone ahead with implementing this route and it appears that the
> initial
> message is received at 1 and eventually dropped to the queue, however I'm
> seeing that the initiator (the browser in this case) gets HTTP 500 due to
> one of the exchanges expiring.
> 
> I've posted some more details here :
> 
> http://pastebin.com/m7180a31e
> 
> 
> I have few questions.
> 
> Is this test route built correctly, given what needs to be tested ? 
> 
> Why the initiator does not get the confirmation like 202/200 back given
> that
> an initial soap consumer is listening in the in-only mode ? 
> 
> I think the problem has to do with the fact that a cxfbc:provider expects
> some response back but the final http soap consumer just drops the in
> message to the queue so cxfbc:provider fails.
> 
> Any hints will be appreciated
> 
> thanks, Sergey
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> -- 
> View this message in context:
> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
> 
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26111901.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: servicemix-http and cxf-bc interoperability

Posted by Sergey Beryozkin <se...@iona.com>.
Well, I think it's kind of working now...

cxf bc consumer is still doing in/out but it delegates to wiretap, the
wiretap send the message to cxfse and also to cxfbc:producer which is doing
an in-only mep (or is it out-only ?) as it's using a person2.wsdl with
output/faults removed.

so it appears a message is dropped to the queue (JConsole is not quite
helpful) abd the browser gets it 200 OK and cxfse gets invoked along the way
too.

May be it's still an illusion that it is working. I'll try the actual test
tomorrow...



Sergey Beryozkin wrote:
> 
> Hi Freeman
> 
>> I think you also need remove fault part
> I did...
> 
>> And how about add defaultMep="http://www.w3.org/2004/08/wsdl/in-only" 
> 
> I tried but I think either cxf bc consumer or cxf bc provider did not
> support it (a setter)
> 
> will keep trying...
> 
> cheers, Sergey
> 
> 
> 
> Freeman Fang wrote:
>> 
>> Hi Sergey,
>> 
>> I think you also need remove fault part of the operation/binding from  
>> wsdl as oneway shouldn't include output and fault.
>> And how about add defaultMep="http://www.w3.org/2004/08/wsdl/in-only"  
>> to all http endpoint in the flow?
>> 
>> Regards
>> Freeman
>> On 2009-10-29, at 下午9:33, Sergey Beryozkin wrote:
>> 
>>>
>>> Hi Freeman
>>>
>>> After commenting out the "<output>" bits in portType/operation and
>>> binding/operation in the wsdl shipped with cxf-bc-su I can see
>>> cxfbc;consumer delegating to cxfbc:provider :
>>>
>>> 13:13:54,671 | DEBUG |  /PersonService/ |  
>>> NMR                              |
>>> .servicemix.nmr.core.ChannelImpl  198 | Channel
>>> org.apache.servicemix.nmr.core.ChannelImpl@9c62da delivering  
>>> exchange: [
>>>  id:        23b54014-555a-422f-8c7e-bc90695ce464
>>>  mep:       InOnly
>>>  status:    Active
>>>  role:      Consumer
>>>  target:
>>> PropertyMatchingReference[{SERVICE_NAME={http://servicemix.apache.org/samples/wsdl-first 
>>> }PersonService,
>>> ENDPOINT_NAME=pojo3}]
>>>  operation: {http://servicemix.apache.org/samples/wsdl-first}GetPerson
>>>  properties: [
>>>      javax.jbi.ServiceEndpoint =
>>> org.apache.servicemix.jbi.runtime.impl.ServiceEndpointImpl@127510b
>>>      javax.jbi.messaging.MessageExchange =
>>> org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
>>>      javax.jbi.messaging.sendSync = <null>
>>>      javax.jbi.ServiceName =
>>> {http://servicemix.apache.org/samples/wsdl-first}PersonService
>>>      org.apache.servicemix.correlationId =
>>> 23b54014-555a-422f-8c7e-bc90695ce464
>>>      javax.jbi.transaction.jta = <null>
>>>      javax.jbi.InterfaceName =
>>> {http://servicemix.apache.org/samples/wsdl-first}Person
>>>      org.apache.servicemix.senderEndpoint =
>>> {http://servicemix.apache.org/samples/wsdl-first}PersonService:pojo
>>>  ]
>>>  In: [
>>>    content: <?xml version="1.0" encoding="UTF-8"?><jbi:message
>>> xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"
>>> xmlns:msg="http://servicemix.apache.org/samples/wsdl-first"
>>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> name="GetPersonRequest" type="msg:GetPersonRequest"
>>> version="1.0"><jbi:part><tns:GetPerson
>>> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
>>> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types">
>>>      <tns:personId>world</tns:personId>
>>>    </tns:GetPerson></jbi:part></jbi:message>
>>>    properties: [
>>>      javax.jbi.messaging.protocol.headers = {}
>>>    ]
>>>  ]
>>> ]
>>>
>>> and then a provider invoking :
>>>
>>> 13:13:54,749 | DEBUG | -cxf-bc-thread-2 |  
>>> HTTPConduit                      |
>>> e.cxf.transport.http.HTTPConduit  933 | Sending POST Message with  
>>> Headers to
>>> http://localhost:9001/PersonService/ Conduit
>>> :{http://servicemix.apache.org/samples/wsdl-first}pojo3.http-conduit
>>> Content-Type: text/xml; charset=UTF-8
>>>
>>> However, immediately after that I can see :
>>>
>>> java.io.IOException: An existing connection was forcibly closed by the
>>> remote host
>>>
>>> and this is together with
>>>
>>> 13:13:54,780 | DEBUG |  /PersonService/ |  
>>> jetty                            |
>>> .service.internal.util.JCLLogger   85 | servlet holder=jbiServlet
>>> 13:13:54,780 | DEBUG |  /PersonService/ |  
>>> HttpComponent                    |
>>> p.endpoints.HttpConsumerEndpoint  276 | Receiving HTTP request: POST
>>> /PersonService/ HTTP/1.1
>>> Content-Type: text/xml; charset=UTF-8
>>>
>>> which confirms the final http consumer gets this message
>>>
>>> and then
>>>
>>> 13:14:20,671 | DEBUG | NetworkBridge    |  
>>> DemandForwardingBridge           |
>>> .DemandForwardingBridgeSupport$5  373 | Caught exception sending  
>>> shutdown
>>> org.apache.activemq.transport.InactivityIOException: Channel was  
>>> inactive
>>> for too long: Heather820/10.5.2.22:61616
>>> 	at
>>> org 
>>> .apache 
>>> .activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java: 
>>> 229)
>>> 	at
>>> org 
>>> .apache 
>>> .activemq.transport.TransportFilter.oneway(TransportFilter.java:83)
>>> 	at
>>> org 
>>> .apache 
>>> .activemq 
>>> .transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104)
>>> 	at
>>> org 
>>> .apache.activemq.transport.MutexTransport.oneway(MutexTransport.java: 
>>> 40)
>>> 	at
>>> org 
>>> .apache 
>>> .activemq 
>>> .transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
>>> 	at
>>> org.apache.activemq.network.DemandForwardingBridgeSupport 
>>> $5.run(DemandForwardingBridgeSupport.java:371)
>>> 	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)
>>> 13:14:21,703 | ERROR | -cxf-bc-thread-2 |  
>>> CxfBcComponent                   |
>>> icemix.common.AsyncBaseLifeCycle  480 | Error processing exchange
>>> org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
>>> org.apache.servicemix.nmr.core.ChannelClosedException
>>> 	at
>>> org.apache.servicemix.nmr.core.ChannelImpl.dispatch(ChannelImpl.java: 
>>> 268)
>>>
>>>
>>> I'm confused :-)
>>> I reckon I can deal with improving the test once I can the basic  
>>> route being
>>> up and running :-)
>>>
>>> cheers, Sergey
>>>
>>>
>>> Freeman Fang wrote:
>>>>
>>>> Hi Sergey,
>>>>
>>>> Cxf bc provider/consumer determine the MEP from the wsdl model, so if
>>>> it's oneway in wsdl, then it's InOnly exchange.
>>>> So I guess the problem may come from that the method defined in your
>>>> wsdl isn't oneway, so that cxf bc provider expect some response from
>>>> the queue.
>>>> If you want to use InOnly MEP for cxf bc provider, ensure the method
>>>> in wsdl is oneway.
>>>>
>>>> Btw, your test flow include http provider ==> cxf bc consumer over
>>>> http and cxf bc provider ==> http consumer over http, that's ok, if  
>>>> it
>>>> also can include something like
>>>> cxf bc consumer==>http provider through NMR and http consumer===>cxf
>>>> bc provider through NMR, that would be great.
>>>>
>>>>
>>>> Best Regards
>>>> Freeman
>>>>
>>>> On 2009-10-29, at 下午8:15, Sergey Beryozkin wrote:
>>>>
>>>>>
>>>>> Hi JB,
>>>>>
>>>>> I'm not quite sure what you mean when you say 'with the map', but
>>>>> I'll try
>>>>> to give more info...
>>>>>
>>>>> The test service assembly has 3 units, http-in-su, cxf-bc-su, jms- 
>>>>> su.
>>>>>
>>>>> 1. http-in-su :
>>>>>
>>>>> <beans xmlns:http="http://servicemix.apache.org/http/1.0"
>>>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>>>> <!-- gets the initial request and redirects to 'soap2' -->
>>>>> <http:soap-consumer service="person:PersonService"
>>>>>                     endpoint="soap"
>>>>>                     targetEndpoint="soap2"
>>>>>                     targetService="person:PersonService"
>>>>>                     locationURI="http://0.0.0.0:8192/PersonService/"
>>>>>                     defaultMep="http://www.w3.org/2004/08/wsdl/in-only
>>>>> "
>>>>>                     wsdl="classpath:person.wsdl"/>
>>>>>
>>>>> <!-- sends it to the external service exposed by cxfbc:consumer -->
>>>>> <http:soap-provider service="person:PersonService"
>>>>>                  endpoint="soap2"
>>>>>                  interfaceName="person:Person"
>>>>>                  locationURI="http://localhost:9000/PersonService/"
>>>>>                  wsdl="classpath:person.wsdl"/>
>>>>>
>>>>> <!-- gets the message from the cxf:bc provider and drops it to the
>>>>> queue
>>>>> -->
>>>>>
>>>>> <http:soap-consumer service="person:PersonService"
>>>>>                     endpoint="soap3"
>>>>>                     targetService="person:jms"
>>>>>                     locationURI="http://localhost:9001/
>>>>> PersonService/"
>>>>>                     defaultMep="http://www.w3.org/2004/08/wsdl/in-only
>>>>> "
>>>>>                     wsdl="classpath:person.wsdl"/>
>>>>>
>>>>> </beans>
>>>>>
>>>>> person.wsdl has 3 ports for PersonService, named soap, soap2 and
>>>>> soap3.
>>>>>
>>>>> Next is the cxfbc-su :
>>>>>
>>>>>
>>>>> <beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>>>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>>>>
>>>>> <!-- gets the message sent from a http:soap-provider 'soap2'
>>>>> endpoint and
>>>>> redirects to cxf:bc provider -->
>>>>>
>>>>> <cxfbc:consumer wsdl="classpath:person.wsdl"
>>>>>                     targetService="person:PersonService"
>>>>>                     targetInterface="person:Person"
>>>>>                     endpoint="pojo"
>>>>>                     targetEndpoint="pojo2"/>
>>>>>
>>>>> <!-- sends it back to the http:soap-consumer 'soap3' -->
>>>>> <cxfbc:provider wsdl="classpath:person.wsdl"
>>>>>                     locationURI="http://localhost:9001/
>>>>> PersonService/"
>>>>>                     service="person:PersonService"
>>>>>                     endpoint="pojo2"
>>>>>                     interfaceName="person:Person"/>
>>>>> </beans>
>>>>>
>>>>> The person.wsdl shipped with the cxf-bc su has two ports named
>>>>> 'pojo' and
>>>>> 'pojo2'.
>>>>>
>>>>> There's also a jms su which the 'soap3' endpoint delegates to :
>>>>>
>>>>> beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
>>>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>>>> <jms:endpoint service="person:jms"
>>>>>               endpoint="jmsendpoint"
>>>>>               role="provider"
>>>>>               destinationStyle="queue"
>>>>>               jmsProviderDestinationName="bridge.output"
>>>>>               connectionFactory="#connectionFactory" />
>>>>> <bean id="connectionFactory"
>>>>> class="org.apache.activemq.ActiveMQConnectionFactory">
>>>>>   <property name="brokerURL" value="tcp://localhost:61616" />
>>>>> </bean>
>>>>> </beans>
>>>>>
>>>>> Let me know please if I can provide more info...
>>>>> There're some log entries here : http://pastebin.com/m7180a31e
>>>>>
>>>>> I'm going to look into it further. The interesting thing is that  
>>>>> if I
>>>>> introduce  cxf:se endpoint into the route and have a cxf:bc consumer
>>>>> delegating to it (as opposed to cxfbc:provider) then the cxf:se
>>>>> endpoint
>>>>> gets called and the initiator (browser) gets the 200 OK back...
>>>>>
>>>>> So I'm wondering may be I need to add a cxf:se and a wiretap, for  
>>>>> the
>>>>> cxfbc:consumer to delegate to this wiretap instead, and with the
>>>>> wiretap
>>>>> targeting the cxfse, but also copying the request (through
>>>>> inListener) to
>>>>> the cxfbc:provider....
>>>>>
>>>>> thanks, Sergey
>>>>>
>>>>>
>>>>> Jean-Baptiste Onofré wrote:
>>>>>>
>>>>>> Hi Sergey,
>>>>>>
>>>>>> Could you provide the xbeans used (especially with the map) ?
>>>>>>
>>>>>> Thx,
>>>>>> Regards
>>>>>> JB
>>>>>> ------Original Message------
>>>>>> From: Sergey Beryozkin
>>>>>> To: users@servicemix.apache.org
>>>>>> ReplyTo: users@servicemix.apache.org
>>>>>> Subject: servicemix-http and cxf-bc interoperability
>>>>>> Sent: Oct 29, 2009 11:59
>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm working on a test which has to verify that servicemix-http and
>>>>>> cxf-bc
>>>>>> components can interoperate (using soap payloads just for now).
>>>>>>
>>>>>> So I'm trying to build a route which can be initiated by the test.
>>>>>> The route can be described as follows :
>>>>>>
>>>>>> 1. The test sends a SOAP request to the HTTP SOAP consumer (port
>>>>>> 8192,
>>>>>> endpoint 'soap') which gets and and routes it to the HTTP SOAP
>>>>>> provider
>>>>>> (endpoint 'soap2') which pushes it further to a service endpoint
>>>>>> listening
>>>>>> on localhost:9000.
>>>>>>
>>>>>> 2. CXF BC consumer listening on localhost:9000 receives it and
>>>>>> routes it
>>>>>> to
>>>>>> CXF BC provider which pushes it further to a service endpoint
>>>>>> listening on
>>>>>> localhost:9001.
>>>>>>
>>>>>> 3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap
>>>>>> request
>>>>>> and drops it to a jms queue which will be checked by the test.
>>>>>>
>>>>>> I've gone ahead with implementing this route and it appears that  
>>>>>> the
>>>>>> initial
>>>>>> message is received at 1 and eventually dropped to the queue,
>>>>>> however I'm
>>>>>> seeing that the initiator (the browser in this case) gets HTTP 500
>>>>>> due to
>>>>>> one of the exchanges expiring.
>>>>>>
>>>>>> I've posted some more details here :
>>>>>>
>>>>>> http://pastebin.com/m7180a31e
>>>>>>
>>>>>>
>>>>>> I have few questions.
>>>>>>
>>>>>> Is this test route built correctly, given what needs to be tested ?
>>>>>>
>>>>>> Why the initiator does not get the confirmation like 202/200 back
>>>>>> given
>>>>>> that
>>>>>> an initial soap consumer is listening in the in-only mode ?
>>>>>>
>>>>>> I think the problem has to do with the fact that a cxfbc:provider
>>>>>> expects
>>>>>> some response back but the final http soap consumer just drops  
>>>>>> the in
>>>>>> message to the queue so cxfbc:provider fails.
>>>>>>
>>>>>> Any hints will be appreciated
>>>>>>
>>>>>> thanks, Sergey
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
>>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> -- 
>>>>> View this message in context:
>>>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26111901.html
>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>
>>>>
>>>>
>>>> -- 
>>>> Freeman Fang
>>>> ------------------------
>>>> Open Source SOA: http://fusesource.com
>>>>
>>>>
>>>>
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26113149.html
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>> 
>> 
>> -- 
>> Freeman Fang
>> ------------------------
>> Open Source SOA: http://fusesource.com
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26118159.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: servicemix-http and cxf-bc interoperability

Posted by Sergey Beryozkin <se...@iona.com>.
Hi Freeman

> I think you also need remove fault part
I did...

> And how about add defaultMep="http://www.w3.org/2004/08/wsdl/in-only" 

I tried but I think either cxf bc consumer or cxf bc provider did not
support it (a setter)

will keep trying...

cheers, Sergey



Freeman Fang wrote:
> 
> Hi Sergey,
> 
> I think you also need remove fault part of the operation/binding from  
> wsdl as oneway shouldn't include output and fault.
> And how about add defaultMep="http://www.w3.org/2004/08/wsdl/in-only"  
> to all http endpoint in the flow?
> 
> Regards
> Freeman
> On 2009-10-29, at 下午9:33, Sergey Beryozkin wrote:
> 
>>
>> Hi Freeman
>>
>> After commenting out the "<output>" bits in portType/operation and
>> binding/operation in the wsdl shipped with cxf-bc-su I can see
>> cxfbc;consumer delegating to cxfbc:provider :
>>
>> 13:13:54,671 | DEBUG |  /PersonService/ |  
>> NMR                              |
>> .servicemix.nmr.core.ChannelImpl  198 | Channel
>> org.apache.servicemix.nmr.core.ChannelImpl@9c62da delivering  
>> exchange: [
>>  id:        23b54014-555a-422f-8c7e-bc90695ce464
>>  mep:       InOnly
>>  status:    Active
>>  role:      Consumer
>>  target:
>> PropertyMatchingReference[{SERVICE_NAME={http://servicemix.apache.org/samples/wsdl-first 
>> }PersonService,
>> ENDPOINT_NAME=pojo3}]
>>  operation: {http://servicemix.apache.org/samples/wsdl-first}GetPerson
>>  properties: [
>>      javax.jbi.ServiceEndpoint =
>> org.apache.servicemix.jbi.runtime.impl.ServiceEndpointImpl@127510b
>>      javax.jbi.messaging.MessageExchange =
>> org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
>>      javax.jbi.messaging.sendSync = <null>
>>      javax.jbi.ServiceName =
>> {http://servicemix.apache.org/samples/wsdl-first}PersonService
>>      org.apache.servicemix.correlationId =
>> 23b54014-555a-422f-8c7e-bc90695ce464
>>      javax.jbi.transaction.jta = <null>
>>      javax.jbi.InterfaceName =
>> {http://servicemix.apache.org/samples/wsdl-first}Person
>>      org.apache.servicemix.senderEndpoint =
>> {http://servicemix.apache.org/samples/wsdl-first}PersonService:pojo
>>  ]
>>  In: [
>>    content: <?xml version="1.0" encoding="UTF-8"?><jbi:message
>> xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"
>> xmlns:msg="http://servicemix.apache.org/samples/wsdl-first"
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> name="GetPersonRequest" type="msg:GetPersonRequest"
>> version="1.0"><jbi:part><tns:GetPerson
>> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
>> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types">
>>      <tns:personId>world</tns:personId>
>>    </tns:GetPerson></jbi:part></jbi:message>
>>    properties: [
>>      javax.jbi.messaging.protocol.headers = {}
>>    ]
>>  ]
>> ]
>>
>> and then a provider invoking :
>>
>> 13:13:54,749 | DEBUG | -cxf-bc-thread-2 |  
>> HTTPConduit                      |
>> e.cxf.transport.http.HTTPConduit  933 | Sending POST Message with  
>> Headers to
>> http://localhost:9001/PersonService/ Conduit
>> :{http://servicemix.apache.org/samples/wsdl-first}pojo3.http-conduit
>> Content-Type: text/xml; charset=UTF-8
>>
>> However, immediately after that I can see :
>>
>> java.io.IOException: An existing connection was forcibly closed by the
>> remote host
>>
>> and this is together with
>>
>> 13:13:54,780 | DEBUG |  /PersonService/ |  
>> jetty                            |
>> .service.internal.util.JCLLogger   85 | servlet holder=jbiServlet
>> 13:13:54,780 | DEBUG |  /PersonService/ |  
>> HttpComponent                    |
>> p.endpoints.HttpConsumerEndpoint  276 | Receiving HTTP request: POST
>> /PersonService/ HTTP/1.1
>> Content-Type: text/xml; charset=UTF-8
>>
>> which confirms the final http consumer gets this message
>>
>> and then
>>
>> 13:14:20,671 | DEBUG | NetworkBridge    |  
>> DemandForwardingBridge           |
>> .DemandForwardingBridgeSupport$5  373 | Caught exception sending  
>> shutdown
>> org.apache.activemq.transport.InactivityIOException: Channel was  
>> inactive
>> for too long: Heather820/10.5.2.22:61616
>> 	at
>> org 
>> .apache 
>> .activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java: 
>> 229)
>> 	at
>> org 
>> .apache 
>> .activemq.transport.TransportFilter.oneway(TransportFilter.java:83)
>> 	at
>> org 
>> .apache 
>> .activemq 
>> .transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104)
>> 	at
>> org 
>> .apache.activemq.transport.MutexTransport.oneway(MutexTransport.java: 
>> 40)
>> 	at
>> org 
>> .apache 
>> .activemq 
>> .transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
>> 	at
>> org.apache.activemq.network.DemandForwardingBridgeSupport 
>> $5.run(DemandForwardingBridgeSupport.java:371)
>> 	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)
>> 13:14:21,703 | ERROR | -cxf-bc-thread-2 |  
>> CxfBcComponent                   |
>> icemix.common.AsyncBaseLifeCycle  480 | Error processing exchange
>> org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
>> org.apache.servicemix.nmr.core.ChannelClosedException
>> 	at
>> org.apache.servicemix.nmr.core.ChannelImpl.dispatch(ChannelImpl.java: 
>> 268)
>>
>>
>> I'm confused :-)
>> I reckon I can deal with improving the test once I can the basic  
>> route being
>> up and running :-)
>>
>> cheers, Sergey
>>
>>
>> Freeman Fang wrote:
>>>
>>> Hi Sergey,
>>>
>>> Cxf bc provider/consumer determine the MEP from the wsdl model, so if
>>> it's oneway in wsdl, then it's InOnly exchange.
>>> So I guess the problem may come from that the method defined in your
>>> wsdl isn't oneway, so that cxf bc provider expect some response from
>>> the queue.
>>> If you want to use InOnly MEP for cxf bc provider, ensure the method
>>> in wsdl is oneway.
>>>
>>> Btw, your test flow include http provider ==> cxf bc consumer over
>>> http and cxf bc provider ==> http consumer over http, that's ok, if  
>>> it
>>> also can include something like
>>> cxf bc consumer==>http provider through NMR and http consumer===>cxf
>>> bc provider through NMR, that would be great.
>>>
>>>
>>> Best Regards
>>> Freeman
>>>
>>> On 2009-10-29, at 下午8:15, Sergey Beryozkin wrote:
>>>
>>>>
>>>> Hi JB,
>>>>
>>>> I'm not quite sure what you mean when you say 'with the map', but
>>>> I'll try
>>>> to give more info...
>>>>
>>>> The test service assembly has 3 units, http-in-su, cxf-bc-su, jms- 
>>>> su.
>>>>
>>>> 1. http-in-su :
>>>>
>>>> <beans xmlns:http="http://servicemix.apache.org/http/1.0"
>>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>>> <!-- gets the initial request and redirects to 'soap2' -->
>>>> <http:soap-consumer service="person:PersonService"
>>>>                     endpoint="soap"
>>>>                     targetEndpoint="soap2"
>>>>                     targetService="person:PersonService"
>>>>                     locationURI="http://0.0.0.0:8192/PersonService/"
>>>>                     defaultMep="http://www.w3.org/2004/08/wsdl/in-only
>>>> "
>>>>                     wsdl="classpath:person.wsdl"/>
>>>>
>>>> <!-- sends it to the external service exposed by cxfbc:consumer -->
>>>> <http:soap-provider service="person:PersonService"
>>>>                  endpoint="soap2"
>>>>                  interfaceName="person:Person"
>>>>                  locationURI="http://localhost:9000/PersonService/"
>>>>                  wsdl="classpath:person.wsdl"/>
>>>>
>>>> <!-- gets the message from the cxf:bc provider and drops it to the
>>>> queue
>>>> -->
>>>>
>>>> <http:soap-consumer service="person:PersonService"
>>>>                     endpoint="soap3"
>>>>                     targetService="person:jms"
>>>>                     locationURI="http://localhost:9001/
>>>> PersonService/"
>>>>                     defaultMep="http://www.w3.org/2004/08/wsdl/in-only
>>>> "
>>>>                     wsdl="classpath:person.wsdl"/>
>>>>
>>>> </beans>
>>>>
>>>> person.wsdl has 3 ports for PersonService, named soap, soap2 and
>>>> soap3.
>>>>
>>>> Next is the cxfbc-su :
>>>>
>>>>
>>>> <beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>>>
>>>> <!-- gets the message sent from a http:soap-provider 'soap2'
>>>> endpoint and
>>>> redirects to cxf:bc provider -->
>>>>
>>>> <cxfbc:consumer wsdl="classpath:person.wsdl"
>>>>                     targetService="person:PersonService"
>>>>                     targetInterface="person:Person"
>>>>                     endpoint="pojo"
>>>>                     targetEndpoint="pojo2"/>
>>>>
>>>> <!-- sends it back to the http:soap-consumer 'soap3' -->
>>>> <cxfbc:provider wsdl="classpath:person.wsdl"
>>>>                     locationURI="http://localhost:9001/
>>>> PersonService/"
>>>>                     service="person:PersonService"
>>>>                     endpoint="pojo2"
>>>>                     interfaceName="person:Person"/>
>>>> </beans>
>>>>
>>>> The person.wsdl shipped with the cxf-bc su has two ports named
>>>> 'pojo' and
>>>> 'pojo2'.
>>>>
>>>> There's also a jms su which the 'soap3' endpoint delegates to :
>>>>
>>>> beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
>>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>>> <jms:endpoint service="person:jms"
>>>>               endpoint="jmsendpoint"
>>>>               role="provider"
>>>>               destinationStyle="queue"
>>>>               jmsProviderDestinationName="bridge.output"
>>>>               connectionFactory="#connectionFactory" />
>>>> <bean id="connectionFactory"
>>>> class="org.apache.activemq.ActiveMQConnectionFactory">
>>>>   <property name="brokerURL" value="tcp://localhost:61616" />
>>>> </bean>
>>>> </beans>
>>>>
>>>> Let me know please if I can provide more info...
>>>> There're some log entries here : http://pastebin.com/m7180a31e
>>>>
>>>> I'm going to look into it further. The interesting thing is that  
>>>> if I
>>>> introduce  cxf:se endpoint into the route and have a cxf:bc consumer
>>>> delegating to it (as opposed to cxfbc:provider) then the cxf:se
>>>> endpoint
>>>> gets called and the initiator (browser) gets the 200 OK back...
>>>>
>>>> So I'm wondering may be I need to add a cxf:se and a wiretap, for  
>>>> the
>>>> cxfbc:consumer to delegate to this wiretap instead, and with the
>>>> wiretap
>>>> targeting the cxfse, but also copying the request (through
>>>> inListener) to
>>>> the cxfbc:provider....
>>>>
>>>> thanks, Sergey
>>>>
>>>>
>>>> Jean-Baptiste Onofré wrote:
>>>>>
>>>>> Hi Sergey,
>>>>>
>>>>> Could you provide the xbeans used (especially with the map) ?
>>>>>
>>>>> Thx,
>>>>> Regards
>>>>> JB
>>>>> ------Original Message------
>>>>> From: Sergey Beryozkin
>>>>> To: users@servicemix.apache.org
>>>>> ReplyTo: users@servicemix.apache.org
>>>>> Subject: servicemix-http and cxf-bc interoperability
>>>>> Sent: Oct 29, 2009 11:59
>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> I'm working on a test which has to verify that servicemix-http and
>>>>> cxf-bc
>>>>> components can interoperate (using soap payloads just for now).
>>>>>
>>>>> So I'm trying to build a route which can be initiated by the test.
>>>>> The route can be described as follows :
>>>>>
>>>>> 1. The test sends a SOAP request to the HTTP SOAP consumer (port
>>>>> 8192,
>>>>> endpoint 'soap') which gets and and routes it to the HTTP SOAP
>>>>> provider
>>>>> (endpoint 'soap2') which pushes it further to a service endpoint
>>>>> listening
>>>>> on localhost:9000.
>>>>>
>>>>> 2. CXF BC consumer listening on localhost:9000 receives it and
>>>>> routes it
>>>>> to
>>>>> CXF BC provider which pushes it further to a service endpoint
>>>>> listening on
>>>>> localhost:9001.
>>>>>
>>>>> 3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap
>>>>> request
>>>>> and drops it to a jms queue which will be checked by the test.
>>>>>
>>>>> I've gone ahead with implementing this route and it appears that  
>>>>> the
>>>>> initial
>>>>> message is received at 1 and eventually dropped to the queue,
>>>>> however I'm
>>>>> seeing that the initiator (the browser in this case) gets HTTP 500
>>>>> due to
>>>>> one of the exchanges expiring.
>>>>>
>>>>> I've posted some more details here :
>>>>>
>>>>> http://pastebin.com/m7180a31e
>>>>>
>>>>>
>>>>> I have few questions.
>>>>>
>>>>> Is this test route built correctly, given what needs to be tested ?
>>>>>
>>>>> Why the initiator does not get the confirmation like 202/200 back
>>>>> given
>>>>> that
>>>>> an initial soap consumer is listening in the in-only mode ?
>>>>>
>>>>> I think the problem has to do with the fact that a cxfbc:provider
>>>>> expects
>>>>> some response back but the final http soap consumer just drops  
>>>>> the in
>>>>> message to the queue so cxfbc:provider fails.
>>>>>
>>>>> Any hints will be appreciated
>>>>>
>>>>> thanks, Sergey
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> View this message in context:
>>>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26111901.html
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>> -- 
>>> Freeman Fang
>>> ------------------------
>>> Open Source SOA: http://fusesource.com
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26113149.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26114652.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: servicemix-http and cxf-bc interoperability

Posted by Freeman Fang <fr...@gmail.com>.
Hi Sergey,

I think you also need remove fault part of the operation/binding from  
wsdl as oneway shouldn't include output and fault.
And how about add defaultMep="http://www.w3.org/2004/08/wsdl/in-only"  
to all http endpoint in the flow?

Regards
Freeman
On 2009-10-29, at 下午9:33, Sergey Beryozkin wrote:

>
> Hi Freeman
>
> After commenting out the "<output>" bits in portType/operation and
> binding/operation in the wsdl shipped with cxf-bc-su I can see
> cxfbc;consumer delegating to cxfbc:provider :
>
> 13:13:54,671 | DEBUG |  /PersonService/ |  
> NMR                              |
> .servicemix.nmr.core.ChannelImpl  198 | Channel
> org.apache.servicemix.nmr.core.ChannelImpl@9c62da delivering  
> exchange: [
>  id:        23b54014-555a-422f-8c7e-bc90695ce464
>  mep:       InOnly
>  status:    Active
>  role:      Consumer
>  target:
> PropertyMatchingReference[{SERVICE_NAME={http://servicemix.apache.org/samples/wsdl-first 
> }PersonService,
> ENDPOINT_NAME=pojo3}]
>  operation: {http://servicemix.apache.org/samples/wsdl-first}GetPerson
>  properties: [
>      javax.jbi.ServiceEndpoint =
> org.apache.servicemix.jbi.runtime.impl.ServiceEndpointImpl@127510b
>      javax.jbi.messaging.MessageExchange =
> org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
>      javax.jbi.messaging.sendSync = <null>
>      javax.jbi.ServiceName =
> {http://servicemix.apache.org/samples/wsdl-first}PersonService
>      org.apache.servicemix.correlationId =
> 23b54014-555a-422f-8c7e-bc90695ce464
>      javax.jbi.transaction.jta = <null>
>      javax.jbi.InterfaceName =
> {http://servicemix.apache.org/samples/wsdl-first}Person
>      org.apache.servicemix.senderEndpoint =
> {http://servicemix.apache.org/samples/wsdl-first}PersonService:pojo
>  ]
>  In: [
>    content: <?xml version="1.0" encoding="UTF-8"?><jbi:message
> xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"
> xmlns:msg="http://servicemix.apache.org/samples/wsdl-first"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> name="GetPersonRequest" type="msg:GetPersonRequest"
> version="1.0"><jbi:part><tns:GetPerson
> xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types">
>      <tns:personId>world</tns:personId>
>    </tns:GetPerson></jbi:part></jbi:message>
>    properties: [
>      javax.jbi.messaging.protocol.headers = {}
>    ]
>  ]
> ]
>
> and then a provider invoking :
>
> 13:13:54,749 | DEBUG | -cxf-bc-thread-2 |  
> HTTPConduit                      |
> e.cxf.transport.http.HTTPConduit  933 | Sending POST Message with  
> Headers to
> http://localhost:9001/PersonService/ Conduit
> :{http://servicemix.apache.org/samples/wsdl-first}pojo3.http-conduit
> Content-Type: text/xml; charset=UTF-8
>
> However, immediately after that I can see :
>
> java.io.IOException: An existing connection was forcibly closed by the
> remote host
>
> and this is together with
>
> 13:13:54,780 | DEBUG |  /PersonService/ |  
> jetty                            |
> .service.internal.util.JCLLogger   85 | servlet holder=jbiServlet
> 13:13:54,780 | DEBUG |  /PersonService/ |  
> HttpComponent                    |
> p.endpoints.HttpConsumerEndpoint  276 | Receiving HTTP request: POST
> /PersonService/ HTTP/1.1
> Content-Type: text/xml; charset=UTF-8
>
> which confirms the final http consumer gets this message
>
> and then
>
> 13:14:20,671 | DEBUG | NetworkBridge    |  
> DemandForwardingBridge           |
> .DemandForwardingBridgeSupport$5  373 | Caught exception sending  
> shutdown
> org.apache.activemq.transport.InactivityIOException: Channel was  
> inactive
> for too long: Heather820/10.5.2.22:61616
> 	at
> org 
> .apache 
> .activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java: 
> 229)
> 	at
> org 
> .apache 
> .activemq.transport.TransportFilter.oneway(TransportFilter.java:83)
> 	at
> org 
> .apache 
> .activemq 
> .transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104)
> 	at
> org 
> .apache.activemq.transport.MutexTransport.oneway(MutexTransport.java: 
> 40)
> 	at
> org 
> .apache 
> .activemq 
> .transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
> 	at
> org.apache.activemq.network.DemandForwardingBridgeSupport 
> $5.run(DemandForwardingBridgeSupport.java:371)
> 	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)
> 13:14:21,703 | ERROR | -cxf-bc-thread-2 |  
> CxfBcComponent                   |
> icemix.common.AsyncBaseLifeCycle  480 | Error processing exchange
> org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
> org.apache.servicemix.nmr.core.ChannelClosedException
> 	at
> org.apache.servicemix.nmr.core.ChannelImpl.dispatch(ChannelImpl.java: 
> 268)
>
>
> I'm confused :-)
> I reckon I can deal with improving the test once I can the basic  
> route being
> up and running :-)
>
> cheers, Sergey
>
>
> Freeman Fang wrote:
>>
>> Hi Sergey,
>>
>> Cxf bc provider/consumer determine the MEP from the wsdl model, so if
>> it's oneway in wsdl, then it's InOnly exchange.
>> So I guess the problem may come from that the method defined in your
>> wsdl isn't oneway, so that cxf bc provider expect some response from
>> the queue.
>> If you want to use InOnly MEP for cxf bc provider, ensure the method
>> in wsdl is oneway.
>>
>> Btw, your test flow include http provider ==> cxf bc consumer over
>> http and cxf bc provider ==> http consumer over http, that's ok, if  
>> it
>> also can include something like
>> cxf bc consumer==>http provider through NMR and http consumer===>cxf
>> bc provider through NMR, that would be great.
>>
>>
>> Best Regards
>> Freeman
>>
>> On 2009-10-29, at 下午8:15, Sergey Beryozkin wrote:
>>
>>>
>>> Hi JB,
>>>
>>> I'm not quite sure what you mean when you say 'with the map', but
>>> I'll try
>>> to give more info...
>>>
>>> The test service assembly has 3 units, http-in-su, cxf-bc-su, jms- 
>>> su.
>>>
>>> 1. http-in-su :
>>>
>>> <beans xmlns:http="http://servicemix.apache.org/http/1.0"
>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>> <!-- gets the initial request and redirects to 'soap2' -->
>>> <http:soap-consumer service="person:PersonService"
>>>                     endpoint="soap"
>>>                     targetEndpoint="soap2"
>>>                     targetService="person:PersonService"
>>>                     locationURI="http://0.0.0.0:8192/PersonService/"
>>>                     defaultMep="http://www.w3.org/2004/08/wsdl/in-only
>>> "
>>>                     wsdl="classpath:person.wsdl"/>
>>>
>>> <!-- sends it to the external service exposed by cxfbc:consumer -->
>>> <http:soap-provider service="person:PersonService"
>>>                  endpoint="soap2"
>>>                  interfaceName="person:Person"
>>>                  locationURI="http://localhost:9000/PersonService/"
>>>                  wsdl="classpath:person.wsdl"/>
>>>
>>> <!-- gets the message from the cxf:bc provider and drops it to the
>>> queue
>>> -->
>>>
>>> <http:soap-consumer service="person:PersonService"
>>>                     endpoint="soap3"
>>>                     targetService="person:jms"
>>>                     locationURI="http://localhost:9001/
>>> PersonService/"
>>>                     defaultMep="http://www.w3.org/2004/08/wsdl/in-only
>>> "
>>>                     wsdl="classpath:person.wsdl"/>
>>>
>>> </beans>
>>>
>>> person.wsdl has 3 ports for PersonService, named soap, soap2 and
>>> soap3.
>>>
>>> Next is the cxfbc-su :
>>>
>>>
>>> <beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>>
>>> <!-- gets the message sent from a http:soap-provider 'soap2'
>>> endpoint and
>>> redirects to cxf:bc provider -->
>>>
>>> <cxfbc:consumer wsdl="classpath:person.wsdl"
>>>                     targetService="person:PersonService"
>>>                     targetInterface="person:Person"
>>>                     endpoint="pojo"
>>>                     targetEndpoint="pojo2"/>
>>>
>>> <!-- sends it back to the http:soap-consumer 'soap3' -->
>>> <cxfbc:provider wsdl="classpath:person.wsdl"
>>>                     locationURI="http://localhost:9001/
>>> PersonService/"
>>>                     service="person:PersonService"
>>>                     endpoint="pojo2"
>>>                     interfaceName="person:Person"/>
>>> </beans>
>>>
>>> The person.wsdl shipped with the cxf-bc su has two ports named
>>> 'pojo' and
>>> 'pojo2'.
>>>
>>> There's also a jms su which the 'soap3' endpoint delegates to :
>>>
>>> beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
>>>      xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>> <jms:endpoint service="person:jms"
>>>               endpoint="jmsendpoint"
>>>               role="provider"
>>>               destinationStyle="queue"
>>>               jmsProviderDestinationName="bridge.output"
>>>               connectionFactory="#connectionFactory" />
>>> <bean id="connectionFactory"
>>> class="org.apache.activemq.ActiveMQConnectionFactory">
>>>   <property name="brokerURL" value="tcp://localhost:61616" />
>>> </bean>
>>> </beans>
>>>
>>> Let me know please if I can provide more info...
>>> There're some log entries here : http://pastebin.com/m7180a31e
>>>
>>> I'm going to look into it further. The interesting thing is that  
>>> if I
>>> introduce  cxf:se endpoint into the route and have a cxf:bc consumer
>>> delegating to it (as opposed to cxfbc:provider) then the cxf:se
>>> endpoint
>>> gets called and the initiator (browser) gets the 200 OK back...
>>>
>>> So I'm wondering may be I need to add a cxf:se and a wiretap, for  
>>> the
>>> cxfbc:consumer to delegate to this wiretap instead, and with the
>>> wiretap
>>> targeting the cxfse, but also copying the request (through
>>> inListener) to
>>> the cxfbc:provider....
>>>
>>> thanks, Sergey
>>>
>>>
>>> Jean-Baptiste Onofré wrote:
>>>>
>>>> Hi Sergey,
>>>>
>>>> Could you provide the xbeans used (especially with the map) ?
>>>>
>>>> Thx,
>>>> Regards
>>>> JB
>>>> ------Original Message------
>>>> From: Sergey Beryozkin
>>>> To: users@servicemix.apache.org
>>>> ReplyTo: users@servicemix.apache.org
>>>> Subject: servicemix-http and cxf-bc interoperability
>>>> Sent: Oct 29, 2009 11:59
>>>>
>>>>
>>>> Hi,
>>>>
>>>> I'm working on a test which has to verify that servicemix-http and
>>>> cxf-bc
>>>> components can interoperate (using soap payloads just for now).
>>>>
>>>> So I'm trying to build a route which can be initiated by the test.
>>>> The route can be described as follows :
>>>>
>>>> 1. The test sends a SOAP request to the HTTP SOAP consumer (port
>>>> 8192,
>>>> endpoint 'soap') which gets and and routes it to the HTTP SOAP
>>>> provider
>>>> (endpoint 'soap2') which pushes it further to a service endpoint
>>>> listening
>>>> on localhost:9000.
>>>>
>>>> 2. CXF BC consumer listening on localhost:9000 receives it and
>>>> routes it
>>>> to
>>>> CXF BC provider which pushes it further to a service endpoint
>>>> listening on
>>>> localhost:9001.
>>>>
>>>> 3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap
>>>> request
>>>> and drops it to a jms queue which will be checked by the test.
>>>>
>>>> I've gone ahead with implementing this route and it appears that  
>>>> the
>>>> initial
>>>> message is received at 1 and eventually dropped to the queue,
>>>> however I'm
>>>> seeing that the initiator (the browser in this case) gets HTTP 500
>>>> due to
>>>> one of the exchanges expiring.
>>>>
>>>> I've posted some more details here :
>>>>
>>>> http://pastebin.com/m7180a31e
>>>>
>>>>
>>>> I have few questions.
>>>>
>>>> Is this test route built correctly, given what needs to be tested ?
>>>>
>>>> Why the initiator does not get the confirmation like 202/200 back
>>>> given
>>>> that
>>>> an initial soap consumer is listening in the in-only mode ?
>>>>
>>>> I think the problem has to do with the fact that a cxfbc:provider
>>>> expects
>>>> some response back but the final http soap consumer just drops  
>>>> the in
>>>> message to the queue so cxfbc:provider fails.
>>>>
>>>> Any hints will be appreciated
>>>>
>>>> thanks, Sergey
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>>
>>>>
>>>>
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26111901.html
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>>
>>
>> -- 
>> Freeman Fang
>> ------------------------
>> Open Source SOA: http://fusesource.com
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26113149.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>


-- 
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com


Re: servicemix-http and cxf-bc interoperability

Posted by Sergey Beryozkin <se...@iona.com>.
Hi Freeman

After commenting out the "<output>" bits in portType/operation and
binding/operation in the wsdl shipped with cxf-bc-su I can see
cxfbc;consumer delegating to cxfbc:provider :

13:13:54,671 | DEBUG |  /PersonService/ | NMR                              |
.servicemix.nmr.core.ChannelImpl  198 | Channel
org.apache.servicemix.nmr.core.ChannelImpl@9c62da delivering exchange: [
  id:        23b54014-555a-422f-8c7e-bc90695ce464
  mep:       InOnly
  status:    Active
  role:      Consumer
  target:   
PropertyMatchingReference[{SERVICE_NAME={http://servicemix.apache.org/samples/wsdl-first}PersonService,
ENDPOINT_NAME=pojo3}]
  operation: {http://servicemix.apache.org/samples/wsdl-first}GetPerson
  properties: [
      javax.jbi.ServiceEndpoint =
org.apache.servicemix.jbi.runtime.impl.ServiceEndpointImpl@127510b
      javax.jbi.messaging.MessageExchange =
org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
      javax.jbi.messaging.sendSync = <null>
      javax.jbi.ServiceName =
{http://servicemix.apache.org/samples/wsdl-first}PersonService
      org.apache.servicemix.correlationId =
23b54014-555a-422f-8c7e-bc90695ce464
      javax.jbi.transaction.jta = <null>
      javax.jbi.InterfaceName =
{http://servicemix.apache.org/samples/wsdl-first}Person
      org.apache.servicemix.senderEndpoint =
{http://servicemix.apache.org/samples/wsdl-first}PersonService:pojo
  ]
  In: [
    content: <?xml version="1.0" encoding="UTF-8"?><jbi:message
xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"
xmlns:msg="http://servicemix.apache.org/samples/wsdl-first"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="GetPersonRequest" type="msg:GetPersonRequest"
version="1.0"><jbi:part><tns:GetPerson
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first/types">
      <tns:personId>world</tns:personId>
    </tns:GetPerson></jbi:part></jbi:message>
    properties: [
      javax.jbi.messaging.protocol.headers = {}
    ]
  ]
]

and then a provider invoking :

13:13:54,749 | DEBUG | -cxf-bc-thread-2 | HTTPConduit                      |
e.cxf.transport.http.HTTPConduit  933 | Sending POST Message with Headers to
http://localhost:9001/PersonService/ Conduit
:{http://servicemix.apache.org/samples/wsdl-first}pojo3.http-conduit
Content-Type: text/xml; charset=UTF-8

However, immediately after that I can see :

java.io.IOException: An existing connection was forcibly closed by the
remote host

and this is together with

13:13:54,780 | DEBUG |  /PersonService/ | jetty                            |
.service.internal.util.JCLLogger   85 | servlet holder=jbiServlet
13:13:54,780 | DEBUG |  /PersonService/ | HttpComponent                    |
p.endpoints.HttpConsumerEndpoint  276 | Receiving HTTP request: POST
/PersonService/ HTTP/1.1
Content-Type: text/xml; charset=UTF-8

which confirms the final http consumer gets this message

and then

13:14:20,671 | DEBUG | NetworkBridge    | DemandForwardingBridge           |
.DemandForwardingBridgeSupport$5  373 | Caught exception sending shutdown
org.apache.activemq.transport.InactivityIOException: Channel was inactive
for too long: Heather820/10.5.2.22:61616
	at
org.apache.activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java:229)
	at
org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:83)
	at
org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104)
	at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
	at
org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
	at
org.apache.activemq.network.DemandForwardingBridgeSupport$5.run(DemandForwardingBridgeSupport.java:371)
	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)
13:14:21,703 | ERROR | -cxf-bc-thread-2 | CxfBcComponent                   |
icemix.common.AsyncBaseLifeCycle  480 | Error processing exchange
org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@39d3d3
org.apache.servicemix.nmr.core.ChannelClosedException
	at
org.apache.servicemix.nmr.core.ChannelImpl.dispatch(ChannelImpl.java:268)


I'm confused :-)
I reckon I can deal with improving the test once I can the basic route being
up and running :-)

cheers, Sergey


Freeman Fang wrote:
> 
> Hi Sergey,
> 
> Cxf bc provider/consumer determine the MEP from the wsdl model, so if  
> it's oneway in wsdl, then it's InOnly exchange.
> So I guess the problem may come from that the method defined in your  
> wsdl isn't oneway, so that cxf bc provider expect some response from  
> the queue.
> If you want to use InOnly MEP for cxf bc provider, ensure the method  
> in wsdl is oneway.
> 
> Btw, your test flow include http provider ==> cxf bc consumer over  
> http and cxf bc provider ==> http consumer over http, that's ok, if it  
> also can include something like
> cxf bc consumer==>http provider through NMR and http consumer===>cxf  
> bc provider through NMR, that would be great.
> 
> 
> Best Regards
> Freeman
> 
> On 2009-10-29, at 下午8:15, Sergey Beryozkin wrote:
> 
>>
>> Hi JB,
>>
>> I'm not quite sure what you mean when you say 'with the map', but  
>> I'll try
>> to give more info...
>>
>> The test service assembly has 3 units, http-in-su, cxf-bc-su, jms-su.
>>
>> 1. http-in-su :
>>
>> <beans xmlns:http="http://servicemix.apache.org/http/1.0"
>>       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>  <!-- gets the initial request and redirects to 'soap2' -->
>>  <http:soap-consumer service="person:PersonService"
>>                      endpoint="soap"
>>                      targetEndpoint="soap2"
>>                      targetService="person:PersonService"
>>                      locationURI="http://0.0.0.0:8192/PersonService/"
>>                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only 
>> "
>>                      wsdl="classpath:person.wsdl"/>
>>
>>  <!-- sends it to the external service exposed by cxfbc:consumer -->
>>  <http:soap-provider service="person:PersonService"
>>                   endpoint="soap2"
>>                   interfaceName="person:Person"
>>                   locationURI="http://localhost:9000/PersonService/"
>>                   wsdl="classpath:person.wsdl"/>
>>
>>  <!-- gets the message from the cxf:bc provider and drops it to the  
>> queue
>> -->
>>
>>  <http:soap-consumer service="person:PersonService"
>>                      endpoint="soap3"
>>                      targetService="person:jms"
>>                      locationURI="http://localhost:9001/ 
>> PersonService/"
>>                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only 
>> "
>>                      wsdl="classpath:person.wsdl"/>
>>
>> </beans>
>>
>> person.wsdl has 3 ports for PersonService, named soap, soap2 and  
>> soap3.
>>
>> Next is the cxfbc-su :
>>
>>
>> <beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>>       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>
>>  <!-- gets the message sent from a http:soap-provider 'soap2'  
>> endpoint and
>> redirects to cxf:bc provider -->
>>
>>  <cxfbc:consumer wsdl="classpath:person.wsdl"
>>                      targetService="person:PersonService"
>>                      targetInterface="person:Person"
>>                      endpoint="pojo"
>>                      targetEndpoint="pojo2"/>
>>
>>  <!-- sends it back to the http:soap-consumer 'soap3' -->
>>  <cxfbc:provider wsdl="classpath:person.wsdl"
>>                      locationURI="http://localhost:9001/ 
>> PersonService/"
>>                      service="person:PersonService"
>>                      endpoint="pojo2"
>>                      interfaceName="person:Person"/>
>> </beans>
>>
>> The person.wsdl shipped with the cxf-bc su has two ports named  
>> 'pojo' and
>> 'pojo2'.
>>
>> There's also a jms su which the 'soap3' endpoint delegates to :
>>
>> beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
>>       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>>  <jms:endpoint service="person:jms"
>>                endpoint="jmsendpoint"
>>                role="provider"
>>                destinationStyle="queue"
>>                jmsProviderDestinationName="bridge.output"
>>                connectionFactory="#connectionFactory" />
>>  <bean id="connectionFactory"
>> class="org.apache.activemq.ActiveMQConnectionFactory">
>>    <property name="brokerURL" value="tcp://localhost:61616" />
>>  </bean>
>> </beans>
>>
>> Let me know please if I can provide more info...
>> There're some log entries here : http://pastebin.com/m7180a31e
>>
>> I'm going to look into it further. The interesting thing is that if I
>> introduce  cxf:se endpoint into the route and have a cxf:bc consumer
>> delegating to it (as opposed to cxfbc:provider) then the cxf:se  
>> endpoint
>> gets called and the initiator (browser) gets the 200 OK back...
>>
>> So I'm wondering may be I need to add a cxf:se and a wiretap, for the
>> cxfbc:consumer to delegate to this wiretap instead, and with the  
>> wiretap
>> targeting the cxfse, but also copying the request (through  
>> inListener) to
>> the cxfbc:provider....
>>
>> thanks, Sergey
>>
>>
>> Jean-Baptiste Onofré wrote:
>>>
>>> Hi Sergey,
>>>
>>> Could you provide the xbeans used (especially with the map) ?
>>>
>>> Thx,
>>> Regards
>>> JB
>>> ------Original Message------
>>> From: Sergey Beryozkin
>>> To: users@servicemix.apache.org
>>> ReplyTo: users@servicemix.apache.org
>>> Subject: servicemix-http and cxf-bc interoperability
>>> Sent: Oct 29, 2009 11:59
>>>
>>>
>>> Hi,
>>>
>>> I'm working on a test which has to verify that servicemix-http and  
>>> cxf-bc
>>> components can interoperate (using soap payloads just for now).
>>>
>>> So I'm trying to build a route which can be initiated by the test.
>>> The route can be described as follows :
>>>
>>> 1. The test sends a SOAP request to the HTTP SOAP consumer (port  
>>> 8192,
>>> endpoint 'soap') which gets and and routes it to the HTTP SOAP  
>>> provider
>>> (endpoint 'soap2') which pushes it further to a service endpoint  
>>> listening
>>> on localhost:9000.
>>>
>>> 2. CXF BC consumer listening on localhost:9000 receives it and  
>>> routes it
>>> to
>>> CXF BC provider which pushes it further to a service endpoint  
>>> listening on
>>> localhost:9001.
>>>
>>> 3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap  
>>> request
>>> and drops it to a jms queue which will be checked by the test.
>>>
>>> I've gone ahead with implementing this route and it appears that the
>>> initial
>>> message is received at 1 and eventually dropped to the queue,  
>>> however I'm
>>> seeing that the initiator (the browser in this case) gets HTTP 500  
>>> due to
>>> one of the exchanges expiring.
>>>
>>> I've posted some more details here :
>>>
>>> http://pastebin.com/m7180a31e
>>>
>>>
>>> I have few questions.
>>>
>>> Is this test route built correctly, given what needs to be tested ?
>>>
>>> Why the initiator does not get the confirmation like 202/200 back  
>>> given
>>> that
>>> an initial soap consumer is listening in the in-only mode ?
>>>
>>> I think the problem has to do with the fact that a cxfbc:provider  
>>> expects
>>> some response back but the final http soap consumer just drops the in
>>> message to the queue so cxfbc:provider fails.
>>>
>>> Any hints will be appreciated
>>>
>>> thanks, Sergey
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26111901.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26113149.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: servicemix-http and cxf-bc interoperability

Posted by Freeman Fang <fr...@gmail.com>.
Hi Sergey,

Cxf bc provider/consumer determine the MEP from the wsdl model, so if  
it's oneway in wsdl, then it's InOnly exchange.
So I guess the problem may come from that the method defined in your  
wsdl isn't oneway, so that cxf bc provider expect some response from  
the queue.
If you want to use InOnly MEP for cxf bc provider, ensure the method  
in wsdl is oneway.

Btw, your test flow include http provider ==> cxf bc consumer over  
http and cxf bc provider ==> http consumer over http, that's ok, if it  
also can include something like
cxf bc consumer==>http provider through NMR and http consumer===>cxf  
bc provider through NMR, that would be great.


Best Regards
Freeman

On 2009-10-29, at 下午8:15, Sergey Beryozkin wrote:

>
> Hi JB,
>
> I'm not quite sure what you mean when you say 'with the map', but  
> I'll try
> to give more info...
>
> The test service assembly has 3 units, http-in-su, cxf-bc-su, jms-su.
>
> 1. http-in-su :
>
> <beans xmlns:http="http://servicemix.apache.org/http/1.0"
>       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>  <!-- gets the initial request and redirects to 'soap2' -->
>  <http:soap-consumer service="person:PersonService"
>                      endpoint="soap"
>                      targetEndpoint="soap2"
>                      targetService="person:PersonService"
>                      locationURI="http://0.0.0.0:8192/PersonService/"
>                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only 
> "
>                      wsdl="classpath:person.wsdl"/>
>
>  <!-- sends it to the external service exposed by cxfbc:consumer -->
>  <http:soap-provider service="person:PersonService"
>                   endpoint="soap2"
>                   interfaceName="person:Person"
>                   locationURI="http://localhost:9000/PersonService/"
>                   wsdl="classpath:person.wsdl"/>
>
>  <!-- gets the message from the cxf:bc provider and drops it to the  
> queue
> -->
>
>  <http:soap-consumer service="person:PersonService"
>                      endpoint="soap3"
>                      targetService="person:jms"
>                      locationURI="http://localhost:9001/ 
> PersonService/"
>                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only 
> "
>                      wsdl="classpath:person.wsdl"/>
>
> </beans>
>
> person.wsdl has 3 ports for PersonService, named soap, soap2 and  
> soap3.
>
> Next is the cxfbc-su :
>
>
> <beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>
>  <!-- gets the message sent from a http:soap-provider 'soap2'  
> endpoint and
> redirects to cxf:bc provider -->
>
>  <cxfbc:consumer wsdl="classpath:person.wsdl"
>                      targetService="person:PersonService"
>                      targetInterface="person:Person"
>                      endpoint="pojo"
>                      targetEndpoint="pojo2"/>
>
>  <!-- sends it back to the http:soap-consumer 'soap3' -->
>  <cxfbc:provider wsdl="classpath:person.wsdl"
>                      locationURI="http://localhost:9001/ 
> PersonService/"
>                      service="person:PersonService"
>                      endpoint="pojo2"
>                      interfaceName="person:Person"/>
> </beans>
>
> The person.wsdl shipped with the cxf-bc su has two ports named  
> 'pojo' and
> 'pojo2'.
>
> There's also a jms su which the 'soap3' endpoint delegates to :
>
> beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
>       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
>  <jms:endpoint service="person:jms"
>                endpoint="jmsendpoint"
>                role="provider"
>                destinationStyle="queue"
>                jmsProviderDestinationName="bridge.output"
>                connectionFactory="#connectionFactory" />
>  <bean id="connectionFactory"
> class="org.apache.activemq.ActiveMQConnectionFactory">
>    <property name="brokerURL" value="tcp://localhost:61616" />
>  </bean>
> </beans>
>
> Let me know please if I can provide more info...
> There're some log entries here : http://pastebin.com/m7180a31e
>
> I'm going to look into it further. The interesting thing is that if I
> introduce  cxf:se endpoint into the route and have a cxf:bc consumer
> delegating to it (as opposed to cxfbc:provider) then the cxf:se  
> endpoint
> gets called and the initiator (browser) gets the 200 OK back...
>
> So I'm wondering may be I need to add a cxf:se and a wiretap, for the
> cxfbc:consumer to delegate to this wiretap instead, and with the  
> wiretap
> targeting the cxfse, but also copying the request (through  
> inListener) to
> the cxfbc:provider....
>
> thanks, Sergey
>
>
> Jean-Baptiste Onofré wrote:
>>
>> Hi Sergey,
>>
>> Could you provide the xbeans used (especially with the map) ?
>>
>> Thx,
>> Regards
>> JB
>> ------Original Message------
>> From: Sergey Beryozkin
>> To: users@servicemix.apache.org
>> ReplyTo: users@servicemix.apache.org
>> Subject: servicemix-http and cxf-bc interoperability
>> Sent: Oct 29, 2009 11:59
>>
>>
>> Hi,
>>
>> I'm working on a test which has to verify that servicemix-http and  
>> cxf-bc
>> components can interoperate (using soap payloads just for now).
>>
>> So I'm trying to build a route which can be initiated by the test.
>> The route can be described as follows :
>>
>> 1. The test sends a SOAP request to the HTTP SOAP consumer (port  
>> 8192,
>> endpoint 'soap') which gets and and routes it to the HTTP SOAP  
>> provider
>> (endpoint 'soap2') which pushes it further to a service endpoint  
>> listening
>> on localhost:9000.
>>
>> 2. CXF BC consumer listening on localhost:9000 receives it and  
>> routes it
>> to
>> CXF BC provider which pushes it further to a service endpoint  
>> listening on
>> localhost:9001.
>>
>> 3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap  
>> request
>> and drops it to a jms queue which will be checked by the test.
>>
>> I've gone ahead with implementing this route and it appears that the
>> initial
>> message is received at 1 and eventually dropped to the queue,  
>> however I'm
>> seeing that the initiator (the browser in this case) gets HTTP 500  
>> due to
>> one of the exchanges expiring.
>>
>> I've posted some more details here :
>>
>> http://pastebin.com/m7180a31e
>>
>>
>> I have few questions.
>>
>> Is this test route built correctly, given what needs to be tested ?
>>
>> Why the initiator does not get the confirmation like 202/200 back  
>> given
>> that
>> an initial soap consumer is listening in the in-only mode ?
>>
>> I think the problem has to do with the fact that a cxfbc:provider  
>> expects
>> some response back but the final http soap consumer just drops the in
>> message to the queue so cxfbc:provider fails.
>>
>> Any hints will be appreciated
>>
>> thanks, Sergey
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26111901.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>


-- 
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com


Re: servicemix-http and cxf-bc interoperability

Posted by Sergey Beryozkin <se...@iona.com>.
Hi JB,

I'm not quite sure what you mean when you say 'with the map', but I'll try
to give more info...

The test service assembly has 3 units, http-in-su, cxf-bc-su, jms-su.

1. http-in-su :

<beans xmlns:http="http://servicemix.apache.org/http/1.0"
       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
  <!-- gets the initial request and redirects to 'soap2' -->
  <http:soap-consumer service="person:PersonService"
                      endpoint="soap"
                      targetEndpoint="soap2"  
                      targetService="person:PersonService"
                      locationURI="http://0.0.0.0:8192/PersonService/"
                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only"
                      wsdl="classpath:person.wsdl"/>

  <!-- sends it to the external service exposed by cxfbc:consumer -->
  <http:soap-provider service="person:PersonService"
                   endpoint="soap2"
                   interfaceName="person:Person"
                   locationURI="http://localhost:9000/PersonService/"
                   wsdl="classpath:person.wsdl"/>

  <!-- gets the message from the cxf:bc provider and drops it to the queue
-->

  <http:soap-consumer service="person:PersonService"
                      endpoint="soap3"
                      targetService="person:jms"
                      locationURI="http://localhost:9001/PersonService/"
                      defaultMep="http://www.w3.org/2004/08/wsdl/in-only"
                      wsdl="classpath:person.wsdl"/>
 
</beans>

person.wsdl has 3 ports for PersonService, named soap, soap2 and soap3.

Next is the cxfbc-su :


<beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">

  <!-- gets the message sent from a http:soap-provider 'soap2' endpoint and
redirects to cxf:bc provider -->

  <cxfbc:consumer wsdl="classpath:person.wsdl"
                      targetService="person:PersonService"
                      targetInterface="person:Person"
                      endpoint="pojo"  
                      targetEndpoint="pojo2"/>

  <!-- sends it back to the http:soap-consumer 'soap3' -->
  <cxfbc:provider wsdl="classpath:person.wsdl"
                      locationURI="http://localhost:9001/PersonService/"
                      service="person:PersonService"
                      endpoint="pojo2"
                      interfaceName="person:Person"/>
</beans>

The person.wsdl shipped with the cxf-bc su has two ports named 'pojo' and
'pojo2'.

There's also a jms su which the 'soap3' endpoint delegates to :

beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
       xmlns:person="http://servicemix.apache.org/samples/wsdl-first">
  <jms:endpoint service="person:jms"
                endpoint="jmsendpoint"
                role="provider"
                destinationStyle="queue"
                jmsProviderDestinationName="bridge.output"
                connectionFactory="#connectionFactory" />
  <bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="tcp://localhost:61616" />
  </bean>
</beans>

Let me know please if I can provide more info...
There're some log entries here : http://pastebin.com/m7180a31e

I'm going to look into it further. The interesting thing is that if I
introduce  cxf:se endpoint into the route and have a cxf:bc consumer
delegating to it (as opposed to cxfbc:provider) then the cxf:se endpoint
gets called and the initiator (browser) gets the 200 OK back...

So I'm wondering may be I need to add a cxf:se and a wiretap, for the
cxfbc:consumer to delegate to this wiretap instead, and with the wiretap
targeting the cxfse, but also copying the request (through inListener) to
the cxfbc:provider....

thanks, Sergey


Jean-Baptiste Onofré wrote:
> 
> Hi Sergey,
> 
> Could you provide the xbeans used (especially with the map) ?
> 
> Thx,
> Regards
> JB
> ------Original Message------
> From: Sergey Beryozkin
> To: users@servicemix.apache.org
> ReplyTo: users@servicemix.apache.org
> Subject: servicemix-http and cxf-bc interoperability
> Sent: Oct 29, 2009 11:59
> 
> 
> Hi,
> 
> I'm working on a test which has to verify that servicemix-http and cxf-bc
> components can interoperate (using soap payloads just for now).
> 
> So I'm trying to build a route which can be initiated by the test.
> The route can be described as follows :
> 
> 1. The test sends a SOAP request to the HTTP SOAP consumer (port 8192,
> endpoint 'soap') which gets and and routes it to the HTTP SOAP provider
> (endpoint 'soap2') which pushes it further to a service endpoint listening
> on localhost:9000. 
> 
> 2. CXF BC consumer listening on localhost:9000 receives it and routes it
> to
> CXF BC provider which pushes it further to a service endpoint listening on
> localhost:9001.
> 
> 3. HTTP SOAP consumer (port 9001, endpoint 'soap3') gets the soap request
> and drops it to a jms queue which will be checked by the test.
> 
> I've gone ahead with implementing this route and it appears that the
> initial
> message is received at 1 and eventually dropped to the queue, however I'm
> seeing that the initiator (the browser in this case) gets HTTP 500 due to
> one of the exchanges expiring.
> 
> I've posted some more details here :
> 
> http://pastebin.com/m7180a31e
> 
> 
> I have few questions.
> 
> Is this test route built correctly, given what needs to be tested ? 
> 
> Why the initiator does not get the confirmation like 202/200 back given
> that
> an initial soap consumer is listening in the in-only mode ? 
> 
> I think the problem has to do with the fact that a cxfbc:provider expects
> some response back but the final http soap consumer just drops the in
> message to the queue so cxfbc:provider fails.
> 
> Any hints will be appreciated
> 
> thanks, Sergey
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> -- 
> View this message in context:
> http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26110897.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
> 
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/servicemix-http-and-cxf-bc-interoperability-tp26110897p26111901.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.