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

Web services 禁用自动生成的JAX-WS状态页,web-services,tomcat,jax-ws,Web Services,Tomcat,Jax Ws,当我部署和运行使用JAX-WS开发的web服务时,我可以看到一个摘要页面,其中包含一些信息,如下图所示: 对于最终的实现,我们希望删除此页面,以便在仍然可以访问web服务端点的情况下返回自定义页面或空白页面 我们目前正在Tomcat上运行。类中有一个字段可能会执行您正在查找的操作:JAXWS\u RI\u属性\u发布状态\u页面(其值为com.sun.xml.ws.server.http.publishStatusPage) 查看JAX-WS下载的源代码,似乎需要将其设置为web.xml文件

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

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

我们目前正在Tomcat上运行。

类中有一个字段可能会执行您正在查找的操作:
JAXWS\u RI\u属性\u发布状态\u页面
(其值为
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
上的代码在javadoc中被标记为不推荐使用,因此上下文参数似乎是一种解决方法。

我两天来一直在尝试解决这个问题,Glassfish 3.1.2。
唯一的解决办法是拥有
-Dcom.sun.xml.ws.transport.http.HttpAdapter.publishStatusPage=false


我知道它很古老,但我想保持这种知识。希望这对任何人都有帮助。

我最近完成了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() {}
} 

+1正如我刚才尝试的那样,它成功了:它生成了一个空白页面而不是状态页面,但是访问服务或wsdl仍然可以正常工作。前面@bogdan的回答中也提到了这一点:
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() {}
}