【问题标题】:arguments to invoke mule callable oncall method调用 mule 可调用 oncall 方法的参数
【发布时间】:2015-09-23 22:21:57
【问题描述】:

我正在尝试从 Mule 中的 Java Invoke 调用实现 Callable 的类。但我不知道从调用配置中传递什么作为方法参数。请帮忙!

public class ModificationService implements Callable {
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
    MuleMessage msg = eventContext.getMessage();
    String path = msg.getProperty("destination", PropertyScope.OUTBOUND);
    String[] splitpath = path.split("/");
    path = splitpath[0];
    msg.setProperty("destination", path, PropertyScope.OUTBOUND);

    MuleMessage newMessage = new DefaultMuleMessage(path, msg, eventContext.getMuleContext());

    return newMessage;
}

配置 XML

<invoke name="ModificationBean" object-ref="modificationServiceBean" method="onCall" methodArguments="#[payload]" doc:name="Invoke"/>

我传递消息负载只是为了不让参数部分为空。

【问题讨论】:

    标签: java mule mule-studio


    【解决方案1】:

    我相信您创建的类将适用于 mule 的 Java 组件,因为您需要对 MuleEventContext 的引用,您可以在其中获取有效负载的值。

    查看此链接:

    https://docs.mulesoft.com/mule-user-guide/v/3.7/java-component-reference

    而您正在寻找的是:

    https://docs.mulesoft.com/mule-user-guide/v/3.7/invoke-component-reference

    您需要创建一个自定义类,请参见下面的示例:

    addTwoNumbers 是类方法,其中以#[1] 和#[2] 作为参数。这些可以是 flowVars 或 SessionVars 或有效负载。

    【讨论】:

    • 我明白了.. 有没有办法使用 Java 组件来操作 flowVars 或 sessionVars?因为我想保持有效载荷不变
    • onCall 方法:String payload = eventContext.getMessage().getPayload().toString(); // 获取变量 String nameOfFlowVar = eventContext.getMessage().getProperty("nameOfFlowVar", PropertyScope.INVOCATION).toString(); // 获取变量 String nameOfSessionVar = eventContext.getMessage().getProperty("nameOfSessionVar", PropertyScope.SESSION).toString(); // 更新变量 eventContext.getMessage().setProperty("nameOfFlowVar", "SomeValue",PropertyScope.INVOCATION); eventContext.getMessage().setProperty("nameOfSessionVar", "SomeValue", PropertyScope.INVOCATION);
    • 尝试将其粘贴到您有 eventContext 引用的 onCall 方法中。
    【解决方案2】:

    这对你有帮助:

    “如何在同一个java组件中设置/获取变量、操作或修改payload、读取属性文件和spring”

    https://stackoverflow.com/a/32612487/3957754

    https://github.com/jrichardsz/mule-esb-usefull-templates

    带有可调用方法的简单组件:

    package com.spring.component;
    
    import java.util.Map;
    import javax.annotation.Resource;
    import org.mule.api.MuleEventContext;
    import org.mule.api.lifecycle.Callable;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    import org.mule.api.transport.PropertyScope;
    
    @Component("myComponent")
    @Scope("prototype")
    
    /*
     * Use Callable if you want : 
     * (spring functionalities, handle mule message and read a properties file) 
     * at the same time.
     * */
    public class MyComponent implements Callable{
    
    //  @Autowired
    //  private AnotherSpringComponetOrServiceOrWhatever spring;    
    
        @Override
        public Object onCall(MuleEventContext eventContext) throws Exception {
    
            //get payload
            String payload = (String) eventContext.getMessage().getPayload();
    
            //SESSION, INBOUND, OUTBOUND, APPLICATION
            //http://blogs.mulesoft.com/dev/anypoint-platform-dev/mule-school-the-mulemessage-property-scopes-and-variables/
    
            //get vars according to its scope
            String inputProperty = eventContext.getMessage().getProperty("inputProperty", PropertyScope.INVOCATION);
    
            //set vars in some scope
            eventContext.getMessage().setProperty("key", "some_value", PropertyScope.SESSION);
    
            //return eventContext.getMessage().getPayload(); //payload is intact
            return "NEW_PAYLOAD";
        }
    
    }
    

    在带弹簧的骡子流中:

    <component doc:name="myComponent">
        <spring-object bean="myComponent" />
    </component>
    

    或者没有spring(删除spring注解)

    <component class="com.spring.component.MyComponent" doc:name="MyComponent"/>
    

    我希望这对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      相关资源
      最近更新 更多