简体   繁体   中英

Mule invoke message processor

I came across "invoke" element ( link ) that can be used to invoke java methods from inside the flow. It seemed a perfect solutions for me, since I don't want to use Callable and entry points resolvers and I want to pass extra parameter to the method.

<invoke object-ref="yourBean"
        method="yourMethod"
        methodArguments="#[message.inboundProperties['inboundPropertyName']]" />

<set-property propertyName="outboundPropertyName"
              value="#[payload]" />

I did something like the code above. My question is: how should I create "yourBean"? I tried to create:

<spring:bean name="yourBean" class="class"/>

but got:

 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'yourBean' is defined

I also have other beans defined in my tag, but others seemed to work. Does anyone have similar issue?

EDIT: When I deleted other beans definitions besides "yourBean" everything started to work, but when I add more beans definitions I got following error when I tried to use "yourBean":

Exception stack is:
1. null (java.lang.NullPointerException)
  org.mule.processor.InvokerMessageProcessor:280 (null)
2. null (java.lang.NullPointerException). Message payload is of type: String (org.mule.api.MessagingException)
  org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:35 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.ht
ml)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.lang.NullPointerException
        at org.mule.processor.InvokerMessageProcessor.transformArgument(InvokerMessageProcessor.java:280)
        at org.mule.processor.InvokerMessageProcessor.evaluateArguments(InvokerMessageProcessor.java:200)
        at org.mule.processor.InvokerMessageProcessor.process(InvokerMessageProcessor.java:164)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

Which for me seems like the "yourBean" is not instantiated. But why?

My bean definitions:

<bean id="yourBean" class="com.example.BpmService"/>

    <bean id="StatusUpdateContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
        <constructor-arg>
            <array>
                <value type="java.lang.Class">
                    com.example.OrderStatusUpdate
                </value>
            </array>
        </constructor-arg>
</bean>

EDIT: Ok, id/name both some to work for Mule invoke. I have had no problems using invoke with multiple bean definitions. This sounds more like an issue with your beans, which you are not sharing, and/or Spring than Mule invoke.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM