簡體   English   中英

使用FreeMarker的帶有Smooks的Java到XML(SOAP)

[英]Java to XML (SOAP) with Smooks using FreeMarker

嘿StackOverflow用戶,

我目前正在從事SOA項目。 作為應用服務器,我將JBoss 5.1與已部署的JBoss ESB 4.11結合使用。

我嘗試實現一個Web服務,該服務從客戶端接收SOAP消息,並以SOAP消息的形式發送響應。
當此Web服務收到SOAP消息請求時,我正在使用Smooks將此消息轉換為Java對象,以便我可以處理該請求。
完成處理后,我想再次使用Smooks將Java對象轉換為XML(SOAP答復)。

我停留在從Java到XML的轉換上。
jboss-esb.xml文件中的“我的操作鏈”如下所示:

<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>

smooksConfig第二SmooksAction的是這樣的:

<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>

processRequest Action處理完傳入的請求之后,它將把example.JavaObjectMessage類附加到esb消息。 因此,第二個SmooksAction將有權訪問此Object。

我的問題是:如何在smooksConfig訪問“ example.JavaObjectMessage”的smooksConfig flt:tamplate部分中, applyOnElement指的是什么?

我已經閱讀了《 Smooks用戶指南》,並且在JBoss社區中也發布了此問題。

感謝您的幫助!

問候

我終於解決了問題! 我很難理解如何使用SmooksActionJava轉換為XML的機制,並且確定我仍然不了解所有內容。

無論如何,我所做的是:
1.仔細查看smooks-config.xml文件中的SAX篩選器
2.發現, SAX篩選器將創建一個XML文檔,其中Java Object的包名稱為根元素,其所有屬性為子元素。
3.然后,可以使用SAX篩選器創建的XML文檔來創建虛擬對象(在本例中為HashMap )。
4.然后,可以將HashMap用作FreeMarker模板的輸入

所以我的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 ),第三步:使用自由標記進行模板制作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM