就像标题所说的那样。
@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
}
无论如何我可以让方法按需返回特定的HTTP代码吗?我知道有些东西,比如身份验证,内部服务器错误等,会使WS方法返回500和auth错误,但我希望能够按照业务逻辑发送这些错误。
之前有人这样做过吗?已经使用jax-WS一段时间了,这是我第一次有这种需求,尝试搜索它并且无法在任何地方找到答案。
由于
答案 0 :(得分:10)
仅获取javax.servlet.http.HttpServletResponse
的当前实例并发送错误。
@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!";
}
}
另见List of HTTP status codes - Wikipedia, the free encyclopedia
答案 1 :(得分:2)
试试这个:
创建一个这样的SoapHandler:http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-server-side/实现接口:Handler.handleResponse();
然后,在处理程序内部,您可以随意修改http标头,因此您可以添加如下内容:http://download.java.net/jdk7/archive/b123/docs/api/javax/xml/ws/handler/MessageContext.html
您可以根据需要使用 HTTP_RESPONSE_CODE 。
其他资源:http://docs.oracle.com/cd/E14571_01/web.1111/e13735/handlers.htm
提示:将soaphandlers视为肥皂消息的拦截器