返回null或抛出异常

时间:2013-01-08 22:08:23

标签: java exception null nullpointerexception return

我正在开发一个简单的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?

你会推荐什么?

谢谢

3 个答案:

答案 0 :(得分:1)

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

为此,您需要一个带有@WebFault注释的异常。你可以在Using SOAP Faults and Exceptions in Java JAX-WS Web Services - Eben Hewitt on Java中找到一个很好的例子。

Users Guide » 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运行时自动生成故障。

答案 1 :(得分:0)

对此可能会有一百万种不同的意见,但我会告诉你我会做些什么。

通常远程服务已经能够在进行远程调用时抛出IOException并随后失败,所以我想尽量让我的客户不必处理RuntimeException或任何它的子类(包括NullPointerException)。如果您的服务抛出RuntimeException并且客户端打印出堆栈跟踪,则会让客户端开发人员感到困惑,因为堆栈跟踪与服务器上运行的代码相关,开发人员可能很少或根本无法控制。理想情况下,客户端应该只需要处理返回null而不是预期响应的情况。如果Exception不足以告诉客户端出现问题或问题源于客户端提供的输入问题,则只在服务器端抛出null

答案 2 :(得分:0)

你不应该得到NPE。如果你这样做,这可能意味着你的服务没有被初始化,你应该抛出一个IllegalStateException或回复一条消息回到客户端说Web服务不可用