Web services 禁用自动生成的JAX-WS状态页
当我部署和运行使用JAX-WS开发的web服务时,我可以看到一个摘要页面,其中包含一些信息,如下图所示: 对于最终的实现,我们希望删除此页面,以便在仍然可以访问web服务端点的情况下返回自定义页面或空白页面 我们目前正在Tomcat上运行。类中有一个字段可能会执行您正在查找的操作: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文件
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() {}
}