Reputation: 215
im having trouble getting message inbound properties, somehow its coming as null, here is the code:
<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>
What it prints out is "null" and i dont know how to make it print the property from message...
Upvotes: 2
Views: 18348
Reputation: 4551
Property name is User-Agent
and as David pointed out, #message.inboundProperties['User-Agent']]
is the MEL
way to get it.
Did you make sure User-Agent
property is set on the mule message
when you're trying to access it. It's not always there
Remember inbound
properties are not propagated unless you copy property manually like by
<copy-properties propertyName="*"/>
Upvotes: 1
Reputation: 33413
No need to use Groovy:
<logger message="#[message.inboundProperties['user-agent']]" level="INFO" doc:name="Logger"/>
But your bigger issue is that you are not propagating the inbound properties to the outbound scope prior to dispatching to vm://log-request.in
.
You need to propagate the properties you want to carry forward:
<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>
Of course, you can iterate the inbound property names to copy them all.
Upvotes: 9