最近、Mule 2.2.1 から Mule 3.x に切り替えました
これの要点は、Mule 3 はスタックトレースを返さないが、Mule 2 は返すということです。Mule 2 の動作を再現するにはどうすればよいですか?
詳細:
一部の Web サービスは、ServiceException をスローする try-catch にラップされています。
@WebFault(name = "ServiceException")
public class ServiceException extends Exception {
private static final long serialVersionUID = 1L;
private Integer errorNumber;
public ServiceException(Exception e, User user) {
super(makeMessage(e));
LoggingDao.logException(this.getMessage(), e.toString());
this.setStackTrace(e.getStackTrace());
this.errorNumber = LoggingDao.getLogId();
} ... etc
LoggingDao はスタックトレースをログに記録しますが、Web サービスはそれを返しません。
途中で、DefaultComponentLifecycleAdapter.java にジャンプします。これは、スタックトレースをオーバーライドして返す MuleException をスローします。
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Component that caused exception is: org.mule.component.DefaultJavaComponent component for: SedaService{...}. Message payload is of type: Object[]</faultstring>
</soap:Fault>
Mule 3.x でスタックトレースを返すにはどうすればよいですか?
PS私はMule 3.0.1を使用していますが、これは上記のリンクと互換性がないようです。
からも: http://www.mulesoft.org/documentation/display/MULE3USER/Error+Handling
フロー exchange-pattern が request-response の場合、実行後に別のメッセージが呼び出し元に返されます。メッセージにはペイロードとして org.mule.transport.NullPayload があり、exceptionPayload 属性は次のように設定されています。
mule 2 から mule-config.xml は、exchange-pattern が「request-response」ではないという点で異なります。