Mule xpath失败,消息有效内容的类型为:String

时间:2015-05-06 06:52:15

标签: mule mule-studio mule-el

我最近开始在 Anypoint 工作室中使用 Mule ,当然我经常会遇到错误。

目前我正在使用<cxf:jaxws-client><http:outbound-endpoint>访问 SOAP 服务,并且从我得到的SOAP响应中,我想对特定的body元素执行检查。

这是我的流程:

<flow name="Send-To-Selligent">

    <cxf:jaxws-client
        wsdlLocation="http://online.vikingdirekt.at/automation/individual.asmx?WSDL"
        clientClass="org.tempuri.Individual" port="IndividualSoap" operation="TriggerCampaign"
        enableMuleSoapHeaders="false" doc:name="CXF">
        <cxf:inInterceptors>
            <spring:bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
        </cxf:inInterceptors>
        <cxf:outInterceptors>
            <spring:bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
        </cxf:outInterceptors>
    </cxf:jaxws-client>

    <mulexml:dom-to-xml-transformer
        doc:name="DOM to XML" />

    <http:outbound-endpoint exchange-pattern="request-response"
        address="http://online.vikingdirekt.at/automation/individual.asmx"
        method="POST" doc:name="HTTP">
        <response>
            <object-to-string-transformer />
        </response>
    </http:outbound-endpoint>

    <message-filter onUnaccepted="ExceptionFlow"
        doc:name="SOAP response must be successfull">
        <expression-filter
            expression="#[xpath3('/soap:Envelope/soap:Body/TriggerCampaignResponse/TriggerCampaignResult').text == '0']"
            doc:name="Expression" />
    </message-filter>

</flow>

从mule debuging我已经提取了这个信息:

<http:outbound-endpoint>有效负载包含ReleasingInputStream之后,我转换为字符串(soap响应xml)并带有

<response>
    <object-to-string-transformer />
</response>

不幸的是,当流量达到xpath3(...)

我明白了

2015-05-06 15:56:29 WARN  PhaseInterceptorChain:289 - Interceptor for {http://tempuri.org/}Individual#{http://tempuri.org/}TriggerCampaign has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Execution of the expression "xpath3('/soap:Envelope/soap:Body/TriggerCampaignResponse/TriggerCampaignResult').text == '0'" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String
    at org.mule.module.cxf.transport.MuleUniversalConduit$2.handleMessage(MuleUniversalConduit.java:194)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:462)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:365)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:318)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:95)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
    at com.sun.proxy.$Proxy44.triggerCampaign(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.mule.module.cxf.CxfOutboundMessageProcessor.doSendWithProxy(CxfOutboundMessageProcessor.java:185)
    at org.mule.module.cxf.CxfOutboundMessageProcessor.process(CxfOutboundMessageProcessor.java:127)
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24)
    at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:58)
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:94)
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:67)
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24)
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
    at org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(AbstractInterceptingMessageProcessorBase.java:102)
    at org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeInterceptor.java:51)
    at org.mule.processor.AsyncInterceptingMessageProcessor.processNextTimed(AsyncInterceptingMessageProcessor.java:118)
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker$1.process(AsyncInterceptingMessageProcessor.java:189)
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker$1.process(AsyncInterceptingMessageProcessor.java:182)
    at org.mule.execution.ExecuteCallbackInterceptor.execute(ExecuteCallbackInterceptor.java:16)
    at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:30)
    at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:14)
    at org.mule.execution.BeginAndResolveTransactionInterceptor.execute(BeginAndResolveTransactionInterceptor.java:54)
    at org.mule.execution.ResolvePreviousTransactionInterceptor.execute(ResolvePreviousTransactionInterceptor.java:44)
    at org.mule.execution.SuspendXaTransactionInterceptor.execute(SuspendXaTransactionInterceptor.java:50)
    at org.mule.execution.ValidateTransactionalStateInterceptor.execute(ValidateTransactionalStateInterceptor.java:40)
    at org.mule.execution.IsolateCurrentTransactionInterceptor.execute(IsolateCurrentTransactionInterceptor.java:41)
    at org.mule.execution.ExternalTransactionInterceptor.execute(ExternalTransactionInterceptor.java:48)
    at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:28)
    at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:13)
    at org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(TransactionalErrorHandlingExecutionTemplate.java:109)
    at org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(TransactionalErrorHandlingExecutionTemplate.java:30)
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker.doRun(AsyncInterceptingMessageProcessor.java:181)
    at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:39)
    at org.mule.work.WorkerContext.run(WorkerContext.java:286)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.mule.api.MessagingException: Execution of the expression "xpath3('/soap:Envelope/soap:Body/TriggerCampaignResponse/TriggerCampaignResult').text == '0'" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:32)
    at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:58)
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:94)
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:67)
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24)
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
    at org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(AbstractInterceptingMessageProcessorBase.java:102)
    at org.mule.processor.AbstractFilteringMessageProcessor.process(AbstractFilteringMessageProcessor.java:40)
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24)
    at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:58)
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:94)
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:67)
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24)
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
    at org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(AbstractInterceptingMessageProcessorBase.java:102)
    at org.mule.module.cxf.CxfOutboundMessageProcessor.processNext(CxfOutboundMessageProcessor.java:160)
    at org.mule.module.cxf.transport.MuleUniversalConduit.processNext(MuleUniversalConduit.java:345)
    at org.mule.module.cxf.transport.MuleUniversalConduit.dispatchMuleMessage(MuleUniversalConduit.java:248)
    at org.mule.module.cxf.transport.MuleUniversalConduit$2.handleMessage(MuleUniversalConduit.java:190)
    ... 45 more
Caused by: org.mule.api.expression.ExpressionRuntimeException: Execution of the expression "xpath3('/soap:Envelope/soap:Body/TriggerCampaignResponse/TriggerCampaignResult').text == '0'" failed.
    at org.mule.el.mvel.MVELExpressionLanguage.evaluateInternal(MVELExpressionLanguage.java:202)
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:183)
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:161)
    at org.mule.expression.DefaultExpressionManager.evaluate(DefaultExpressionManager.java:229)
    at org.mule.expression.DefaultExpressionManager.evaluateBoolean(DefaultExpressionManager.java:356)
    at org.mule.routing.filters.ExpressionFilter.accept(ExpressionFilter.java:123)
    at org.mule.routing.MessageFilter.accept(MessageFilter.java:85)
    at org.mule.processor.AbstractFilteringMessageProcessor.process(AbstractFilteringMessageProcessor.java:38)
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24)
    ... 65 more
Caused by: [Error: null pointer or function not found: xpath3]
[Near : {... xpath3('/soap:Envelope/soap:Bo ....}]
             ^
[Line: 1, Column: 1]
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1028)
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:993)
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:343)
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:140)
    at org.mule.mvel2.ast.ASTNode.optimize(ASTNode.java:159)
    at org.mule.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115)
    at org.mule.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:112)
    at org.mule.mvel2.MVELRuntime.execute(MVELRuntime.java:86)
    at org.mule.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123)
    at org.mule.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119)
    at org.mule.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:113)
    at org.mule.mvel2.MVEL.executeExpression(MVEL.java:943)
    at org.mule.el.mvel.MVELExpressionExecutor.execute(MVELExpressionExecutor.java:72)
    at org.mule.el.mvel.MVELExpressionLanguage.evaluateInternal(MVELExpressionLanguage.java:198)
    ... 73 more
2015-05-06 15:56:31 ERROR CatchMessagingExceptionStrategy:337 - 
********************************************************************************
Message               : Execution of the expression "xpath3('/soap:Envelope/soap:Body/TriggerCampaignResponse/TriggerCampaignResult').text == '0'" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. [Error: null pointer or function not found: xpath3]
[Near : {... xpath3('/soap:Envelope/soap:Bo ....}]
             ^
[Line: 1, Column: 1] (org.mule.mvel2.PropertyAccessException)
  org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer:1028 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/mvel2/PropertyAccessException.html)
2. Execution of the expression "xpath3('/soap:Envelope/soap:Body/TriggerCampaignResponse/TriggerCampaignResult').text == '0'" failed. (org.mule.api.expression.ExpressionRuntimeException)
  org.mule.el.mvel.MVELExpressionLanguage:202 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html)
3. Execution of the expression "xpath3('/soap:Envelope/soap:Body/TriggerCampaignResponse/TriggerCampaignResult').text == '0'" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String (org.mule.api.MessagingException)
  org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:32 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
[Error: null pointer or function not found: xpath3]
[Near : {... xpath3('/soap:Envelope/soap:Bo ....}]
             ^
[Line: 1, Column: 1]
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1028)
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:993)
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:343)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

根据Mule documentation字符串输入应该没问题。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:0)

错误的根本原因是:

Error: null pointer or function not found: xpath3

所以它与有效载荷完全无关,而是与Mule无法将xpath3识别为有效函数的事实有关。

XPal 3已添加到Mule 3.6.0中,因此请确保在此版本的运行时上运行应用程序。

答案 1 :(得分:0)

如David所述,根本原因将是xpath3表示法。

将xpath3更改为xpath后,确保必须在流程中将空间管理器命名为&#34; soap&#34;和targeturi因此。

答案 2 :(得分:0)

您可以在debug中运行该应用程序并检查xpath表达式。

并且还观察到你仍然在表达式中使用xpath3。