json transformer for inbound jms topic?
davidlilley Aug 27, 2013 1:45 PMI've read the documentation and I've tried the Json example, but I'm still not getting it I guess. I've bound a jms topic (HornetQ topic on JBoss 7.2) to a service. The incoming messages are json text. I'd like to transform them to a Java object, so I added a transformer in the switchyard xml. Below is what I've tried so far. I'm sure this is wrong, but I don't understand how it is supposed to work. I was able to make it work with ObjectMapper, but I'd like to understand how JSon transformers are supposed to work when defined in the switchyard.xml.
Thanks, Dave
<?xml version="1.0" encoding="UTF-8"?>
<switchyard xmlns="urn:switchyard-config:switchyard:1.0" xmlns:bean="urn:switchyard-component-bean:config:1.0" xmlns:jca="urn:switchyard-component-jca:config:1.0" xmlns:jms="urn:switchyard-component-camel-jms:config:1.0" xmlns:jpa="urn:switchyard-component-camel-jpa:config:1.0" xmlns:resteasy="urn:switchyard-component-resteasy:config:1.0" xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912" xmlns:trfm="urn:switchyard-config:transform:1.0" name="ngp-switchyard" targetNamespace="urn:org.test:ngp-switchyard:1.0">
<sca:composite name="ngp-switchyard" targetNamespace="urn:org.test:ngp-switchyard:1.0">
<sca:service name="JmsService" promote="JmsServiceBean/JmsService">
<sca:interface.java interface="org.test.JmsService"/>
<jms:binding.jms>
<operationSelector operationName="processSession"/>
<jms:contextMapper/>
<jms:messageComposer/>
<jms:topic>testTopic</jms:topic>
<jms:connectionFactory>#ConnectionFactory</jms:connectionFactory>
</jms:binding.jms>
</sca:service>
<sca:component name="JmsServiceBean">
<bean:implementation.bean class="org.test.JmsServiceBean"/>
<sca:service name="JmsService">
<sca:interface.java interface="org.test.JmsService"/>
</sca:service>
<sca:reference name="PersistService">
<sca:interface.java interface="org.test.PersistService"/>
</sca:reference>
<sca:reference name="LoggingService">
<sca:interface.java interface="org.test.LoggingService"/>
</sca:reference>
</sca:component>
<sca:component name="PersistServiceBean">
<bean:implementation.bean class="org.test.PersistServiceBean"/>
<sca:service name="PersistService">
<sca:interface.java interface="org.test.PersistService"/>
</sca:service>
</sca:component>
<sca:component name="LoggingServiceBean">
<bean:implementation.bean class="org.test.LoggingServiceBean"/>
<sca:service name="LoggingService">
<sca:interface.java interface="org.test.LoggingService"/>
</sca:service>
</sca:component>
</sca:composite>
<transforms>
<trfm:transform.json from="{urn:org.test:ngp-switchyard:1.0}messageData" to="java:org.test.model.MessageData"/>
</transforms>
<domain>
<properties/>
</domain>
</switchyard>
public interface JmsService {
public void processSession(MessageData messageData);
}
@Service(JmsService.class)
public class JmsServiceBean implements JmsService {
@Inject @Reference("LoggingService")
private LoggingService _log;
@Inject @Reference("PersistService")
private PersistService _persist;
@Override
public void processSession(MessageData messageData) {
_log.log(messageData);
_persist.persist(messageData);
}
}