【问题标题】:WSO2- Error Using Clone Mediator to send message to an endpointWSO2-错误使用克隆中介向端点发送消息
【发布时间】:2014-01-30 01:03:43
【问题描述】:

我正在开发调用许多其他 DSS 服务的 WSO2 代理服务。我的要求是将其中一项 DSS 服务的响应发送到 jms 队列,同时继续代理服务中的现有流程,即继续调用和处理其他 DSS 服务。

我需要获取简单产品服务的响应(序列键 -if4_simpleProduct)并将其发送回队列,但之后继续放置在代理服务和序列中的逻辑。我尝试使用 CLONE Mediator 来做同样的事情。但是我的 prxy 服务流程在进入 CLONE Meditaor 流程后停止。下面是代理服务和序列的sn-p。

    <?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="SPE_Payload"
    transports="jms" startOnLoad="true" trace="enable">
    <description />
    <target>
        <inSequence>
            <transaction action="new" />
            <xslt key="StepToCommon" />
            <log level="full" />
            <enrich>
                <source type="body" clone="true" />
                <target type="property" property="MSG_PAYLOAD" />
            </enrich>

            <sequence key="if4_simpleProduct" />

            <filter xpath="boolean (//product/simpleProduct/altPrdCodes/pn_apc_id/text())">
                <enrich>
                    <source clone="true" xpath="//product/simpleProduct/altPrdCodes" />
                    <target type="property" property="ALT_PRDS" />
                </enrich>
                <sequence key="if4_alternateProducts" />
            </filter>
....
.....

<transaction action="commit" />
        </inSequence>

    </target>
    <parameter name="transport.jms.ContentType">application/xml</parameter>
    <parameter name="transport.jms.Destination">test</parameter>
</proxy>

下面是调用简单产品服务时的for序列代码

<sequence xmlns="http://ws.apache.org/ns/synapse" name="if4_simpleProduct"
    onError="myErrorHandlerSeq">
    <payloadFactory>
        <format>
            <p:O_SimpleProduct xmlns:p="http://ws.wso2.org/dataservice">
                <p:PC_STEP_SKU_ID>$1</p:PC_STEP_SKU_ID>
                </p:O_SimpleProduct>
        </format>
        <args>
            <arg xmlns:m="http://wso2.org/services/product" evaluator="xml"
                expression="//product/simpleProduct/step_id/text()" />
        </args>
    </payloadFactory>
    <header name="Action" value="urn:O_SimpleProduct" />
    <callout serviceURL="local://localhost/services/productEnrichment"
        action="urn:O_SimpleProduct" useServerConfig="true">
        <source xmlns:ns="http://org.apache.synapse/xsd" xpath="$body/child::*[fn:position()=1]" />
        <target xmlns:ns="http://org.apache.synapse/xsd" xpath="$body/child::*[fn:position()=1]" />
    </callout>
    <clone sequential="false">
<property name="RESPONSE" value="true" />
    <header name="To" action="remove" />
      <target>
      <endpoint>
            <address
                uri="jms:/step.IF04Output?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue" />
        </endpoint>
        </target>

      <target>
    <filter xmlns:ns="http://org.apache.synapse/xsd" xmlns:ds="http://wso2.org/services/product"
        source="//ds:result/ds:set/ds:PC_STATUS/text()" regex="0">
        <then>
            <log level="custom">
                <property name="STATUS"
                    value="************DONE INSERTING SIMPLE ATTRIBUTES***************" />
            </log>
        </then>
        <else>
            <log level="full" category="ERROR">
                <property name="STATUS"
                    value="************ERROR OCCURED WHILE INSERTING SIMPLE ATTRIBUTES. ROLLBACKING THE TRANSACTION***************" />
                <property name="PC_RP_ID" expression="get-property('GEN_RP_ID')" />
            </log>
            <transaction action="rollback" />
            <drop />
        </else>
    </filter>
    <property xmlns:ds="http://wso2.org/services/product" name="GEN_RP_ID"
        expression="//ds:result/ds:set/ds:PC_RP_ID/text()" />
    <enrich>
        <source type="property" clone="true" property="MSG_PAYLOAD" />
        <target type="body" />
    </enrich>
    </target>
</clone>
</sequence>

自从过去两天以来,我一直在努力解决这个问题。尝试在几个地方唱Clone medior。但它不起作用。您能否尽快提供您的建议,因为我明天要进行演示,我需要对其进行整理:(

干杯, 安查尔

【问题讨论】:

    标签: proxy jms wso2 clone


    【解决方案1】:

    我认为这是你正在苦苦挣扎的部分;

    <callout serviceURL="local://localhost/services/productEnrichment"
            action="urn:O_SimpleProduct" useServerConfig="true">
            <source xmlns:ns="http://org.apache.synapse/xsd" xpath="$body/child::*[fn:position()=1]" />
            <target xmlns:ns="http://org.apache.synapse/xsd" xpath="$body/child::*[fn:position()=1]" />
        </callout>
        <clone sequential="false">
    <property name="RESPONSE" value="true" />
        <header name="To" action="remove" />
          <target>
          <endpoint>
                <address
                    uri="jms:/step.IF04Output?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue" />
            </endpoint>
            </target>
    

    由于您的要求是从 DS 服务之一获取响应并将其发送到队列..我认为它失败了,因为您正在删除“To”标头..在克隆中介的“Target”之一中使用标注中介发送到 JMS 队列后的配置将消息放在那里..在另一个目标中,定义其余的逻辑..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 2018-03-08
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多