簡體   English   中英

WSO2 PayloadFactory介體為空參數

[英]WSO2 PayloadFactory mediator empty arguments

在我的WSO2 ESB 4.7.0中,我已經配置了此代理:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="SendingByJmsAddressProxy"
     transports="https,http"
     statistics="disable"
     trace="disable"
     startOnLoad="true">
 <target>
    <inSequence>
       <send>
          <endpoint>
             <address uri="http://localhost:8080/RestService/rest/servizio"/>
          </endpoint>
       </send>
    </inSequence>
    <outSequence>
       <log>
          <property name="codice" expression="//codice"/>
       </log>
       <log level="full"/>
       <switch source="//codice">
          <case regex="asd">
             <send/>
          </case>
          <case regex="0">
             <log>
                <property name="codice" value="check1"/>
             </log>
             <send/>
             <payloadFactory media-type="xml">
                <format>
                   <code>$1</code>
                </format>
                <args>
                   <arg xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" evaluator="xml"
                        expression="//codice"/>
                </args>
             </payloadFactory>
             <property name="messageType" value="application/xml"/>
             <log level="full"/>
             <send>
                <endpoint>
                   <address uri="jms:/testQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&java.naming.provider.url=repository/conf/jndi.properties&transport.jms.DestinationType=queue"/>
                </endpoint>
             </send>
          </case>
       </switch>
    </outSequence>
 </target>
 <description/>
</proxy>

在inSequence中,我將客戶端的請求轉發到Rest服務,該服務的響應是一個如下所示的json字符串:

{
  "codice":"0",
  "messaggio":"Operazione effettuata 18:12",
  "path":"\/path\/1AASSCOGNOME_NOME.111.2231\/",
  "documenti":[{
            "idAggregatoContenitore":"3508",
            "idDocumento":"016601",
            "idVersione":"17010",
            "numVersione":"1",
            "tipoDocumento":"Documento",
            "autore":"sysadmin",
            "titolo":"prova1",
            "fileName":"FStandard.xml",
            "checkedOut":"false",
            "idDocumentoPadre":"",
            "flagAllegati":"false",
            "flagDaProtocollare":"true",
            "dataCreazione":"11\/02\/2013 19:05",
            "dataChekin":"11\/02\/2013 19:05",
            "mimeType":"text\/xml",
            "empty":"false",
            "data":"1660100000",
            "cache":"false",
            "tipo":"D",
            "nome":"prova1",
            "keyData":"16601",
            "keyNome":"prova1",
            "keyNumero":"",
            "keyTipo":"D",
            "fileExtension":"path\/xml_file.png",
            "evidenza":"false",
            "originalDocumentoPadreId":"",
            "originalDocumentoId":"016601",
            "originalAggregatoContenitoreId":"3508"
          },
          {
            "idAggregatoContenitore":"3508",
            "idDocumento":"016602",
            "idVersione":"17011",
            "numVersione":"1",
            "tipoDocumento":"Documento",
            "autore":"sysadmin",
            "titolo":"123456789",
            "fileName":"HTTP Proxy Server.jmx",
            "checkedOut":"false",
            "idDocumentoPadre":"",
            "flagAllegati":"false",
            "flagDaProtocollare":"true",
            "dataCreazione":"11\/02\/2013 19:19",
            "dataChekin":"11\/02\/2013 19:19",
            "mimeType":"application\/octet-stream",
            "empty":"false",
            "data":"1660200000",
            "cache":"false",
            "tipo":"D",
            "nome":"123456789",
            "keyData":"16602",
            "keyNome":"123456789",
            "keyNumero":"",
            "keyTipo":"D",
            "fileExtension":"path\/Documento.png",
            "evidenza":"false",
            "originalDocumentoPadreId":"",
            "originalDocumentoId":"016602",
            "originalAggregatoContenitoreId":"3508"
          }],
  "data":"350800000",
  "tipoAggregatoEnum":"R",
  "statoEnum":"aperto",
  "keyData":"1360602720000",
  "keyNome":"1aasscognome_nome.111.2231",
  "nomeAggregatoNoNumero":"1AASSCOGNOME_NOME.111.2231",
  "keyNumero":"1AASSCOGNOME_NOME.111.2231",
  "keyTipo":"R",
  "originalAggregatoId":"3508",
  "originalAggregatoPadre":"3108"
}

作為標准行為,ESB將傳入的json消息轉換為xml格式的消息。 現在在outSequence中,我想要:

1)將RestService響應發回給客戶端:由中介者

2)然后我想構建一個xml消息,從消息有效負載中提取一些元素,然后通過jms協議將其發送到其他地方。

除了PayloadFactory介體以外,該代理都能正常工作。 實際上,“有效負載工廠”調解員構建的消息的主體為空:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<Body>
  <code xmlns="http://ws.apache.org/ns/synapse"/>
</Body>
</soapenv:Envelope>

誰能告訴我為什么指定的arg標記為空(xpath表達式似乎正確)? 怎么了? 謝謝

也許我已經解決了。 首先,我需要發送兩個消息:第一個消息是

<send/> 

應該必須將服務的響應返回給主叫客戶端。 之后,我需要向其他地方發送第二條消息。 在上面的代碼中,我使用了另一個發送介體...但是,似乎第一個()清空了消息有效負載,因此arg表達式因此為空。 使用克隆介體,我解決了這個問題:

<outSequence>
     <log>
        <property name="codice" expression="//codice"/>
     </log>
     <log level="full"/>
     <switch source="//codice">
        <case regex="asd">
           <send/>
        </case>
        <case regex="0">
           <log>
              <property name="codice" value="check1"/>
           </log>
           <clone>
              <target>
                 <sequence>
                    <send/>
                 </sequence>
              </target>
              <target>
                 <sequence>
                    <payloadFactory media-type="xml">
                       <format>
                          <messaggio>$1</messaggio>
                       </format>
                       <args>
                          <arg xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" evaluator="xml"
                               expression="//messaggio"/>
                       </args>
                    </payloadFactory>
                    <property name="messageType" value="application/xml"/>
                    <log level="full"/>
                    <send>
                       <endpoint>
                          <address uri="jms:/NuovoEvento?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&java.naming.provider.url=repository/conf/jndi.properties&transport.jms.DestinationType=topic"/>
                       </endpoint>
                    </send>
                 </sequence>
              </target>
           </clone>
        </case>
     </switch>
  </outSequence>

暫無
暫無

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

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