在我的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服务,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介体外,代理工作正常。实际上,Payload Factory介体构建的消息的主体是空的:
<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表达式似乎是正确的)?怎么了? 感谢
答案 0 :(得分:0)
也许我已经解决了。 在结果中我需要发送两条消息:第一个是简单的
<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>