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.channeli...@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.serviceendpointi...@127510b
javax.jbi.messaging.MessageExchange =
org.apache.servicemix.jbi.runtime.impl.inonlyi...@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.inonlyi...@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: [email protected]
>>> ReplyTo: [email protected]
>>> 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.