java - 将 mule 变量数据或 mule 属性(如有效负载)复制到 spring bean 属性

标签 java spring mule

我有一个骡子流,其中有一个变量,有效负载复制到其中,如下所示:

<set-variable variableName="originalPayload" value="#[payload]" doc:name="Variable" doc:description="Variable having copy of original payload present in soap request."/>

在此之后,有一个拦截器验证肥皂消息的 header ,如果验证失败,那么我需要拦截器中的上述变量数据来准备自定义错误消息。以下是我对上述 Soap Proxy 的配置:

<cxf:proxy-service port="XXX" namespace="XXX" service="XXX" payload="body" wsdlLocation="XXXX" doc:name="SOAP" doc:description="Soap proxy intercept soap request and apply header validation. Authentication and custom header will be validated for presence, content, and structure.">
    <cxf:inInterceptors>
        <spring:bean id="XXXX" parent="XXXX">
            <spring:property name="sourceApplication" value="${sourceApplication}"/>
            <spring:property name="originalMessage" value="#[originalPayload]"/>
        </spring:bean>
    </cxf:inInterceptors>
</cxf:proxy-service>

在上面我需要 spring bean 的originalMessage 属性中originalPayload 变量的值。如果我可以直接复制#[payload],它也会起作用。 spring 属性中的上述表达式无效,因此它不起作用。

请建议如何做到这一点。

实现 Callable 可能是一种选择,但我不想更改已经编写的代码,除非上面没有解决方案。

我试图寻找解决方案,但找不到任何东西。

谢谢 哈里什·库马尔

最佳答案

您的解决方案的问题在于 spring 属性是在配置时设置的,而 #[payload] 表达式只能在运行时解析。

但是,在拦截器中,您可以通过执行以下操作从 CXF 消息中检索原始负载:

MuleEvent event = (MuleEvent) message.getExchange().get(CxfConstants.MULE_EVENT);
Collection<Attachment> a = event.getMessage().getInvocationProperty("originalPayload");

您可以引用this interceptor举个例子

关于java - 将 mule 变量数据或 mule 属性(如有效负载)复制到 spring bean 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18568511/

相关文章:

java - 以编程方式设置 logback.xml 路径

java - 动态注入(inject) map

java - 如何为 Mule 和 Jersey 使用 Grizzly 嵌入式服务器

java - 在系统 jar 之前加载 jar

java - 计算文件中的单词数

java - 无法自动配置 session 存储库,请检查您的配置( session 存储类型为 'null' )

java - 仅使用 AWS 免费套餐的 Spring Boot 项目

xml - 使用 WMQ Transport 和 Mule ESB 进行批量入队

java - 如何解决 Junit for spring + mule ESB 项目的 clearCache() 方法的 java.lang.NoSuchMethodError

java - JSOUP同时提取多个元素