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 并引发异常是否更好?

更新:如何返回 nullpointerexception 而不是返回 null?

你会推荐什么?

谢谢

4

3 回答 3

1

您可以在 JAX-WS Web 服务中使用 SOAP 错误。这样,您可以在未找到先决条件时引发自定义异常。客户对发生的事情有了更好的了解。

为此,您需要一个带有@WebFault注释的异常。您可以在使用 Java JAX-WS Web 服务中的 SOAP 错误和异常 - Eben Hewitt on Java中找到一个很好的示例。

用户指南 » 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在进行远程调用并随后失败时抛出,所以我想尽量避免我的客户不得不处理RuntimeException或其任何子类(包括NullPointerException)的可能性。如果您的服务抛出 aRuntimeException并且客户端打印出堆栈跟踪,那么客户端开发人员会感到困惑,因为堆栈跟踪与在服务器上运行的代码有关,开发人员可能很少或根本无法控制。理想情况下,客户端应该只需要处理null返回而不是预期响应的情况。如果不足以告诉客户端出现问题或者问题源于客户端提供的输入的问题,则仅Exception在服务器端抛出一个。null

于 2013-01-08T22:18:50.460 回答