首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公开多个静态wsdl文件- Spring WS

公开多个静态wsdl文件- Spring WS
EN

Stack Overflow用户
提问于 2016-05-13 06:43:42
回答 1查看 2.1K关注 0票数 4

我正在尝试使用SpringWS和Spring Boot公开2个不同的端点,用于2个不同的静态WSDL。

我遇到的问题是声明了两个SimpleWsdl11Definition beans,但只公开了一个。

以下是我的配置文件:

代码语言:javascript
复制
@EnableWs
@Configuration
public class AWSConfig extends WsConfigurerAdapter 
{
    @Bean
    public ServletRegistrationBean aMessageDispatcherServlet(ApplicationContext applicationContext) 
    {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "Av1/*");
    }

    @Bean(name = "AV1")
    public SimpleWsdl11Definition simpleWsdl11Definition() 
    {
        SimpleWsdl11Definition simpleWsdl11Definition = new SimpleWsdl11Definition();
        simpleWsdl11Definition.setWsdl(new ClassPathResource("wsdl/AV1.wsdl"));
        return simpleWsdl11Definition;
    }

    @Bean(name = "ASchema")
    public XsdSchema aSchema() 
    {
        return new SimpleXsdSchema(new ClassPathResource("xsd/A.xsd"));
    }
}

代码语言:javascript
复制
@EnableWs
@Configuration
public class BWSConfig 
{
    @Bean
    public ServletRegistrationBean bMessageDispatcherServlet(ApplicationContext applicationContext) 
    {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "Bv1/*");
    }

    @Bean(name = "BV1")
    public SimpleWsdl11Definition simpleWsdl11Definition() 
    {
        SimpleWsdl11Definition simpleWsdl11Definition = new SimpleWsdl11Definition();
        simpleWsdl11Definition.setWsdl(wsdl/BV1.wsdl"));
        return simpleWsdl11Definition;
    }

    @Bean(name = "bSchema")
    public XsdSchema bSchema() 
    {
        return new SimpleXsdSchema(new ClassPathResource("xsd/BV1.xsd"));
    }
}

只有AV1.wsdl是可访问的。有人能告诉我我错过了什么吗..。

EN

回答 1

Stack Overflow用户

发布于 2017-12-10 19:40:02

下面的bean定义创建了一个带有被覆盖的getWsdlDefinition方法的命名MessageDispatcherServlet。如果满足url条件,原始代码中的此方法将从spring发起的WsdlDefinitions列表中选择要公开的wsdl。下面的覆盖使得选择正确的解决方案成为可能,而不是spring模糊的解决方案。手动将url与wsdl定义配对。

代码语言:javascript
复制
@Bean(name = "servlet-a")
    public ServletRegistrationBean messageDispatcherServletA(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
    public ServletRegistrationBean messageDispatcherServletA(
            ApplicationContext applicationContext,
            @Qualifier("A") final Wsdl11Definition a) {
               MessageDispatcherServlet servlet = new MessageDispatcherServlet(){           
               private static final long serialVersionUID = 8547901522243924975L;
               @Override
               protected WsdlDefinition getWsdlDefinition(HttpServletRequest request) {
                if (yourMethodCheckingForRightExposeUrl(request)) {
                    return a;
                }
                else {
                    return null;
                }
            }           
        };
        servlet.setApplicationContext(applicationContext);
        servlet.setMessageReceiverBeanName("yourSpecificReceiverBeanName");
        ServletRegistrationBean bean = new ServletRegistrationBean(servlet, "/ws/your-endpoint/*"); // star needed to allow any urls
        bean.setName("servlet-a");
        return bean;
    }
}

在您的示例中,WsdlDefininition参数可以具有限定名称'BV1‘。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37198636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档