Just like the title says.
@WebService(
targetNamespace = "http://com.lalaland.TestWs",
portName = "TestWs",
serviceName = "TestWs")
public class TestWs implements TestWsInterface {
@EJB(name="validator")
private ValidatorLocal validator;
@WebMethod(operationName = "getStuff")
public List<StuffItem> getStuff(@WebParam(name = "aaa")String aaa,
@WebParam(name = "bbb")int bbb ) {
if ( ! validator.check1(...) )
return HTTP code 403 <------------ Here
if ( ! validator.check2(...) )
return HTTP code 404 <------------ Here
if ( ! validator.check3(...) )
return HTTP code 499 <------------ Here
return good list of Stuff Items
}
Is there anyway I can make a method return a specific HTTP code on demand? I know that some of the stuff, like authentication, internal server errors , etc make the the WS method return 500 and auth errors , but I would like to be able to send these in accordance with by business logic.
Anyone done this before? Been using jax-WS for some time and this was the first time I had this need, tried searching for it and couldn't find an answer anywhere.
Thanks
Only get the current instance of javax.servlet.http.HttpServletResponse
and sends the error.
@WebService
public class Test {
private static final Logger LOG = Logger.getLogger(Test.class.getName());
@Resource
private WebServiceContext context;
@WebMethod(operationName = "testCode")
public String testCode(@WebParam(name = "code") int code) {
if (code < 200 || code > 299) {
try {
MessageContext ctx = context.getMessageContext();
HttpServletResponse response = (HttpServletResponse)
ctx.get(MessageContext.SERVLET_RESPONSE);
response.sendError(code, code + " You want it!");
} catch (IOException e) {
LOG.severe("Never happens, or yes?");
}
}
return code + " Everything is fine!";
}
}
See also List of HTTP status codes - Wikipedia, the free encyclopedia