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