禁用自动生成的JAX-WS状态页面

时间:2013-08-27 15:25:57

标签: web-services tomcat jax-ws

当我部署并运行使用JAX-WS开发的Web服务时,我可以看到一个包含一些信息的摘要页面,如下图所示:

<子> http://www.mkyong.com/webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat/ Web service status page

对于最终实现,我们希望删除此页面,以便在仍然可以访问Web服务端点时返回自定义页面或空白页面。

我们目前正在运行Tomcat。

3 个答案:

答案 0 :(得分:3)

WSServlet上的某个字段可能会显示您要查找的内容:JAXWS_RI_PROPERTY_PUBLISH_STATUS_PAGE(其值为com.sun.xml.ws.server.http.publishStatusPage)。

查看JAX-WS下载的源代码,您似乎需要将其设置为web.xml文件中的上下文参数:

<web-app>
  <context-param>
     <param-name>com.sun.xml.ws.server.http.publishStatusPage</param-name>
     <param-value>false</param-value>
  </context-param>
  ...

似乎HttpAdapter上有类似的东西,但是取自环境变量:

setPublishStatus(
    System.getProperty(HttpAdapter.class.getName() + ".publishStatusPage")
    .equals("true"));

HttpAdapter上的代码在javadoc中被标记为已弃用,因此上下文参数似乎已成为可能。

答案 1 :(得分:0)

我一直试图解决这个问题两天,Glassfish 3.1.2 唯一的解决方案是有     -Dcom.sun.xml.ws.transport.http.HttpAdapter.publishStatusPage=false
我知道它的旧,但想要保持知识。希望这可以帮助任何人解决这个问题。

答案 2 :(得分:0)

我最近已经完成了WebLogic的相同任务。 要求根据目标环境隐藏/显示公共Web服务的状态页,即为生产隐藏,为开发显示。 先前的答案对我没有任何帮助。 成功解决方案基于javax.servlet.Filter的实现。

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.HttpMethod;


@WebFilter(urlPatterns = { "/WeblogicWebService" })
public class FilterStatusSoapPage implements Filter {

     @Value("${soap.status.page.disabled}")
     private boolean flagDisablePublishStatusPage;

     public void doFilter(
            ServletRequest request, 
            ServletResponse response, 
            FilterChain chain) throws IOException, ServletException {
        try {
            HttpServletRequest httpReq = (HttpServletRequest) request;
            HttpServletResponse httpRes = (HttpServletResponse) response;
            String queryString = httpReq.getQueryString();
            if(flagDisablePublishStatusPage)
             if(queryString == null || queryString.trim().isEmpty())
                if(HttpMethod.GET.matches(httpReq.getMethod())) {
                    httpRes.setStatus(HttpServletResponse.SC_OK);
                    httpRes.getWriter().write("Access to status page of Web 
                                        Service is not allowed");
                    httpRes.getWriter().flush();
                    httpRes.getWriter().close();
                    return; 
                } 

        } catch (Exception e) {
            System.err.println("Error on FilterStatusSoapPage filter");
            chain.doFilter(request, response);
            return;
        }
        chain.doFilter(request, response);
    }
    public void init(FilterConfig fConfig) throws ServletException {}
    public void destroy() {}
}