0

wso2 esb でメッセージ プロセッサとキューをテストしています。サンプリング プロセッサを使用して、データを DB に記録するだけで成功しています。この POX エンド ツー エンド。サンプリング プロセッサはメッセージを正しくデキューし、エンドポイントに送信します。エンドポイントは POX および非チャンクとして定義されており、これはすべてうまく機能します。

保証された配信メカニズムをテストしたかったので、ストア アンド フォワード プロセッサを試すことにしました。そこで、新しいプロセッサを作成し、それをストア アンド フォワードとして定義しました。メッセージを格納するメイン シーケンスでは、メッセージを格納する前に target.endpoint プロパティを追加しました。プロパティは、サンプリング シナリオで使用されていたのと同じエンドポイントに設定されました。

ただし、このモードでは、メッセージの変換が正しく行われないことがわかっています。コンテンツ タイプは text/html に設定され、出力はチャンクされます。これにより、サービスは 415 エラーを返します。

複数の場所、軸のhttp送信者トランスポートなどにmessageType、contentTypeなどを追加しようとしましたが、まったく違いはないようです。

これに関するガイダンスをいただければ幸いです

4

2 に答える 2

0

以下の JS コードは、単純に messageID を呼び出し元への戻りペイロードに挿入します。同じエンドポイントに単純に送信するサンプリング プロセッサとシーケンスでこれを使用すると、正常に動作します。

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://ws.apache.org/ns/synapse">
        <registry provider="org.wso2.carbon.mediation.registry.WSO2Registry">
            <parameter name="cachableDuration">15000</parameter>
        </registry>

        <endpoint name="test_e">
            <address uri="http://192.168.45.168:8080/cgi-bin/esbcgi.pl" format="pox"/>
            <property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
        </endpoint>

        <sequence name="fault" trace="enable">
            <log level="full">
                <property name="MESSAGE" value="Executing default 'fault' sequence"/>
                <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
                <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
            </log>
            <drop/>
        </sequence>

        <sequence name="main" onError="fault" trace="enable">
            <in>
                <log level="full"/>
                <property name="OUT_ONLY" value="true"/>
                <property name="FORCE_HTTP_1.0" value="true" scope="axis2"/>
                <script language="js">
                var message = mc.getMessageID(); 
                var messageId = message.substring(9,45); 
                var payload = mc.getPayloadXML().*; 
                mc.setPayloadXML(                                                                                                                                                               
                &lt;payload&gt;                                                                                                                                                          &lt;messageId&gt;{messageId}&lt;/messageId&gt;{payload}                                                                                                                  
                &lt;/payload&gt;);
                </script>

                <switch xmlns:ns="http://org.apache.synapse/xsd" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:ns3="http://org.apache.synapse/xsd" source="get-property('To')">

                    <case regex=".*/TEST/.*">
                        <property name="target.endpoint" value="test_e" scope="default"/>
                        <store messageStore="TEST"/>
                    </case>
                    <default/>
                </switch>

                <property name="OUT_ONLY" value="false"/>
                <script language="js">var serviceMessageId = mc.getMessageID();
                mc.setPayloadXML(                                                                                                                                                        
                   &lt;tag xmlns="http://tagcmd.com"&gt;        
                   &lt;messageId&gt;{serviceMessageId}&lt;/messageId&gt;                                                                                                                 &lt;/tag&gt;);
                </script>

                <send>
                    <endpoint key="MessageService"/>
                </send>
            </in>

            <out>
                <script language="js">
                var messagePayload= mc.getPayloadXML().*.*;         
                mc.setPayloadXML(                                                                                                                                                        
                &lt;eventResponse&gt;                                                                                                                                                    &lt;messageId&gt;{messagePayload}&lt;/messageId&gt;                                                                                                                      &lt;/eventResponse&gt;);
                </script>
                <send/>
            </out>

            <description>The main sequence for the message mediation</description>
        </sequence>


        <messageStore class="org.wso2.carbon.message.store.persistence.jms.JMSMessageStore" name="TEST">
            <parameter name="java.naming.factory.initial">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url">repository/conf/jndi.properties</parameter>
            <parameter name="store.jms.destination">APP8</parameter>
        </messageStore>


        <messageProcessor class="org.apache.synapse.message.processors.forward.ScheduledMessageForwardingProcessor" name="test_p2" messageStore="TEST">
            <parameter name="max.deliver.attempts">1</parameter>
        </messageProcessor>

    </definitions>
于 2012-10-03T11:22:55.300 に答える
0

エンドポイントに送信する前に、シーケンスで次のプロパティを定義します

<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
于 2012-10-03T09:02:36.750 に答える