【问题标题】:Use Java object in mule在 mule 中使用 Java 对象
【发布时间】:2016-04-19 12:53:51
【问题描述】:

我正在使用一个 java 对象,它应该返回一个端点,然后我想调用一个托管在指定端点的服务。请帮忙。

下面是我的努力

在 mule.xml 中

<spring:beans>
        <spring:bean id="reqUrl" class="com.mule.sbus.drools.RequestUrl"
            scope="singleton" />
    </spring:beans>

    <bpm:drools />
    <http:listener-config name="NorthboundSingleEntrypoint"
        host="0.0.0.0" port="8191" doc:name="HTTP Listener Configuration" />

    <http:request-config name="HTTP_Request_Configuration"
        host="acdc3a38cffc411e5a18606a62b4ee07-877599714.us-west-1.elb.amazonaws.com"
        port="80" doc:name="HTTP Request Configuration" />

    <flow name="sbusdroolsFlow">
        <http:listener config-ref="NorthboundSingleEntrypoint"
            path="/*" doc:name="HTTP" />

        <set-variable variableName="requestUrl"
            value="#[message.inboundProperties.'http.request.path']" doc:name="RequestUrl" />

        <script:component doc:name="Script">
            <script:script engine="groovy">
                <![CDATA[
                    return requestUrl;
                ]]>
            </script:script>
        </script:component>

        <bpm:rules rulesDefinition="routingRules.drl"
            initialFacts-ref="reqUrl" />
        <expression-transformer evaluator="groovy"
            expression="message.getPayload().getObject()" doc:name="Expression" />

        <logger message="#[groovy:message.getPayload().getObject()]" level="INFO"
            doc:name="LoggerResp" />

    </flow>

下面是我的口水 .drl

#default dialect for the semantic code will be MVEL
global org.mule.module.bpm.MessageService mule;

import com.mule.sbus.drools.RequestUrl

dialect "mvel"

declare RequestUrl
    @role(event)
end

rule "test123"
    lock-on-active
when
    $url:RequestUrl(url=="test123")
then
    #order.setDestination("WAREHOUSE_A");
    modify($url){setEndPoint("test123")}
end

rule "test234"
    lock-on-active
when
    $url:RequestUrl(url=="test234")
then
    #order.setDestination("WAREHOUSE_A");
    modify($url){setEndPoint("test234")}
end

还有我的java类

package com.mule.sbus.drools;

public class RequestUrl {

    private String url;

    private String endPoint;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getEndPoint() {
        return endPoint;
    }

    public void setEndPoint(String endPoint) {
        /*if(endPoint=="test123")
            this.endPoint = endPoint;
        else*/
            this.endPoint = "/checkcibil";
            System.out.println("inside java :::: " + endPoint);
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "url : " + url + " endPoint : " + endPoint;
    }

}

如您所见,我正在从 drools 文件调用我的 setter,一旦我得到字符串,我想使用

打印相同的字符串
<logger message="#[groovy:message.getPayload().getObject()]" level="INFO"
            doc:name="LoggerResp" />

但我不知道应该使用什么 message value。请帮忙

【问题讨论】:

  • drools 文件看起来不像 XML,我会更正一下 :)
  • 对不起,drools 文件是一个 .drl 文件,会更新它
  • 您想通过expression-transformer 实现什么目标? script:component 也可以替换为 &lt;set-payload value="#[flowVars.requestUrl]"/&gt;
  • 感谢大卫,您的回复帮助我解决了我的问题

标签: groovy mule drools


【解决方案1】:

得到答案,

由于我在使用groovy,已经注释掉了drools,并更新了如下代码

 <script:component doc:name="Script">
            <script:script engine="groovy">
                <![CDATA[
                reqUrl.setEndPoint(requestUrl);
                String endpnt = reqUrl.getEndPoint();
                message.setProperty('endpnt', endpnt,org.mule.api.transport.PropertyScope.INVOCATION);
                ]]>
            </script:script>
        </script:component>

                <logger message="#[flowVars['endpnt']]" level="INFO" doc:name="LoggerResp" />

使用 groovy 我正在调用 setter 并调用 getter 以获取 endpt 变量中的值。现在可以将其设置为消息中的属性,稍后我们可以使用#[flowVars['endpnt']]

检索相同的属性(外部 groovy 脚本标签)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多