首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mule 3.9.0 - Mule抛出异常,不执行异常流(异常策略)

Mule 3.9.0 - Mule抛出异常,不执行异常流(异常策略)
EN

Stack Overflow用户
提问于 2017-12-25 16:13:05
回答 2查看 548关注 0票数 1

如何处理此异常?如果我在Content-Type中发送了错误的编码值(UTF-88),Mule抛出异常而不执行异常流。

WARN 2017-12-22 10:19:55,733分析请求出现[2017-mule_api_registry-uni_auth_app.HttpConnectoConfig.worker.02] org.mule.module.http.internal.listener.DefaultHttpListener:异常:在org.mule.transformer.types.SimpleDataType.setEncoding(SimpleDataType.java:89) ~mule- ~?:1.8.0_111 -3.9.的mule核心: UTF-88。0.jar:3.9.0 at org.mule.DefaultMuleMessage.updateDataTypeWithProperty(DefaultMuleMessage.java:551) ~mule-core-3.9.0.jar:3.9.0 at org.mule.DefaultMuleMessage.setProperty(DefaultMuleMessage.java:502) ~mule-core-3.9.0.jar:3.9.0 at org.mule.DefaultMuleMessage.setProperty(DefaultMuleMessage.java:494) ~mule-core-3.9.0.jar:3.9.0 at org.mule.DefaultMuleMessage。核心( org.mule.DefaultMuleMessage.(DefaultMuleMessage.java:175) )~mule-addProperties-3.9.0.jar:3.9.0 at mule-DefaultMuleMessage.java:1398-3.9.0.jar:3.9.0 at mule-org.mule.DefaultMuleMessage.(DefaultMuleMessage.java:175)-3.9.0.jar:3.9.0 at org.mule.module.http.internal.listener.HttpRequestToMuleEvent.transform(HttpRequestToMuleEvent.java:128) ~mule-addProperties-http-3.9.0.jar:3.9.0 at org.mule.module.http.internal.listener.DefaultHttpListener.createEvent(DefaultHttpListener.java:187) ~mule-module-http-3.9.0.jar:3.9.0 at org.mule.module.http.internal.listener.DefaultHttpListener.access$000(DefaultHttpListener.java:48) ~mule-module-http-3.9.0.jar:3.9.0 at org.mule.module.http.internal.listener.DefaultHttpListener$1.grizzly(DefaultHttpListener.java:133) ~mule-module-http-3.9.0.jar:3.9.0 at org.mule.module.http.internal.listener.grizzly.GrizzlyRequestDispatcherFilter.handleRead(GrizzlyRequestDispatcherFilter.java:100) ~mule-module-http-3.9.0.jar:3.9.0 at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) ~grizzly-handleRequest-2.3.33.jar:2.3.33 at org.glassfish.grizzly。filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) ~grizzly-framework-2.3.33.jar:2.3.33 at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) ~grizzly-framework-2.3.33.jar:2.3.33 at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) ~grizzly-framework-2.3.33.jar:2.3.33 at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(grizzly) ~grizzly-framework-2.3.33.jar:2.3.33 at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) ~grizzly-framework-2.3.33.jar:2.3.33 at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539) ~grizzly-framework-2.3.33.jar:2.3.33 at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)~grizzly- org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.run0(ExecutorPerServerAddressIOStrategy.java:119) -2.3.33.jar:2.3.33 at org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.access$100(ExecutorPerServerAddressIOStrategy.java:31) ~mule-module-http-3.9.0.jar:3.9.0 at org.mule.module.http ~mule-module-http-3.9.0.jar:3.9.0。internal.listener.grizzly.ExecutorPerServerAddressIOStrategy$WorkerThreadRunnable.run(ExecutorPerServerAddressIOStrategy.java:142) ~mule-module-http-3.9.0.jar:3.9.0 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ?:1.8.0_111 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ?:1.8.0_111 at java.lang.Thread.run(Thread.java:745) ?:1.8.0_111

EN

回答 2

Stack Overflow用户

发布于 2017-12-25 23:15:30

1.在每个元素中使用MEL表达式来测试Content-Type标头:

#[message.inboundProperties'Content-Type'.contains('UTF-8')]

2.使用元素作为switch的默认语句:从那里抛出异常。

例如:

代码语言:javascript
复制
 <choice>
     <when expression="#[message.inboundProperties['Content-Type'].contains('??????? your required content type ??????')]">
           <logger message="when number one invoked" level="WARN"/>
      </when>
      <otherwise>
           <logger message="otherwise invoked" level="WARN"/>
      </otherwise>
 </choice>
票数 0
EN

Stack Overflow用户

发布于 2017-12-28 10:27:41

在mule核心中,有一个类org.mule.transformer.types.SimpleDataType.java负责这个异常。对于无效的字符集,Charset.forname方法将引发UnsupportedCharsetException. setEncoding方法来检查字符集的有效性为了避免这种情况,您可以像这样修改代码块-

代码语言:javascript
复制
public void setEncoding(String encoding)
{
    if (!StringUtils.isEmpty(encoding))
    {
        try {
            // Checks that the encoding is valid and supported
            Charset.forName(encoding);
        }catch(UnsupportedCharsetException e) {
            encoding = "UTF-8";
        }
    }

    this.encoding = encoding;
}

您必须设置默认字符集,否则无法从MuleMessage实例获取有效负载,例如-

代码语言:javascript
复制
message.getPayloadAsString();

在我的例子中,我将其设置为'UTF-8‘。您可以根据需要进行设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47966893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档