5

就像标题所说的那样。

    @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 和身份验证错误,但我希望能够按照业务逻辑发送这些。

以前有人做过吗?使用 jax-WS 有一段时间了,这是我第一次有这种需求,尝试搜索它,但在任何地方都找不到答案。

谢谢

4

2 回答 2

12

仅获取当前实例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!";
    }

}

另请参阅HTTP 状态代码列表 - 维基百科,免费的百科全书

于 2013-10-10T16:29:07.677 回答
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/处理程序/MessageContext.html

您可以在哪里使用:HTTP_RESPONSE_CODE随心所欲。

其他资源:http ://docs.oracle.com/cd/E14571_01/web.1111/e13735/handlers.htm

提示:将soaphandler 视为soap 消息的拦截器

于 2013-10-10T16:13:01.747 回答