Web services 如何在SpringWS中将服务?wsdl转发到service.wsdl

Web services 如何在SpringWS中将服务?wsdl转发到service.wsdl,web-services,wsdl,spring-ws,Web Services,Wsdl,Spring Ws,首先为我糟糕的英语道歉。我有以下Spring WS配置: @Configuration class WSConfig { ... @Bean Wsdl11Definition wsdlSchema() { SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition(); wsdl11Definition.setWsdl(new ClassPathResour

首先为我糟糕的英语道歉。我有以下Spring WS配置:

@Configuration
class WSConfig {

    ...

    @Bean
    Wsdl11Definition wsdlSchema() {

        SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
        wsdl11Definition.setWsdl(new ClassPathResource("service.wsdl"));

        return wsdl11Definition;
    }
}
因此,我可以使用URL*/service.WSDL获取WSDL文件


是否可以添加URL转发*/service?wsdl-->*/service.wsdl因为某些WS客户端使用URL*/service?wsdl。

可能的解决方案是扩展MessageDispatcherServlet

class CustomMessageDispatcherServlet extends MessageDispatcherServlet {

private static final String WSDL_SUFFIX_NAME = ".wsdl";

private Map<String, WsdlDefinition> wsdlDefinitions;

CustomMessageDispatcherServlet(ApplicationContext applicationContext) {

    super();
    setApplicationContext(applicationContext);
    setTransformWsdlLocations(true);
    setTransformSchemaLocations(false);
}

@Override
protected void initStrategies(ApplicationContext context) {

    super.initStrategies(context);
    initWsdlDefinitions(context);
}

private void initWsdlDefinitions(ApplicationContext context) {

    wsdlDefinitions = BeanFactoryUtils
            .beansOfTypeIncludingAncestors(
                    context, WsdlDefinition.class, true, false);
}

// here with dealing with "wsdl" parameter in HTTP GET request
@Override
protected WsdlDefinition getWsdlDefinition(HttpServletRequest request) {

    if (HttpTransportConstants.METHOD_GET.equals(request.getMethod()) &&
            (request.getRequestURI().endsWith(WSDL_SUFFIX_NAME) || request.getParameter("wsdl") != null)) {

        String fileName = WebUtils.extractFilenameFromUrlPath(request.getRequestURI());
        return wsdlDefinitions.get(fileName);

    } else {
        return null;
    }
}
类CustomMessageDispatcherServlet扩展了MessageDispatcherServlet{
私有静态最终字符串WSDL_后缀_NAME=“.WSDL”;
私有地图定义;
CustomMessageDispatcherServlet(应用上下文应用上下文){
超级();
setApplicationContext(applicationContext);
setTransformWsdlLocations(true);
setTransformSchemaLocations(假);
}
@凌驾
受保护的策略(ApplicationContext上下文){
超级战略(背景);
initWsdlDefinitions(上下文);
}
私有void initWsdlDefinitions(ApplicationContext上下文){
wsdlDefinitions=BeanFactoryUtils
.beansoftypes包括祖先(
上下文,WsdlDefinition.class,true,false);
}
//这里介绍如何处理HTTP GET请求中的“wsdl”参数
@凌驾
受保护的WsdlDefinition getWsdlDefinition(HttpServletRequest请求){
if(HttpTransportConstants.METHOD_GET.equals(request.getMethod())&&
(request.getRequestURI().endsWith(WSDL_后缀_名称)| | request.getParameter(“WSDL”)!=null)){
字符串fileName=WebUtils.extractFilenameFromUrlPath(request.getRequestURI());
返回wsdlDefinitions.get(文件名);
}否则{
返回null;
}
}

}可能的解决方案是扩展MessageDispatcherServlet

class CustomMessageDispatcherServlet extends MessageDispatcherServlet {

private static final String WSDL_SUFFIX_NAME = ".wsdl";

private Map<String, WsdlDefinition> wsdlDefinitions;

CustomMessageDispatcherServlet(ApplicationContext applicationContext) {

    super();
    setApplicationContext(applicationContext);
    setTransformWsdlLocations(true);
    setTransformSchemaLocations(false);
}

@Override
protected void initStrategies(ApplicationContext context) {

    super.initStrategies(context);
    initWsdlDefinitions(context);
}

private void initWsdlDefinitions(ApplicationContext context) {

    wsdlDefinitions = BeanFactoryUtils
            .beansOfTypeIncludingAncestors(
                    context, WsdlDefinition.class, true, false);
}

// here with dealing with "wsdl" parameter in HTTP GET request
@Override
protected WsdlDefinition getWsdlDefinition(HttpServletRequest request) {

    if (HttpTransportConstants.METHOD_GET.equals(request.getMethod()) &&
            (request.getRequestURI().endsWith(WSDL_SUFFIX_NAME) || request.getParameter("wsdl") != null)) {

        String fileName = WebUtils.extractFilenameFromUrlPath(request.getRequestURI());
        return wsdlDefinitions.get(fileName);

    } else {
        return null;
    }
}
类CustomMessageDispatcherServlet扩展了MessageDispatcherServlet{
私有静态最终字符串WSDL_后缀_NAME=“.WSDL”;
私有地图定义;
CustomMessageDispatcherServlet(应用上下文应用上下文){
超级();
setApplicationContext(applicationContext);
setTransformWsdlLocations(true);
setTransformSchemaLocations(假);
}
@凌驾
受保护的策略(ApplicationContext上下文){
超级战略(背景);
initWsdlDefinitions(上下文);
}
私有void initWsdlDefinitions(ApplicationContext上下文){
wsdlDefinitions=BeanFactoryUtils
.beansoftypes包括祖先(
上下文,WsdlDefinition.class,true,false);
}
//这里介绍如何处理HTTP GET请求中的“wsdl”参数
@凌驾
受保护的WsdlDefinition getWsdlDefinition(HttpServletRequest请求){
if(HttpTransportConstants.METHOD_GET.equals(request.getMethod())&&
(request.getRequestURI().endsWith(WSDL_后缀_名称)| | request.getParameter(“WSDL”)!=null)){
字符串fileName=WebUtils.extractFilenameFromUrlPath(request.getRequestURI());
返回wsdlDefinitions.get(文件名);
}否则{
返回null;
}
}
}