2017-03-27 50 views
0

在第一個抱歉我的糟糕的英語。我有以下春天WS配置的一塊:如何將服務?wsdl轉發到service.wsdl在春天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的原因。

回答

0

可能的方案是延伸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; 
    } 
} 

}