Hi ServiceMix Community,
I have service, which get request from HTTP+SOAP(CXF, this is worked),
process it and deliver result to second service via JMS ActiveMQ.
I used internal(ActiveMQ 4.1.1) and external(ActiveMQ 5.1.0) message
brokers and servicemix 3.2.1 & 3.2.2.
First service sent NormalizedMessage to second service via JMS binding
component.
Second service received NormalizedMessage via JMS binding component.
The problem is as follows: First service sent null message to JMS queue,
send service received null message and ServiceMix throws Exception:
Execution of JMS message listener failed;
javax.jms.JMSException: Error sending JBI exchange;
Caused by: java.lang.NullPointerException: text can not be null.
Is this error in my code or my bean.xml or this is servicemix bug and i
shall rewrite default marshaller?
Thank you for attention and help.
With best regards, Andrei.
PS>
---------------------------------------------------------------------------
xbean.xml (from first service)
---------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:mail-template-jms-bridge="http://com.oxseed/services/mail-template-jms-bridge-service">
<jms:provider
service="mail-template-jms-bridge:MailTemplateJMSBridgeService"
endpoint="endpoint1"
destinationName="queue/A"
connectionFactory="#connectionFactory"/>
<amq:connectionFactory id="connectionFactory"
brokerURL="tcp://localhost:61617" />
</beans>
---------------------------------------------------------------------------
Code
---------------------------------------------------------------------------
.....
QName DEFAULT_MAIL_SERVICE = new
QName("http://com.oxseed/services/mail-template-jms-bridge-service",
"MailTemplateJMSBridgeService");
ServiceMixClient serviceMixClient = new ServiceMixClientFacade(context);
EndpointResolver endpointResolver =
serviceMixClient.createResolverForService(destQname);
InOnly inOnlyExchange =
serviceMixClient.createInOnlyExchange(endpointResolver);
NormalizedMessage msg = inOnlyExchange.getInMessage();
...
msg.setProperty(MSG_TAG_TO, headers.get("To"));
...
serviceMixClient.sendSync(inOnlyExchange);
serviceMixClient.close();
.....
---------------------------------------------------------------------------
xbean.xml (from second service binding component)
---------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:mail-template-jms-bridge="http://com.oxseed/services/mail-template-jms-bridge-service">
<jms:consumer
service="mail-template-jms-bridge:MailTemplateJMSBridgeService"
endpoint="endpoint"
targetService="mail-template-jms-bridge:MailTemplateJMSBridgeService"
destinationName="queue/A"
connectionFactory="#connectionFactory" />
<amq:connectionFactory id="connectionFactory"
brokerURL="tcp://localhost:61617" />
</beans>
---------------------------------------------------------------------------
xbean.xml (from second service service engine )
---------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:bean="http://servicemix.apache.org/bean/1.0"
xmlns:mail-template-jms-bridge="http://com.oxseed/services/mail-template-jms-bridge-service">
<bean:endpoint
service="mail-template-jms-bridge:MailTemplateJMSBridgeService"
endpoint="endpoint" bean="#MessageRouterImpl" />
<bean id="MessageRouterImpl"
class="com.oxseed.services.mail_template_jms_bridge_service.MessageExchangeListenerImpl"
/>
</beans>
---------------------------------------------------------------------------
Code
---------------------------------------------------------------------------
package com.oxseed.services.mail_template_jms_bridge_service;
import javax.annotation.Resource;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import org.apache.servicemix.MessageExchangeListener;
import org.apache.servicemix.common.ExchangeProcessor;
public class MessageExchangeListenerImpl implements
MessageExchangeListener {
@Resource
private DeliveryChannel channel;
public MessageExchangeListenerImpl() {
super();
}
public void onMessageExchange(MessageExchange exchange) throws
MessagingException {
// InOnly inOnly = (InOnly) exchange;
//System.out.println("JMS message received ...");
//System.out.println("Message: "+messageExchange);
//System.out.println("-----------------------------------------------");
//messageExchange.setStatus(ExchangeStatus.DONE);
//channel.send(exchange);
}
}
---------------------------------------------------------------------------
ServiceMix Log
---------------------------------------------------------------------------
18:09:18,953 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
CxfSeComponent | emix.common.AsyncBaseLifeCycle 468 |
Received exchange: status: Active, role: provider
18:09:18,953 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
CxfSeComponent | emix.common.AsyncBaseLifeCycle 536 |
Retrieved correlation id: ID:10.12.34.82-11bdb82a40a-4:0
18:09:18,953 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
faultListableBeanFactory | ry.support.AbstractBeanFactory 203 |
Returning cached instance of singleton bean
'org.apache.cxf.transport.jbi.JBITransportFactory'
18:09:18,953 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
faultListableBeanFactory | ry.support.AbstractBeanFactory 203 |
Returning cached instance of singleton bean
'org.apache.cxf.transport.jbi.JBITransportFactory'
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
CxfSeComponent | emix.common.AsyncBaseLifeCycle 593 |
Correlation id retrieved from ThreadLocal: ID:10.12.34.82-11bdb82a40a-4:0
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
DeliveryChannelImpl | .messaging.DeliveryChannelImpl 458 |
SendSync ID:10.12.34.82-11bdb82a40a-5:0 in
DeliveryChannel{servicemix-cxf-se}
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
SecuredBroker | mix.jbi.security.SecuredBroker 66 | send
exchange with secure broker
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
SecuredBroker | mix.jbi.security.SecuredBroker 72 | service
name
:{http://com.oxseed/services/mail-template-jms-bridge-service}MailTemplateJMSBridgeService
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
SecuredBroker | mix.jbi.security.SecuredBroker 73 |
operation name :null
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
SedaFlow | emix.jbi.nmr.flow.AbstractFlow 118 | Called
Flow send
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
DeliveryChannelImpl | .messaging.DeliveryChannelImpl 693 | Waiting
for exchange ID:10.12.34.82-11bdb82a40a-5:0 (1760aec) to be answered in
DeliveryChannel{servicemix-cxf-se} from sendSync
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
SedaQueue | .jbi.nmr.flow.seda.SedaQueue$1 132 |
[EMAIL PROTECTED] dequeued
exchange: InOnly[
id: ID:10.12.34.82-11bdb82a40a-5:0
status: Active
role: provider
endpoint: endpoint1
in: null
]
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
JmsComponent | emix.common.AsyncBaseLifeCycle 468 |
Received exchange: status: Active, role: provider
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
JmsComponent | emix.common.AsyncBaseLifeCycle 536 |
Retrieved correlation id: ID:10.12.34.82-11bdb82a40a-4:0
18:09:19,156 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
WireFormatNegotiator | transport.WireFormatNegotiator 71 |
Sending: WireFormatInfo { version=2,
properties={TightEncodingEnabled=true, CacheSize=1024,
TcpNoDelayEnabled=true, SizePrefixDisabled=false,
StackTraceEnabled=true, MaxInactivityDuration=30000, CacheEnabled=true},
magic=[A,c,t,i,v,e,M,Q]}
18:09:19,171 | DEBUG | ActiveMQ Transport:
tcp://localhost/127.0.0.1:61617 | WireFormatNegotiator |
transport.WireFormatNegotiator 102 | Received WireFormat:
WireFormatInfo { version=3, properties={TightEncodingEnabled=true,
CacheSize=1024, TcpNoDelayEnabled=true, SizePrefixDisabled=false,
StackTraceEnabled=true, MaxInactivityDurationInitalDelay=10000,
MaxInactivityDuration=30000, CacheEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
18:09:19,171 | DEBUG | ActiveMQ Transport:
tcp://localhost/127.0.0.1:61617 | WireFormatNegotiator |
transport.WireFormatNegotiator 109 | tcp://localhost/127.0.0.1:61617
before negotiation: OpenWireFormat{version=2, cacheEnabled=false,
stackTraceEnabled=false, tightEncodingEnabled=false,
sizePrefixDisabled=false}
18:09:19,171 | DEBUG | ActiveMQ Transport:
tcp://localhost/127.0.0.1:61617 | WireFormatNegotiator |
transport.WireFormatNegotiator 120 | tcp://localhost/127.0.0.1:61617
after negotiation: OpenWireFormat{version=2, cacheEnabled=true,
stackTraceEnabled=true, tightEncodingEnabled=true, sizePrefixDisabled=false}
18:09:19,171 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
JmsTemplate | framework.jms.core.JmsTemplate 426 |
Executing callback on JMS Session [ActiveMQSession
{id=ID:defender-2452-1219158515937-3:52:1,started=false}]
18:09:19,171 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
JmsTemplate | framework.jms.core.JmsTemplate 509 | Sending
created message [ActiveMQTextMessage {commandId = 0, responseRequired =
false, messageId = null, originalDestination = null,
originalTransactionId = null, producerId = null, destination = null,
transactionId = null, expiration = 0, timestamp = 0, arrival = 0,
correlationId = null, replyTo = null, persistent = false, type = null,
priority = 0, groupID = null, groupSequence = 0, targetConsumerId =
null, compressed = false, userID = null, content = null,
marshalledProperties = null, dataStructure = null, redeliveryCounter =
0, size = 0, properties = null, readOnlyProperties = false, readOnlyBody
= false, droppable = false, text = null}]
18:09:19,171 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
ActiveMQSession | pache.activemq.ActiveMQSession 1545 | Sending
message: ActiveMQTextMessage {commandId = 0, responseRequired = false,
messageId = ID:defender-2452-1219158515937-3:52:1:1:1,
originalDestination = null, originalTransactionId = null, producerId =
ID:defender-2452-1219158515937-3:52:1:1, destination = queue://queue/A,
transactionId = null, expiration = 0, timestamp = 1219158559171, arrival
= 0, correlationId = null, replyTo = null, persistent = true, type =
null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId
= null, compressed = false, userID = null, content = null,
marshalledProperties = null, dataStructure = null, redeliveryCounter =
0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody
= true, droppable = false, text = null}
18:09:19,171 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
DeliveryChannelImpl | .messaging.DeliveryChannelImpl 425 | Send
ID:10.12.34.82-11bdb82a40a-5:0 in DeliveryChannel{servicemix-jms}
18:09:19,171 | DEBUG | DefaultMessageListenerContainer-1 |
ActiveMQMessageConsumer | tivemq.ActiveMQMessageConsumer 397 |
Received message: MessageDispatch {commandId = 0, responseRequired =
false, consumerId = ID:defender-2452-1219158515937-3:51:1:1, destination
= queue://queue/A, message = ActiveMQTextMessage {commandId = 5,
responseRequired = true, messageId =
ID:defender-2452-1219158515937-3:52:1:1:1, originalDestination = null,
originalTransactionId = null, producerId =
ID:defender-2452-1219158515937-3:52:1:1, destination = queue://queue/A,
transactionId = null, expiration = 0, timestamp = 1219158559171, arrival
= 0, correlationId = null, replyTo = null, persistent = true, type =
null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId
= null, compressed = false, userID = null, content = null,
marshalledProperties = null, dataStructure = null, redeliveryCounter =
0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody
= true, droppable = false, text = null}, redeliveryCounter = 0}
18:09:19,171 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
SecuredBroker | mix.jbi.security.SecuredBroker 66 | send
exchange with secure broker
18:09:19,171 | DEBUG | DefaultMessageListenerContainer-1 |
MessageListenerContainer | ollingMessageListenerContainer 303 |
Received message of type [class
org.apache.activemq.command.ActiveMQTextMessage] from consumer
[ActiveMQMessageConsumer {
value=ID:defender-2452-1219158515937-3:51:1:1, started=true }] of
session [ActiveMQSession
{id=ID:defender-2452-1219158515937-3:51:1,started=true}]
18:09:19,171 | DEBUG | pool-flow.seda.servicemix-jms-thread-1 |
SedaFlow | emix.jbi.nmr.flow.AbstractFlow 118 | Called
Flow send
18:09:19,171 | DEBUG | DefaultMessageListenerContainer-1 |
MessageListenerContainer | stractMessageListenerContainer 482 |
Invoking listener with message of type [class
org.apache.activemq.command.ActiveMQTextMessage] and session
[ActiveMQSession {id=ID:defender-2452-1219158515937-3:51:1,started=true}]
18:09:19,171 | DEBUG | pool-flow.seda.servicemix-jms-thread-2 |
SedaQueue | .jbi.nmr.flow.seda.SedaQueue$1 132 |
[EMAIL PROTECTED] dequeued
exchange: InOnly[
id: ID:10.12.34.82-11bdb82a40a-5:0
status: Done
role: consumer
endpoint: endpoint1
in: null
]
18:09:19,187 | DEBUG | pool-flow.seda.servicemix-jms-thread-2 |
DeliveryChannelImpl | .messaging.DeliveryChannelImpl 710 |
Notifying exchange ID:10.12.34.82-11bdb82a40a-5:0(1760aec) in
DeliveryChannel{servicemix-cxf-se} from processInboundSynchronousExchange
18:09:19,187 | DEBUG | pool-flow.seda.servicemix-cxf-se-thread-1 |
DeliveryChannelImpl | .messaging.DeliveryChannelImpl 704 |
Notified: ID:10.12.34.82-11bdb82a40a-5:0(1760aec) in
DeliveryChannel{servicemix-cxf-se} from sendSync
18:09:19,187 | WARN | DefaultMessageListenerContainer-1 |
MessageListenerContainer | stractMessageListenerContainer 613 |
Execution of JMS message listener failed
javax.jms.JMSException: Error sending JBI exchange
at
org.apache.servicemix.jms.endpoints.AbstractConsumerEndpoint.onMessage(AbstractConsumerEndpoint.java:492)
at
org.apache.servicemix.jms.endpoints.JmsConsumerEndpoint$1.onMessage(JmsConsumerEndpoint.java:372)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:485)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:442)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:414)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:309)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:254)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:811)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException: text can not be null
at
org.apache.servicemix.jbi.jaxp.StringSource.<init>(StringSource.java:42)
at
org.apache.servicemix.jms.endpoints.DefaultConsumerMarshaler.populateMessage(DefaultConsumerMarshaler.java:94)
at
org.apache.servicemix.jms.endpoints.DefaultConsumerMarshaler.createExchange(DefaultConsumerMarshaler.java:72)
at
org.apache.servicemix.jms.endpoints.AbstractConsumerEndpoint.onMessage(AbstractConsumerEndpoint.java:460)
... 9 more