[英]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.