Web services 如何在SpringWS中将服务?wsdl转发到service.wsdl
首先为我糟糕的英语道歉。我有以下Spring WS配置: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
@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;
}
}
}