简体   繁体   中英

returning null or throw exception

I'm developing a simple web service and client. See my snippet of service:

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

    }
    return  null;

}

Is is ok to returning null to client, and then the client should take care of null OR is it better that web service take care of null and throws exception?

UPDATE: How can I return nullpointerexception instead of returning null?

What would you recommend?

Thanks

You can use SOAP faults in JAX-WS Web Services. This way, you can throw a custom exception when the prerequisites are not found. The client has a better idea of what happened.

For that, you need an Exception with @WebFault annotation. You can find a good example in Using SOAP Faults and Exceptions in Java JAX-WS Web Services - Eben Hewitt on Java .

In the Users Guide » GlassFish » Metro » JAX-WS you can find this example:

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;
    }
}

The Exception:

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;
    }
}

The JAX-WS runtime generate the Fault automatically.

There's probably going to be a million different opinions on this, but I'll tell you what I'd do.

Typically remote services are already capable of throwing IOException when remote calls are made and subsequently fail, so I like to try to spare my clients the possibility of ever having to deal with RuntimeException or any of its subclasses (which includes NullPointerException ). If your service throws a RuntimeException and the client prints out the stack trace, it's confusing to the client-side developer because the stack trace pertains to code running on the server that the developer may have little or no control over. Ideally, the client should only have to handle cases where null was returned instead of the expected response. Only throw an Exception on the server side if null is not sufficient to tell the client that something went wrong or if the problem stems from an issue with the inputs supplied by the client.

You shouldn't be getting an NPE. if you do, it probably means your service isn't initialized and you should probably throw an IllegalStateException or reply with a message back to the client to say that the web service is unavailable

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM