春季启动项目中,调用遗留的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服务