[Seasar-user:18207] [S2Axis2] 例外処理について

松崎 学 [E-MAIL ADDRESS DELETED]
2009年 8月 6日 (木) 11:24:57 JST


松崎です。いつもお世話になっております。

S2Axis2での例外処理について質問させてください。
対応方法のアドバイスなどいただけると助かります。

Teedaで作成した既存のWebシステムがあり、
いくつかの画面を.NETで追加作成中です。
.NETとサーバ側の通信はS2Axis2を使ったWebサービスにしています。

やりたい事はサーバ側のチェックロジックで組み立てた
複数のエラーメッセージを.NET側でメッセージボックスに表示する事です。

Teeda開発時に作成済みの以下のメソッドがWebサービスで使えないので
困っています。
(facesContextがnullになるので。)

---------
public void putErrorMessage(String messageCode, Object[] args) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    FacesMessage facesMessage = FacesMessageUtil.getMessage(facesContext,
            LocaleHelper.getLocaleStatic(), FacesMessage.SEVERITY_ERROR,
            messageCode, args);
    facesContext.addMessage(null, facesMessage);
}
---------

既存の業務エラーチェックは、AppFacesExceptionをthrowして
1エラー毎に画面に表示するパターンと、
facesContext#addMessageして、複数のエラーメッセージをまとめて1回で
画面に表示するパターンがあります。

1エラー毎に画面に表示するパターンは
以下のようにAppFacesExceptionを修正したら、期待した動きに出来ています。

---------
public AppFacesException(String messageCode, Object[] args, Throwable cause) {
    super(cause);
    final FacesContext context = FacesContext.getCurrentInstance();
    if (context == null) {
        // Webサービス呼び出し時はFacesContext.getCurrentInstance()がnullを返す
        this.messageCode = messageCode;
        this.args = args;
        this.message = MacsMessageUtil.getMessage(messageCode, args);
    } else {
        final FacesMessage facesMessage = FacesMessageUtil.getMessage(
                context, LocaleHelper.getLocaleStatic(),
                FacesMessage.SEVERITY_ERROR, messageCode, args);
        String message = facesMessage.getDetail();
        if (message == null) {
            message = facesMessage.getSummary();
        }
        this.messageCode = messageCode;
        this.args = args;
        this.message = message;
        this.facesMessage = facesMessage;
    }
}
---------

現在、以下のバージョンを使用しています。
Tomcat 5.5.26
JDK 1.5.0_15
S2Container 2.4.32
Teeda 1.0.13-sp4
S2Dao 1.0.49
S2Axis2 0.5.0

以上、よろしくお願いいたします。

--
松崎 学 <[E-MAIL ADDRESS DELETED]>



Seasar-user メーリングリストの案内