-
1. Re: Type converter throws exception for null body
davsclaus Aug 25, 2011 7:25 AM (in response to jamie3_james.archibald)Can you post the stacktrace? And what version of Camel are you using?
-
2. Re: Type converter throws exception for null body
jamie3_james.archibald Aug 25, 2011 9:28 AM (in response to davsclaus)Here's the stack trace from my unit test. Camel 2.8.0
org.apache.camel.RuntimeCamelException: org.springframework.jms.MessageFormatException: No type converter available to convert from type: null to the required type: java.io.Serializable with value null; nested exception is javax.jms.MessageFormatException: No type converter available to convert from type: null to the required type: java.io.Serializable with value null
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1145)[camel-core-2.8.0.jar:2.8.0]
at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:143)[camel-jms-2.7.0.jar:2.7.0]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)[spring-jms-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_26]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_26]
at java.lang.Thread.run(Thread.java:662)[:1.6.0_26]
-
3. Re: Type converter throws exception for null body
davsclaus Aug 25, 2011 10:08 AM (in response to jamie3_james.archibald)He you have a mix of Camel versions. camel-core 2.8.0 and camel-jms 2.7.0
When you do request/reply over JMS with JMS objects, the Camel expect that there is a reply message that can be converted to Serializable. To be send back as the reply.
To indicate an "empty" response you may consider sending back a MyObject having some state that its a "empty" response.
What is your use case? What would you expect to happen when there is no reply body to send back?
-
4. Re: Type converter throws exception for null body
jamie3_james.archibald Aug 25, 2011 12:38 PM (in response to davsclaus)I checked by classpath and it looks like I am using camel-jms 2.7.0, not sure why maven did this. I just explicitly set camel-jms 2.8.0.
I don't think it would be best practise to introduce a flag into all my objects on whether it exists or not. Ideally I would just return null.
Here is an example of why I want to return null. If it can't be done I can probably just switch back to using jmsMessageType=Text for now:
class MyServiceImpl implements IMyService {
configure() {
from("activemq:queue:request")
.bean(this, "getMyObject")
}
MyObject getMyObject(@Body String name) {
// look in database for the object, if it doesnt exist return null
}
}
class MyClient implements IMyClient {
MyObject getMyObject(String name) {
return template.requestBodyAndHeader("activemq:queue:request", name, MyObject.class)
}
}
public static void main() {
// our client that interacts with the service via activemq
// the service is deployed somewhere on the network
MyClient client = new MyClient();
MyObject obj = client.getMyObject("Me");
if (obj == null) {
// do something
}
}
-
5. Re: Type converter throws exception for null body
njiang Aug 25, 2011 8:30 PM (in response to jamie3_james.archibald)I think the camel-jms 2.7.0 dependency is introduced by activemq-camel module. you need to specify the dependency of camel-jms 2.8.0 in your pom to override it.
-
6. Re: Type converter throws exception for null body
davsclaus Aug 26, 2011 2:28 AM (in response to jamie3_james.archibald)Hi
Keep an eye on this ticket
https://issues.apache.org/jira/browse/CAMEL-3354
To support null return values from beans.
-
7. Re: Type converter throws exception for null body
davsclaus Aug 26, 2011 2:57 AM (in response to davsclaus)Beans already support returning null values.
I created a ticket for the JMS req/reply with null values.
https://issues.apache.org/jira/browse/CAMEL-4384
It works fine on trunk.
-
8. Re: Type converter throws exception for null body
jamie3_james.archibald Aug 26, 2011 6:25 AM (in response to davsclaus)Excellent thanks!
For now I will just use jmsMessageType=Text and switch to Object when the bug has been resolved.
Much thanks