嘿,StackOverflow用户,
我目前正在做一个SOA项目。作为应用服务器,我使用部署了JBoss ESB4.11的JBoss 5.1。
我尝试实现一个Web服务,它接收来自客户端的SOAP消息,并以SOAP消息的形式发送响应。
当此Web服务收到SOAP消息请求时,我将使用Smooks将此消息转换为Java对象,以便处理请求。
完成处理后,我希望再次使用Smooks将Java对象转换为XML ( SOAP回复)。
我一直纠结于从Java到XML的转换。
我在jboss-esb.xml文件中的Action链如下所示:
<services>
<service name="myWS" description="A Service" category="WS">
<listeners>
<jms-listener name="myListener" busidref="myChannel"/>
</listeners>
<actions mep="RequestResponse" inXsd="in.xsd" outXsd="out.xsd">
<!-- Transform incomming SOAP Message into JavaBean objects -->
<action name="xml2java-transform" class="org.jboss.soa.esb.smooks.SmooksAction">
<property name="smooksConfig" value="/smooks/smooks-config-soap2java.xml"/>
<property name="resultType" value="JAVA" />
</action>
<action name="processRequest" class="example.soa.ProcessRequest" process="process">
<property name="config" value="val"/>
</action>
<!-- Transform outgoing JavaBean objects into SOAP Message -->
<action name="java2xml-transform" class="org.jboss.soa.esb.smooks.SmooksAction">
<property name="smooksConfig" value="/smooks/smooks-config-java2soap.xml"/>
<property name="reportPath" value="/smooks/report.html"/>
<property name="resultType" value="STRING" />
</action>
</actions>
</service>
</services>我的第二个SmooksAction的smooksConfig如下所示:
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd"
xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd">
<core:filterSettings type="SAX" defaultSerialization="false"/>
<resource-config selector="example.JavaObjectMessage">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
<ftl:freemarker applyOnElement="example.JavaObjectMessage">
<!--<ftl:template>/freemarker/acknowledge.flt</ftl:template> -->
<ftl:template>
<!--
<sg:Message xmlns:sg="urn:http://example">
<sg:MessageType>${.vars[example.JavaObjectMessage].messageType}</sg:MessageType>
</sg:Message >
-->
</ftl:template>
</ftl:freemarker>
</smooks-resource-list>在esb完成对传入请求的处理之后,它会将example.JavaObjectMessage类附加到processRequest消息。所以第二个SmooksAction将可以访问这个对象。
我的问题是:如何在smooksConfig中访问'example.JavaObjectMessage‘的属性?flt:tamplate部分中的applyOnElement指的是什么?
我已经阅读了Smooks用户指南,并在JBoss社区中发布了这个问题。
感谢大家的帮助!
问候
发布于 2013-03-07 20:54:32
我终于解决了这个问题!我花了一段时间来理解如何使用SmooksAction将Java转换为XML的机制,我确信我仍然不能理解所有的东西。
无论如何,我所做的是:
SAX文件中的smooks-config.xml筛选器SAX筛选器将以XML对象的包名作为根元素创建一个SAX文档,并且它的所有属性都是由HashMap)所以我的smooks-config.xml文件现在看起来像这样:
<?xml version="1.0" encoding='UTF-8'?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd"
xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.2.xsd"
xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd">
<resource-config selector="global-parameters">
<param name="stream.filter.type">SAX</param>
</resource-config>
<jb:bean beanId="message" class="java.util.HashMap" createOnElement="example.JavaObjectMessage">
<jb:value property="messageType" decoder="String" data="example.JavaObjectMessage/messageType"/>
</jb:bean>
<ftl:freemarker applyOnElement="example.JavaObjectMessage">
<ftl:template>
<!--
<sg:Message xmlns:sg="urn:http://message">
<sg:MessageType>${message.messageType}</sg:MessageType>
</sg:Message>
-->
</ftl:template>
</ftl:freemarker>
</smooks-resource-list>如前所述:首先使用SAX过滤器,然后创建一个虚拟对象(本例中为HashMap),第三步:使用空闲标记进行模板
https://stackoverflow.com/questions/15249879
复制相似问题