Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBoot WS中的WSDL(点)与(问号)表示法_Java_Spring_Web Services_Spring Boot_Wsdl - Fatal编程技术网

Java SpringBoot WS中的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如下所示。从日志中

我正在使用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如下所示。从日志中我发现它正在使用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
    }
}