Hi,
I am using servicemix 3.2.1.
I am trying to do this:
External client-----[SOAP]---->CXF-BC Consumer---->JMS Provider---->(
jms queue)------>JMS Consumer------> CXF-BC
Provider----[SOAP]---->External service
All MEPs are InOnly. If CXF-BC sends messages directly to CXF-BC
provider (no JMS) it works fine. When I add the JMS endpoints the
message is not delivered and I have the following console output
during message exchange:
-------------CONSOLE OUTPUT - BEGIN ---------------------------------
ERROR - CxfBcComponent - Error processing exchange InOnly[
id: ID:10.0.0.71-11763adf8e5-11:10
status: Active
role: provider
service: {http://www.tc.com/ pedido}pedido
endpoint: pedidoSOAP
in: <? xml version="1.0" encoding="UTF-8"?><jbi:message
xmlns:jbi="http://java.sun.com/ xml/ns/jbi/wsdl -11-wrapper"
xmlns:msg="http://www. tc.com/pedido" name=" enviarPedidoRequest"
type="msg:enviarPedidoRequest" version="
1.0"><jbi:part><ns2:enviarPedido xmlns:ns2="http://www.
tc.com/pedido"><in>AAAAAAAAAAHHHHH![0]</in></ns2:
enviarPedido></jbi:part></jbi:message>
]
java. lang.NullPointerException
at java.util.concurrent.
ConcurrentHashMap.hash(ConcurrentHashMap.java:157)
at java.util.concurrent.
ConcurrentHashMap.get(ConcurrentHashMap.java:730)
at org. apache.cxf.service.model.BindingInfo.
getOperation(BindingInfo.java:112)
at org.apache. servicemix.cxfbc.CxfBcProvider.process(
CxfBcProvider.java:123)
at org.apache.servicemix.common.
AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
at org. apache.servicemix.common.
AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
at org. apache.servicemix.common.
BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
at org. apache.servicemix.jbi.messaging.
DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
at org. apache.servicemix.jbi .nmr.flow.AbstractFlow.
doRouting(AbstractFlow.java:170)
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)
ERROR - JmsComponent - Error processing exchange InOnly[
id: ID:10.0.0.71-11763adf8e5-11:10
status: Error
role: consumer
service: {http://www.tc.com/pedido} pedido
endpoint: pedidoSOAP
in: <?xml version="1.0" encoding=" UTF-8"?><jbi:message
xmlns:jbi="http://java.sun.com/ xml/ns/jbi/wsdl -11-wrapper"
xmlns:msg="http://www. tc.com/pedido" name=" enviarPedidoRequest"
type="msg:enviarPedidoRequest" version="
1.0"><jbi:part><ns2:enviarPedido xmlns:ns2="http://www.
tc.com/pedido"><in>AAAAAAAAAAHHHHH![0]</in></ns2:
enviarPedido></jbi:part></jbi:message>
error: java. lang.NullPointerException
]
java.lang. UnsupportedOperationException: A destination must be specified.
at org.apache.
activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:448)
at org. apache.activemq.ActiveMQMessageProducer
.send(ActiveMQMessageProducer.java:356)
at org.apache.
servicemix.jms.multiplexing.MultiplexingConsumerProcessor.process(
MultiplexingConsumerProcessor.java:120)
at org.apache.servicemix.common. AsyncBaseLifeCycle.doProcess(
AsyncBaseLifeCycle.java:538)
at org.apache.servicemix.common.
AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:512)
at org. apache.servicemix.common.
BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
at org. apache.servicemix.jbi.messaging.
DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
at org. apache.servicemix.jbi .nmr.flow.AbstractFlow.
doRouting(AbstractFlow.java:170)
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)
ERROR - JmsComponent - Error setting exchange status to ERROR
javax.jbi .messaging.MessagingException: illegal call to send / sendSync
at org. apache.servicemix.jbi
.messaging.MessageExchangeImpl.handleSend(
MessageExchangeImpl.java:614)
at org.apache.servicemix.
jbi.messaging.DeliveryChannelImpl.doSend(
DeliveryChannelImpl.java:385)
at org.apache.servicemix.
jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:431)
at org. apache.servicemix.common.
BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:58)
at org. apache.servicemix.jbi.messaging.
DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
at org. apache.servicemix.jbi .nmr.flow.AbstractFlow.
doRouting(AbstractFlow.java:170)
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)
-------------CONSOLE OUTPUT - END ---------------------------------
Endpoints configuration:
------------CXF-BC---BEGIN-------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
xmlns:pedido="http://www.tc.com/pedido">
<cxfbc:consumer
wsdl="classpath:pedido.wsdl"
endpoint="pedidoHTTPConsumer"
interfaceName="pedido:pedidoHTTPConsumerInterface"
targetService="pedido:PedidoFilaProvider"
/>
<cxfbc:provider
wsdl="classpath:pedido.wsdl"
endpoint="pedidoSOAP"
service="pedido:pedido"
interfaceName="pedido:pedidoInterface"
locationURI="http://localhost:9000/pedidoService"
/>
</beans>
------------CXF-BC---END-------------------------------------------------
------------JMS---BEGIN-------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:jms="http://servicemix.apache.org/jms/1.0"
xmlns:pedido="http://www.tc.com/pedido">
<jms:endpoint
service="pedido:PedidoFilaProvider"
endpoint="PedidoFilaProvider"
role="provider"
destinationStyle="queue"
jmsProviderDestinationName="queue/pedidoFila"
connectionFactory="#connectionFactory"
interfaceName="pedido:PedidoFila"
/>
<jms:endpoint
service="pedido:PedidoFilaConsumer"
endpoint="PedidoFilaConsumer"
targetService="pedido:pedido"
role="consumer"
destinationStyle="queue"
jmsProviderDestinationName="queue/pedidoFila"
connectionFactory="#connectionFactory"
defaultMep="http://www.w3.org/2004/08/wsdl/in-only"
/>
<bean
id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property
name="brokerURL"
value="tcp://localhost:61616"
/>
</bean>
</beans>
------------JMS---END-------------------------------------------------
------------WSDL-BEGIN--------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.tc.com/pedido"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="pedido"
targetNamespace="http://www.tc.com/pedido">
<wsdl:types>
<xsd:schema targetNamespace="http://www.tc.com/pedido">
<xsd:element name="enviarPedido">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in"
type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="enviarPedidoRequest">
<wsdl:part element="tns:enviarPedido" name="parameters" />
</wsdl:message>
<wsdl:portType name="pedido">
<wsdl:operation name="enviarPedido">
<wsdl:input message="tns:enviarPedidoRequest" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="pedidoSOAP" type="tns:pedido">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="enviarPedido">
<soap:operation
soapAction="http://www.tc.com/pedido/enviarPedido" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="pedido">
<wsdl:port binding="tns:pedidoSOAP" name="pedidoSOAP">
<soap:address
location="http://0.0.0.0:9001/pedidoService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
------------WSDL-END--------------------------------------------
Any ideas?
Thank you,
Wilson