0

シンプルなWebサービスとクライアントを開発しています。私のサービススニペットを参照してください。

 @webService
 public Car carData(int id)  {
   try {
    return carDAO.getCars(id);
    } catch (NullPointerException e) {
        System.out.println("Error: "+e.getLocalizedMessage());

    }
    return  null;

}

nullをクライアントに返すことは問題ありません。その後、クライアントはnullを処理する必要がありますか、それともWebサービスがnullを処理して例外をスローする方がよいでしょうか。

更新:nullを返す代わりにnullpointerexceptionを返すにはどうすればよいですか?

あなたは何をお勧めします?

ありがとう

4

3 に答える 3

1

JAX-WSWebサービスでSOAP障害を使用できます。このようにして、前提条件が見つからない場合にカスタム例外をスローできます。クライアントは何が起こったのかについてより良い考えを持っています。

@WebFaultそのためには、アノテーション付きの例外が必要です。良い例は、JavaJAX-WSWebサービスでのSOAP障害と例外の使用-JavaでのEbenHewittにあります

ユーザーガイド»GlassFish»Metro»JAX-WSで、次の例を見つけることができます。

package fromjava.server;

import javax.jws.WebService;

@WebService
public class AddNumbersImpl {
    /**
     * @param number1
     * @param number2
     * @return The sum
     * @throws AddNumbersException if any of the numbers to be added is 
     * negative.
     */
    public int addNumbers(int number1, int number2) throws 
            AddNumbersException {
        if (number1 < 0 || number2 < 0) {
            throw new AddNumbersException("Negative number cant be " +
                    "added!", "Numbers: " + number1 + ", " + number2);
        }
        return number1 + number2;
    }
}

例外:

package fromjavahandler.server;

public class AddNumbersException extends Exception {

    String detail;

    public AddNumbersException(String message, String detail) {
        super(message);
        this.detail = detail;
    }

    public String getDetail() {
        return detail;
    }
}

JAX-WSランタイムは障害を自動的に生成します。

于 2013-01-08T22:28:20.437 に答える
0

NPEを取得するべきではありません。その場合、サービスが初期化されていない可能性があり、IllegalStateExceptionをスローするか、Webサービスが利用できないことを示すメッセージをクライアントに返信する必要があります。

于 2013-01-08T22:42:52.533 に答える
0

これについてはおそらく百万の異なる意見があるでしょうが、私が何をするかをお話しします。

通常、リモートサービスは、リモート呼び出しが行われ、その後失敗したときにすでにスローできるため、クライアントまたはそのサブクラス(を含む)IOExceptionを処理しなければならない可能性を回避するように努めています。サービスがをスローし、クライアントがスタックトレースを出力する場合、スタックトレースはサーバー上で実行されているコードに関係しているため、開発者はほとんどまたはまったく制御できない可能性があるため、クライアント側の開発者は混乱します。理想的には、クライアントは、期待される応答ではなく、返されたケースのみを処理する必要があります。何かがうまくいかなかったことをクライアントに伝えるのに十分でない場合、または問題がクライアントによって提供された入力の問題に起因する場合にのみ、サーバー側でをスローします。RuntimeExceptionNullPointerExceptionRuntimeExceptionnullExceptionnull

于 2013-01-08T22:18:50.460 に答える