【问题标题】:Produce multiple SOAP web services in Spring在 Spring 中生成多个 SOAP Web 服务
【发布时间】:2017-06-26 13:26:57
【问题描述】:

这是一个关于如何在 Spring 中生成 SOAP Web 服务的好例子: https://spring.io/guides/gs/producing-web-service/

这个例子展示了如何获得一个端点和一个服务。如何使用多个服务和端点获得相同的结果?

【问题讨论】:

  • 一个模块创建多个模块(你需要的每个web服务的spring app)
  • 嗯,最后我需要很多端点,为每个服务创建一个模块似乎太多了。希望,有一个更简单的方法:)
  • 如何在没有配置文件的情况下达到同样的效果?我只在 java 中使用 Spring 标签。

标签: spring web-services soap


【解决方案1】:

好吧,看来这两个答案都是正确的。我使用 Mike Adamenkos 的答案和一些额外的标签来让它工作。

@Bean(name = "webservice2")
public DefaultWsdl11Definition defaultWsdl11Definition(@Qualifier("Name") XsdSchema webservice2Schema) {
    DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
    wsdl11Definition.setPortTypeName("webservice2Port");
    wsdl11Definition.setLocationUri("/ws");
    wsdl11Definition.setTargetNamespace("your namespace");
    wsdl11Definition.setSchema(webservice2Schema);
    return wsdl11Definition;
}

@Bean(name = "Name2")
public XsdSchema webservice2Schema() {
    return new SimpleXsdSchema(new ClassPathResource("webservice2.xsd"));
}

因此,您需要为XsdSchema 方法添加名称值,以便您可以在DefaultWsdl11Definition 中使用@Qualifier 标记获得正确的方法。希望这会有所帮助!

【讨论】:

  • 对我来说,它没有特定标签就可以工作......但你只谈论 wsdl 生成(这是 defaultWsdl11Definition 所做的)。这里我有一个 servlet 映射问题:拥有两个(或更多)WebServices 假设不同的映射。这意味着不同的 MessageDispatcherServlet....但是我不能让 Spring 部署多个 servlet,因为 MessageDispatcherServlet 都具有相同的名称。
【解决方案2】:

基于您的link 中的示例,您需要做的就是向WebServiceConfig 添加以下方法,例如:

@Bean(name = "webservice2")
public DefaultWsdl11Definition webservice2Wsdl11Definition(XsdSchema webservice2Schema) {
    DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
    wsdl11Definition.setPortTypeName("webservice2Port");
    wsdl11Definition.setLocationUri("/ws");
    wsdl11Definition.setTargetNamespace("your namespace");
    wsdl11Definition.setSchema(webservice2Schema);
    return wsdl11Definition;
}

@Bean(name="webservice2Schema")
public XsdSchema webservice2Schema() {
    return new SimpleXsdSchema(new ClassPathResource("webservice2.xsd"));
}

当然还有创造

@Endpoint
public class Webservice2Endpoint

您可以在一个模块中使用任意数量的网络服务。

【讨论】:

  • 这不起作用。不能定义相同类型的 bean。
  • 添加@Bean(name="webservice2Schema")。我已经更新了答案。
猜你喜欢
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多