Java SpringBoot WS中的WSDL(点)与(问号)表示法
我正在使用SpringBoot2.0.1构建一个契约优先的web服务 我遵循了Spring boot示例- 这很有效 我的wsdl现在位于Java SpringBoot WS中的WSDL(点)与(问号)表示法,java,spring,web-services,spring-boot,wsdl,Java,Spring,Web Services,Spring Boot,Wsdl,我正在使用SpringBoot2.0.1构建一个契约优先的web服务 我遵循了Spring boot示例- 这很有效 我的wsdl现在位于 http://localhost:8080/ws/countries.wsdl 问题是,将成为此web服务使用者的应用程序需要将wsdl url编写为 http://localhost:8080/ws/countries?wsdl 根据post I集成过滤器 但是,URL重写并没有像预期的那样发生。我的urlrewrite.xml如下所示。从日志中
http://localhost:8080/ws/countries.wsdl
问题是,将成为此web服务使用者的应用程序需要将wsdl url编写为
http://localhost:8080/ws/countries?wsdl
根据post I集成过滤器
但是,URL重写并没有像预期的那样发生。我的urlrewrite.xml如下所示。从日志中我发现它正在使用xml文件,但没有进行url重写。我哪里做错了
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
<rule>
<from>/countries?wsdl</from>
<to>/countries.wsdl</to>
</rule>
</urlrewrite>
我找到了最好的解决方案。按如下所示编写您自己的筛选器。您可以使用HttpServletRequestWrapper来处理?wsdl扩展,并让服务器处理请求
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
@Component
public class WSDLQuestionMarkReplaceFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//put init logs
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
if ("wsdl".equalsIgnoreCase(httpRequest.getQueryString())) {
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(httpRequest) {
@Override
public String getQueryString() {
return null;
}
@Override
public String getRequestURI() {
return super.getRequestURI() + ".wsdl";
}
};
chain.doFilter(requestWrapper, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
//put destroy logs
}
}
我找到了最好的解决方案。按如下所示编写您自己的筛选器。您可以使用HttpServletRequestWrapper来处理?wsdl扩展,并让服务器处理请求
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
@Component
public class WSDLQuestionMarkReplaceFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//put init logs
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
if ("wsdl".equalsIgnoreCase(httpRequest.getQueryString())) {
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(httpRequest) {
@Override
public String getQueryString() {
return null;
}
@Override
public String getRequestURI() {
return super.getRequestURI() + ".wsdl";
}
};
chain.doFilter(requestWrapper, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
//put destroy logs
}
}