如何处理此异常?如果我在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
发布于 2017-12-25 23:15:30
1.在每个元素中使用MEL表达式来测试Content-Type标头:
#[message.inboundProperties'Content-Type'.contains('UTF-8')]
2.使用元素作为switch的默认语句:从那里抛出异常。
例如:
<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>发布于 2017-12-28 10:27:41
在mule核心中,有一个类org.mule.transformer.types.SimpleDataType.java负责这个异常。对于无效的字符集,Charset.forname方法将引发UnsupportedCharsetException. setEncoding方法来检查字符集的有效性为了避免这种情况,您可以像这样修改代码块-
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‘。您可以根据需要进行设置。
https://stackoverflow.com/questions/47966893
复制相似问题