Mule 3.9.0 - 没有执行异常流程的Mule Throw异常(异常策略)

问题描述 投票:1回答:2

如何处理此异常?如果我在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:解析请求时发生异常:java.nio.charset .UnsupportedCharsetException:java.nio.charset.Charset.forName(Charset.java:531)〜[?:1.8.0_111]的UTF-88 at org.mule.transformer.types.SimpleDataType.setEncoding(SimpleDataType.java:89) 〜[mule-core-3.9.0.jar:3.9.0] 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] atg.mule.DefaultMuleMessage.setProperty(DefaultMuleMessage.java:494)〜[mule-core-3.9 .g.jar:3.9.0] org.mule.DefaultMuleMessage.addProperties(DefaultMuleMessage.java:1398)〜[mule-core-3.9.0.jar:3.9.0] org.mule.DefaultMuleMessage。(DefaultMuleMessage。 java:198)〜[mule-core-3.9.0.jar:3.9.0] at org.mule.DefaultMuleMessage。(DefaultMuleMessage.java:175)〜 [mule-core-3.9.0.jar:3.9.0]在org.mule.module.http.internal.listener.HttpRequestToMuleEvent.transform(HttpRequestToMuleEvent.java:128)〜[mule-module-http-3.9.0。 jar:3.9.0] 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.handleRequest(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-framework- 2.3.33.jar:2.3.33]在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)〜[grizzl y-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 at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)〜[grizzly-framework-2.3.33.jar:2.3.33] org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java) :org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)〜[grizzly-framework-2.3.33.jar:2.3。 33] org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)〜[grizzly-framework-2.3.33.jar:2.3.33] org.glassfish.grizzly.strategies.AbstractIOStrategy。 fireIOEvent(AbstractIOStrategy.java:112)〜[grizzly-framework-2.3.33.jar:2.3.33]在org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.run0(ExecutorPerServerAddressIOStrategy.java:119)〜 [orle.mu的[mule-module-http-3.9.0.jar:3.9.0] le.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.access $ 100(ExecutorPerServerAddressIOStrategy.java:31)〜[mule-module-http-3.9.0.jar:3.9.0] atg.mule.module.http。 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java)中的internal.listener.grizzly.ExecutorPerServerAddressIOStrategy $ WorkerThreadRunnable.run(ExecutorPerServerAddressIOStrategy.java:142)~ [mule-module-http-3.9.0.jar:3.9.0] :1142)[?:1.8.0_111] 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]

mule mule-esb
2个回答
0
投票

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

#[message.inboundProperties [ '内容 - 类型']。包含( 'UTF-8')]

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

例如:

 <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
投票

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

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实例获取有效负载,如 -

message.getPayloadAsString();

就我而言,我将它设置为'UTF-8'。您可以根据需要进行设置。

© www.soinside.com 2019 - 2024. All rights reserved.