gpt4 book ai didi

java - 从自定义转换器访问 Mule 全局变量

转载 作者:行者123 更新时间:2023-11-30 11:13:46 29 4
gpt4 key购买 nike

如何从我的自定义转换器访问 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

有人有想法吗?

编辑(变压器配置):

作为对 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 代码中显示),但我更愿意直接访问该属性,而不必注入(inject)。

编辑 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>

最佳答案

AbstractMessageTransformer 已经实现了 MuleContextAware,如您所见:https://www.mulesoft.org/docs/site/current3/apidocs/org/mule/transformer/AbstractMessageTransformer.html

因此您可以从您的自定义转换器中删除对它的支持,只使用来自此处的 muleContext protected 字段:https://github.com/mulesoft/mule/blob/bfb3a17263d1e4b32ee10272cbf710a2bf41b16b/core/src/main/java/org/mule/transformer/AbstractTransformer.java#L58

编辑:事实上,实现您想实现的目标的正确方法是将 blaze.services.address 注入(inject) HttpErrorResponseChecker 来自 Mule XML 配置,而不是像那样以编程方式查找它。

关于java - 从自定义转换器访问 Mule 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291931/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com