弹簧引导调用SOAP Web服务

  

春季启动项目中,调用遗留的SOAP Web服务,方法很简单,仅需引入spring-boot-starter-web-services。

  
 <代码> & lt; dependency>
  & lt; groupId> org.springframework.boot
  & lt; artifactId> spring-boot-starter-web-services
  & lt;/dependency>  
  

WebServiceTemplate

  

我们使用WebServiceTemplate来调用肥皂Service.WebServiceTemplate提供了三类调用方法sendSourceAndReceive, marshalSendAndReceive, sendAndReceive.sendSourceAndReceive方法直接发送和接收XML消息;marshalSendAndReceive方法发送、接收结果则为对象,由配置的编组器和自动转换,sendAndReceive支持更底层的操作。

  
 <代码>包org.iata.caims.service.ws;
  
  进口org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
  进口org.springframework.stereotype.Service;
  进口org.springframework.ws.client.core.WebServiceTemplate;
  
  进口javax.xml.transform.stream.StreamResult;
  进口javax.xml.transform.stream.StreamSource;
  进口java.io.StringReader;
  
  @ service
  公开课MyService {
  私有静态最终字符串DEFAULT_URI=" http://localhost: 8080/HelloService”;
  私有静态最终字符串消息=" & lt; ?xml version==\ \ 1.0 \”编码“utf - 8 \”?在“+
  “& lt; ns1: sayHello xmlns: ns1=\ " http://webservice.itrunner.org \“祝辞\ n”+
  “& lt; ns1: in0> COCO</ns1: in0> \ n”+
  “& lt;/ns1: sayHello>”;
  
  私人最终WebServiceTemplate WebServiceTemplate;
  
  公共MyService (WebServiceTemplateBuilder WebServiceTemplateBuilder) {
  这一点。webServiceTemplate=webServiceTemplateBuilder.setDefaultUri (DEFAULT_URI) .build ();
  }
  
  公共空间sendSourceAndReceive () {
  StreamSource源=new StreamSource(新StringReader(消息));
  StreamResult结果=new StreamResult (system . out);
  webServiceTemplate。sendSourceAndReceiveToResult(来源、结果);
  }
  
  公共对象marshalSendAndReceive (uri字符串、对象requestPayload) {
  this.webServiceTemplate返回。marshalSendAndReceive (uri, requestPayload);
  }
  } 
  

marshalSendAndReceive是常用的方法。您可以通过阅读wsdl文件来了Web服务解支持的方法和参数,也可以使用SoapUI工具生成请求,响应XML,然后手工编写SOAP域对象。更简单的方法是使用maven-jaxb2-plugin插件自动生成。

  

maven-jaxb2-plugin

  
 <代码> & lt; plugin>
  & lt; groupId> org.jvnet.jaxb2.maven2
  & lt; artifactId> maven-jaxb2-plugin
  & lt; version> 0.14.0
  & lt; executions>
  & lt; execution>
  & lt; goals>
  & lt; goal> generate
  & lt;/goals>
  & lt;/execution>
  & lt;/executions>
  & lt; configuration>
  & lt; generatePackage> org.itrunner.ws
  & lt; generateDirectory> $ {project.basedir}/src/main/java
  & lt; schemaDirectory> $ {project.basedir}/src/main/资源/wsdl
  & lt; schemaIncludes>
  & lt; include> * .wsdl
  & lt;/schemaIncludes>
  & lt;/configuration>
  & lt;/plugin>  
  

如上配置,将wsdl文件放入资源/wsdl文件夹,maven编译时将在指定包生成所有Web服务方法相关的存根类,其中包括package-info.java, ObjectFactory,请求,响应,并已配置好XML注解。
<强> package-info.java

  
 <代码> @javax.xml.bind.annotation。XmlSchema(名称空间=" http://webservice.itrunner.org ", elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
  包org.iata.caims.service.test;  
  

<强> ObjectFactory

  
 <代码>进口javax.xml.bind.annotation.XmlRegistry;
  
  @XmlRegistry
  公开课ObjectFactory {/* *
  *创建一个新的ObjectFactory可以用来创建新的包模式派生类的实例:org.itrunner.ws
  */公共ObjectFactory () {
  }/* *
  *创建一个实例的{@link SayHello}
  */公共SayHello createSayHello () {
  返回新SayHello ();
  }/* *
  *创建一个实例的{@link SayHelloResponse}
  */公共SayHelloResponse createSayHelloResponse () {
  返回新SayHelloResponse ();
  }
  } 
  

<强>请求
请求类名对Web服务方应法名,属性对Web服务应参数。

  
 <代码>进口javax.xml.bind.annotation.XmlAccessType;
  进口javax.xml.bind.annotation.XmlAccessorType;
  进口javax.xml.bind.annotation.XmlElement;
  进口javax.xml.bind.annotation.XmlRootElement;
  进口javax.xml.bind.annotation.XmlType;
  
  @XmlAccessorType (XmlAccessType.FIELD)
  @XmlType (name=" ", propOrder={
  “in0”
  })
  @XmlRootElement (name=" sayHello ")
  公开课SayHello {
  
  @XmlElement (=true, nillable=true)
  保护字符串in0;/* *
  * in0属性的值。
  *
  * @return可能的对象是{@link字符串}
  */公共字符串getIn0 () {
  返回in0;
  }/* *
  *设置in0属性的值。
  *
  * @param值允许对象是{@link字符串}
  */公共空间setIn0(字符串值){
  这一点。in0=价值;
  }
  
  }

弹簧引导调用SOAP Web服务