如何从自定义变换器访问Mule全局变量? 我有一个变量(在属性文件中),名为blaze.services.address - 它肯定被加载(我在MEL中使用它)。我的代码:
import org.mule.api.MuleContext;
import org.mule.api.MuleMessage;
import org.mule.api.context.MuleContextAware;
import org.mule.api.transformer.TransformerException;
import org.mule.api.transport.PropertyScope;
import org.mule.transformer.AbstractMessageTransformer;
import org.apache.commons.httpclient.HttpStatus;
import com.vatit.blaze.esb.exception.HttpResponseException;
public class HttpErrorResponseChecker extends AbstractMessageTransformer {
@Override
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
Integer statusCode = Integer.parseInt((String)message.getProperty("http.status", PropertyScope.INBOUND));
String payload;
try {
payload = message.getPayloadAsString();
} catch (Exception e) {
e.printStackTrace();
payload = "Unknown payload";
}
muleContext.getRegistry().get("blaze.services.address");
if (statusCode >= HttpStatus.SC_BAD_REQUEST)
throw new HttpResponseException(this, statusCode, "Exception caused by call to HTTP service", payload);
return message.getPayload();
}
}
问题:
setMuleContext永远不会在断点上停止(从不调用?)
muleContext.getRegistry().get("blaze.services.address")
返回null
有人有想法吗?
EDIT(变压器配置):
在回应David的评论时,我删除了MuleContextAware的重复实现,但结果仍然相同。
我的变压器配置如下所示:
<custom-transformer class="com.vatit.blaze.esb.transformer.HttpErrorResponseChecker" name="HttpErrorResponseChecker" doc:name="Java">
<spring:property name="blazeServicesAddress" value="${blaze.services.address}"/>
</custom-transformer>
哪个有效(_blazeServicesAddress属性未在java代码中显示),但我更喜欢直接访问该属性,而不必注入。
编辑2(属性占位符): 这是加载属性文件的方式:
<spring:beans>
<context:property-placeholder location="classpath:blazedefault.properties" order="0"/>
<context:property-placeholder location="classpath:blazeoverride.properties" ignore-resource-not-found="true" ignore-unresolvable="true" order="-1"/>
</spring:beans>
答案 0 :(得分:1)
AbstractMessageTransformer
已经实施MuleContextAware
,您可以在此处看到:https://www.mulesoft.org/docs/site/current3/apidocs/org/mule/transformer/AbstractMessageTransformer.html
因此,您可以从自定义转换器中删除对它的支持,只需使用来自此处的muleContext
受保护字段:https://github.com/mulesoft/mule/blob/bfb3a17263d1e4b32ee10272cbf710a2bf41b16b/core/src/main/java/org/mule/transformer/AbstractTransformer.java#L58
编辑:事实上,执行您想要实现的目标的正确方法是从Mule XML配置中将blaze.services.address
Spring注入HttpErrorResponseChecker
,而不是查找它以编程方式完成。