1

StackOverflow ユーザーの皆様

現在、SOA プロジェクトに取り組んでいます。アプリケーション サーバーとして、JBoss ESB 4.11 をデプロイした JBoss 5.1 を使用しています。

クライアントから SOAP メッセージを受信し、SOAP メッセージとして応答を送信する Web サービスを実装しようとしています。
SOAP メッセージ リクエストがこの Web サービスによって受信されると、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の 2 番目の 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アクションが着信要求の処理を完了すると、クラスexample.JavaObjectMessageが esb メッセージに添付されます。したがって、2 番目の SmooksAction はこのオブジェクトにアクセスできます。

私の質問は、「example.JavaObjectMessage」の属性にどのようにアクセスできますsmooksConfigか? そしてapplyOnElement、セクションで何を参照していflt:tamplateますか?

私はすでに Smooks User Guide を読み、JBoss Community にもこの質問を投稿しました。

どんな助けにも感謝します!

よろしく

4

1 に答える 1

1

私はついに問題を解決しました!Javaで変身するメカニズムを理解するのに苦労しましたが、XMLまだSmooksActionすべてを理解しているわけではないと確信しています。

とにかく私がしたことは次のとおりです。1。ファイル内のフィルターを
詳しく調べました 。2。フィルターが、Javaオブジェクトのパッケージ名をルート要素として、そのすべての属性を子要素として持つドキュメントを作成することがわかりました。 3.フィルターによって作成されたXMLドキュメントを使用して、仮想オブジェクト(この場合はa )を作成できます 。4。次に、FreeMarkerテンプレートの入力として使用できます。SAXsmooks-config.xml
SAXXML
SAXHashMap
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この場合)を作成し、3番目:フリーマーカーでテンプレートを作成します

于 2013-03-07T12:54:32.017 に答える