2013-01-08 10 views
0

저는 간단한 웹 서비스와 클라이언트를 개발하고 있습니다.null을 반환하거나 예외를 throw합니다.

인가

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

    } 
    return null; 

} 클라이언트로 null을 반환에 확인하고, 클라이언트는 널 (null) 처리를해야하거나 웹 서비스 돌봐이 더 잘 널 (null)을하고 예외를 throw : 서비스의 나의 조각을 참조하십시오 ?

업데이트 : null을 반환하는 대신 nullpointerexception을 반환하려면 어떻게해야합니까?

무엇을 권하고 싶습니까?

감사

+3

웹 인 경우 유효한 HTTP 응답 코드에 해당 오류 메시지가 있습니까? – David

+0

지금은 콘솔에서 테스트하고 있습니다 :) –

+0

가장 좋은 방법은 유효한 대답을 제공하는 것입니다. 어떤 종류의 예외가있는 경우 자체 서비스 예외 (오류)를 던져 클라이언트가 처리하도록하는 것이 좋습니다. 더 많은 정보 : [SOAP faults or results object?] (0120-13-0992) –

답변

1

JAX-WS 웹 서비스에서 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을 던지는 할 수있다, 그래서 나는 내 고객 적 (NullPointerException 포함)의 서브 클래스의 RuntimeException 또는 처리해야하는 가능성을 절약하려고 좋아 . 서비스가 RuntimeException을 던지고 클라이언트가 스택 추적을 출력하면 스택 추적은 개발자가 거의 제어 할 수없는 서버에서 실행되는 코드와 관련되기 때문에 클라이언트 측 개발자에게 혼동을줍니다. 이상적으로 클라이언트는 예상 응답 대신 null이 반환 된 사례 만 처리하면됩니다. null이 클라이언트에게 문제가 발생했거나 클라이언트가 제공 한 입력 문제로 인해 문제가 발생한 경우 클라이언트에게 알리기에는 충분하지 않은 경우에만 서버 측에 Exception을 던져야합니다.

0

NPE가 없어야합니다. 그렇게하면 서비스가 초기화되지 않았을 가능성이 높으므로 IllegalStateException을 던지거나 웹 서비스를 사용할 수 없다는 메시지를 클라이언트에 돌려 보내야합니다.

관련 문제