2017-12-25 9 views
1

Wie behandelt man diese Ausnahme? Mule-Throw-Ausnahme ohne Ausführen des Ausnahmeflusses, wenn ich einen falschen Kodierungswert (UTF-88) in Content-Type gesendet habe.Mule 3.9.0 - Mule Throw Exception ohne Ablauf der Exception (Exception-Strategie)

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: Parsen Ausnahme aufgetreten Anfrage: java.nio.charset.UnsupportedCharsetException: UTF-88 bei java.nio.charset.Charset.forName (Charset.java:531) ~ [?: 1.8.0_111] bei org.mule.transformer.types.SimpleDataType.setEncoding (SimpleDataType.java:89) ~ [mule-core-3.9.0.jar: 3.9.0] bei org.mule.DefaultMuleMessage.updateDataTypeWithProperty (DefaultMuleMessage.java:551) ~ [mule-core-3.9.0.jar : 3.9.0] bei org.mule.DefaultMuleMessage.setProperty (DefaultMuleMessage.java:502) ~ [mule-core-3.9.0.jar: 3.9.0] bei org.mule.DefaultMuleMessage.setProp esty (DefaultMuleMessage.java:494) ~ [mule-core-3.9.0.jar: 3.9.0] bei org.mule.DefaultMuleMessage.addProperties (DefaultMuleMessage.java:1398) ~ [mule-core-3.9.0. jar: 3.9.0] bei org.mule.DefaultMuleMessage. (DefaultMuleMessage.java:198) ~ [mule-core-3.9.0.jar: 3.9.0] bei org.mule.DefaultMuleMessage. (DefaultMuleMessage.java: 175) ~ [mule-core-3.9.0.jar: 3.9.0] bei org.module.module.http.internal.listener.HttpRequestToMuleEvent.transform (HttpRequestToMuleEvent.java:128) ~ [mule-module-http- 3.9.0.jar: 3.9.0] bei org.module.module.http.internal.listener.DefaultHttpListener.createEvent (DefaultHttpListener.java:187) ~ [mule-module-http-3.9.0.jar: 3.9. 0] bei org.module.module.http.internal.listener.DefaultHttpListener.access $ 000 (DefaultHttpListener.java:48) ~ [mule-module-http-3.9.0.jar: 3.9.0] at org.module.module.http.internal.listener.DefaultHttpListener $ 1.handleRequest (DefaultHttpListener.java:133) ~ [mule-modul-http-3.9.0.jar: 3.9.0] bei org.module.modul. http.internal.listener.grizzly.GrizzlyRequestDispatcherFilter.handleRead (GrizzlyRequestDispatcherFilter.java:100) ~ [mule-modul-http-3.9.0.jar: 3.9.0] bei org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute (ExecutorResolver.java:119) ~ [grizzly-framework-2.3.33.jar: 2.3.33] bei org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter (DefaultFilterChain.java:284) ~ [grizzly-framework-2.3 .33.jar: 2.3.33] bei org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart (DefaultFilterChain.java:201) ~ [grizzly-framework-2.3.33.jar: 2.3.33] bei org.glassfish .grizzly.filterchain.DefaultFilterChain.execute (DefaultFilterChain.java:133) ~ [Grizzly-Framework- 2.3.33.jar: 2.3.33] bei org.glassfish.grizzly.filterchain.DefaultFilterChain.process (DefaultFilterChain.java:112) ~ [grizzly-framework-2.3.33.jar: 2.3.33] bei org. glassfish.grizzly.ProcessorExecutor.execute (ProcessorExecutor.java:77) ~ [grizzly-framework-2.3.33.jar: 2.3.33] bei org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent (TCPNIOTransport.java: 539) ~ [grizzly-framework-2.3.33.jar: 2.3.33] bei org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent (AbstractIOStrategy.java:112) ~ [grizzly-framework-2.3.33.jar: 2.3.33] bei org.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.run0 (ExecutorPerServerAddressIOStrategy.java:119) ~ [mule-modul-http-3.9.0.jar: 3.9.0] um org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.access $ 100 (ExecutorPerServerAddressIOStrategy.java:31) ~ [mule-module-http-3.9.0.jar: 3.9.0] bei org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy $ WorkerThreadRunnable.run (ExecutorPerServerAddressIOStrategy.java: 142) ~ [mule-module-http-3.9.0.jar: 3.9.0] bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) [?: 1.8.0_111] bei java.util .concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) [?: 1.8.0_111] bei java.lang.Thread.run (Thread.java:745) [?: 1.8.0_111]

Antwort

0

1.Verwenden einem MEL-Expression in jedem Element der Content-Type-Header zu testen.

# [message.inboundProperties [ 'Content-Type'] enthält ('UTF-8') ]

2.Verwenden Sie das Element als Standardanweisung eines Schalters: Werfen Sie Ihre Ausnahme von dort.

zB:

<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

Vielen Dank für die Antwort, tatsächlich ist die Anfrage in meinem Fluss überhaupt nicht erhalten, diese Ausnahme in "DefaultHttpListener" beim Parsen der Anfrage, auch wenn ich parseRequest = false

0

In mule Kern, gibt es eine Klasse org.mule.transformer.types.SimpleDataType.java, die für diese Ausnahme verantwortlich ist. Die Methode setEncoding prüft die Gültigkeit des Zeichensatzes und für ungültigen Zeichensatz, Charset.forname Methode wirft UnsupportedCharsetException. Um dies zu vermeiden können Sie den Codeblock wie this- ändern

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; 
} 

Sie haben einen Standard-Zeichensatz setzen, sonst kann man nicht die Nutzlast aus der MuleMessage Instanz erhalten wie-

message.getPayloadAsString(); 

In meinem Fall Ich habe es 'UTF-8' eingestellt. Sie können es basierend auf Ihren Bedürfnissen einstellen.

Verwandte Themen