2013-01-08 160 views
0

我正在开发一个简单的Web服务和客户端。见我服务的片段:返回null或抛出异常

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

    } 
    return null; 

}

是是确定返回null到客户端,然后在客户端应采取的空照顾还是更该Web服务照顾的空,抛出异常?

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

你会推荐什么?

感谢

+3

如果是网络,为什么不返回一个有效的HTTP响应代码与相应的错误消息? – David

+0

现在我只是在控制台中测试:) –

+0

最好的办法是给出一个有效的答案。如果有任何异常,最好抛出自己的服务异常(错误)并让客户端来处理它。更多信息:[SOAP故障或结果对象?](http://stackoverflow.com/q/2823100/1065197) –

回答

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

0

还有的可能会是这个一百万个不同的意见,但我会告诉你我会怎么做。

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

0

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