2

メッセージの受信プロパティを取得するのに問題があります。どういうわけかnullになります。コードは次のとおりです。

<scripting:transformer name="noopLoggingTransformer">
    <scripting:script engine="groovy">
        log.info "${message.getInboundProperty('user-agent')}"
        muleContext.client.dispatch('vm://log-request.in', message)
        message
     </scripting:script>
</scripting:transformer>

<pattern:web-service-proxy name="service" transformer-refs="noopLoggingTransformer" inboundAddress="${serverName}/services/Logradouros/LogradouroServico" outboundAddress="${targetServer}/servicos/v2/service.svc" wsdlFile="LogradouroServicos.wsdl">
</pattern:web-service-proxy>

<jdbc-ee:postgresql-data-source name="WSA" user="${database.user}" password="${database.pass}" url="${database.url}" transactionIsolation="UNSPECIFIED" doc:name="PostgreSQL Data Source">
</jdbc-ee:postgresql-data-source>

<jdbc-ee:connector name="jdbcConnector" dataSource-ref="WSA" validateConnections="false" transactionPerMessage="true" queryTimeout="10" pollingFrequency="10000" doc:name="JDBC"> 
    <jdbc-ee:query key="wsadb" value="insert into inbound_messages (payload, timestamp, agent, ip_from, endpoint, soap_operation) values ('', now(), #[groovy: return message.getInboundProperty('user-agent').toString()], #[groovy: return message.getInboundProperty('MULE_REMOTE_CLIENT_ADDRESS').toString()], #[groovy: return message.getInboundProperty('http.request').toString()], '');"></jdbc-ee:query>  
</jdbc-ee:connector>

<flow name="log-request" doc:name="log-request"> 
    <vm:inbound-endpoint path="log-request.in" />
    <logger message="#[message.inboundProperties['user-agent']]" level="INFO" doc:name="Logger"/>
    <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="wsadb" responseTimeout="10000" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Persist raw message" />
</flow>

印刷されるのは「null」で、メッセージからプロパティを印刷する方法がわかりません...

4

2 に答える 2

9

Groovy を使用する必要はありません。

<logger message="#[message.inboundProperties['user-agent']]" level="INFO" doc:name="Logger"/>

しかし、より大きな問題は、にディスパッチする前に、インバウンド プロパティをアウトバウンド スコープに伝播していないことですvm://log-request.in

持ち越したいプロパティを伝播する必要があります。

<scripting:transformer name="noopLoggingTransformer">
    <scripting:script engine="groovy">
        def props = [:]
        props['User-Agent'] = message.getProperty('User-Agent', org.mule.api.transport.PropertyScope.INBOUND)
        muleContext.client.dispatch('vm://log-request.in', payload, props)
        message
     </scripting:script>
</scripting:transformer>

もちろん、インバウンド プロパティ名を反復処理して、それらをすべてコピーすることもできます。

于 2013-10-11T18:02:33.047 に答える
1

プロパティ名はUser-Agentデビッドが指摘し#message.inboundProperties['User-Agent']]MELように、それを取得する方法です。

アクセスしようとしているときにUser-Agentプロパティが設定されていることを確認しましたか。mule messageいつもあるわけじゃない

inboundのようにプロパティを手動でコピーしない限り、プロパティは伝播されないことに注意してください。

<copy-properties propertyName="*"/>

于 2013-10-11T18:28:39.923 に答える