翻译-使用Spring调用SOAP Web Service
原文链接: http://spring.io/guides/gs/consuming-web-service/
调用SOAP web service
本指南将指导你使用Spring调用一个基于SOAP的web service的整个过程。
指南内容
你将构建一个客户端,使用SOAP用来从远端的基于WSDL的web service获取天气数据。请访问http://wiki.cdyne.com/index.php/CDYNE_Weather进一步获取该天气服务的信息。
该服务根据邮编返回天气预测。你可以使用自己的邮编。
准备事项
大约15分钟
钟爱的编辑器或IDE
JDK1.6或更高版本
Gradle 1.11+ 或 Maven 3.0+
你也可以直接参阅该指南导入代码,或通过Spring工具集(Spring Tool Suite,简称STS)通过网页浏览代码,从而帮助你学习该章节内容。源码下载地址:https://github.com/spring-guides/gs-consuming-web-service.git。
如何完成该指南
如同大多数的示例教程一样,你可以从头开始并完成每个步骤,或者你也可以跳过已经熟悉的基础章节。无论怎样,最终你要得到可以工作的代码。
想从头开始,请移动到使用Gradle构建章节。
想跳过基础部分,请做以下事情:
下载并解压该向导的源代码,或者使用Git复制一份:
git clone https://github.com/spring-guides/gs-consuming-web-service.git
切换到
gs-consuming-web-service/initial
跳到基于WSDL生成领域对象章节。
当完成后,你可以使用gs-consuming-web-service/complete
目录中的代码检查你的结果。
使用Gradle构建
首先你要设置一个基本的build脚本。当构建Spring应用程序时,你可以使用任何构建系统,但是这里只包括了使用Maven和Gradle的代码。如果你两者都不熟悉,请访问使用Gradle构建Java项目或使用Maven构建Java项目。
创建目录结构
在你选择的存放项目的目录中,创建如下的子目录结构。例如,在*nix系统中使用mkdir -p src/main/java/hello
。
1 |
|
创建Gradle 构建文件
下面是一个初始的Gradle build文件。
1 |
|
Spring Boot gradle插件提供了很多便利的特性:
将classpath中的所有jar包构建单个可运行的jar包,从而更容易执行和传播服务。
搜索
public static void main()
方法并标记为可运行的类。提供了一个内置的依赖管理器,设置依赖版本以匹配Spring Boot依赖。你可以覆盖为任何你希望的版本,但默认会使用Boot选择的版本。
使用Maven构建
首先你需要设置一个基本的构建脚本。你可以使用任何构建系统来构建Spring应用程序,但这里包含了Maven的代码。如果你对Maven不熟,请访问使用Maven构建Java项目。
创建目录结构
在你选择的存放项目的目录中,创建如下的子目录结构。例如,在*nix系统中使用mkdir -p src/main/java/hello
。
1 |
|
1 |
|
注意:你可能注意到我们指定了maven-complier-plugin的版本。通常并不推荐这样做。这里主要是为了解决我们的CI系统默认运行在该插件的早期版本(java5之前)的一个问题。
Spring Boot Maven插件提供了很多便利的特性:
将classpath中的所有jar包构建单个可运行的jar包,从而更容易执行和传播服务。
搜索
public static void main()
方法并标记为可运行的类。提供了一个内置的依赖管理器,设置依赖版本以匹配Spring Boot依赖。你可以覆盖为任何你希望的版本,但默认会使用Boot选择的版本。
使用Spring工具集构建
如果你拥有Spring工具集,只需简单的直接导入该指南。
注意:如果你阅读过生成SOAP web service,你可能会疑惑为什么该指南没有使用spring-boot-starter-ws?这是因为Spring Boot Starter只用于服务器端程序。Starter提供了诸如嵌入式Tomcat等功能,而服务调用则不需要这些。
基于WSDL生成领域对象
SOAP web service的接口描述在WSDL文件中。JAXB提供了一个简单的方式来从WSDL(或者WSDL中包含在<Types/>
节点中的XSD)生成Java类。可以访问http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl获取该天气服务的WSDL。
你需要下列插件来使用maven从WSDL生成Java类:
1 |
|
该代码将通过指定的WSDL的URL生成类,并放置在hello.wsdl
包中。
你也可以使用下列代码在Gradle中完成同样的事:
1 |
|
由于gradle还没有jaxb插件,所以它调用了一个ant任务,代码看起来比maven稍显复杂。
在maven和gradle两个示例中,JAXB领域对象生成过程被包括在构建工具的生命周期中,所以无需额外步骤来运行。
创建天气服务客户端
创建一个web service客户端,你只需要扩展WebServiceGatewaySupport
类并编写操作代码:
1 |
|
该客户端包含了两个方法。getCityForecastByZip
用于实际的SOAP交换;printResponse
打印收到的响应结果。我们重点关注第一个方法。
在该方法中,GetCityForecastByZIP
及GetCityForecastByZIPResponse
类衍生于WSDL中,被前一个步骤描述过的JAXB生成。该方法创建了GetCityForecastByZIP
请求对象并设置了zipCode
参数。打印出邮编后,使用WebServiceGatewaySupport基类提供的WebServiceTemplate来进行实际的SOAP交换。它传入GetCityForecastByZIP
请求对象,以及一个SoapActionCallback
来传入SOAPAction头,因为WSDL说明其需要在<soap:operation/>
元素中使用该头。该方法将返回值转换为GetCityForecastByZIPResponse
对象,然后返回该对象。
配置web service组件
Spring WS使用了Spring框架的OXM模块。该模块拥有Jaxb2Marshaller
类来序列化和反序列化XML请求。
1 |
|
marshaller
被指向了生成的领域对象集合,将使用这些对象来实现XML和POJO之间的序列化和反序列化。
我们使用了上面显示的天气服务URI创建和配置了weatherClient
。他也被配置使用JAXB marshaller。
生成可执行的应用程序
该应用程序被打包后可运行与命令行,传入一个邮编则会得到一个天气预报。
1 |
|
main()
方法调用了SpringApplication
辅助方法,并向其run()
方法传入了WeatherConfiguration.class
参数。这会使Spring从WeatherConfiguration
中读取注解元数据,并作为Spring应用程序上下文中的一个组件进行管理。
注意:该应用程序硬编码了邮编94304,Palo Alto, CA。在该指南的最后,你可以看到如何添加不同的邮编而不用修改代码。
构建可执行的jar包
你可以创建一个包含所有必须的依赖,类,及资源的可执行的JAR文件。这很方便传输,版本管理以及独立于部署生命周期来部署服务,跨不同的环境,诸如此类。
1 |
|
然后你可以运行WAR文件:
1 |
|
如果你使用的是maven,你可以使用mvn spring-boot:run
来运行程序,或者你可以使用mvn clean package
构建JAR文件,并使用下面命令来运行:
1 |
|
注意:上面的产出物是一个可运行JAR文件。你也可以创建一个经典的WAR文件。
运行服务
如果使用的是Gradle,可以使用以下命令来运行服务:
1 |
|
注意:如果你使用的是Maven,可以使用以下命令来运行服务:
mvn clean package && java -jar target/gs-consuming-web-service-0.1.0.jar
。
你也可以通过Gradle直接运行该程序:
1 |
|
注意:使用mvn的话,命令是
mvn spring-boot:run
。
可以看到日志输出。该服务应该在几秒钟内启动并运行起来。
1 |
|
你也可以使用不同的邮编:java -jar build/libs/gs-consuming-web-service-0.1.0.jar 34769
1 |
|
总结
恭喜你!你开发了一个客户端来使用Spring调用一个基于SOAP的web service。
翻译-使用Spring调用SOAP Web Service的更多相关文章
- 使用CXF框架集成Spring实现SOAP Web Service
- 翻译-使用Spring WebService生成SOAP Web Service
原文链接:http://spring.io/guides/gs/producing-web-service/ 生成SOAP web service 该指南将带领你使用Spring创建一个基于SOAP的 ...
- [翻译]Spring MVC RESTFul Web Service CRUD 例子
Spring MVC RESTFul Web Service CRUD 例子 本文主要翻译自:http://memorynotfound.com/spring-mvc-restful-web-serv ...
- Spring Boot发布和调用RESTful web service
Spring Boot可以非常简单的发布和调用RESTful web service,下面参考官方指导体验一下 1.首先访问 http://start.spring.io/ 生成Spring Boot ...
- PHP soap Web Service 使用SoapDiscovery.class.php 生成wsdl文件
PHP soap web service 使用wsdl文件 demo: ============================================================== 服 ...
- 构建一个基于 Spring 的 RESTful Web Service
本文详细介绍了基于Spring创建一个“hello world” RESTful web service工程的步骤. 目标 构建一个service,接收如下HTTP GET请求: http://loc ...
- jboss上的soap web service开发示例
以下示例,由jboss quickstart示例代码得来: 一.创建一个常规的dynamic web项目,建议支持maven ,项目的关键属性参考下图: 二.定义服务接口及参数对象 HelloWorl ...
- SOAP web service用AFNetWorking实现请求
问: This is my current call to (asmx) SOAP web service: NSString *soapMessage = [NSString stringWithF ...
- 使用Apache CXF和Spring集成创建Web Service(zz)
使用Apache CXF和Spring集成创建Web Service 您的评价: 还行 收藏该经验 1.创建HelloWorld 接口类 查看源码 打印? 1 package ...
随机推荐
- OSG配置问题
BUILD_OSG_ARAPPERS: 这一项要选,不然后面编译自己的测试程序的时候,会报无法打开文件"osgIntrospectiond.lib"错误. Could not fi ...
- 急!JDBC问题,发生通信错误。错误位置:Reply.fill()。消息:数据不足。 ERRORCODE=-4499, SQLSTATE=08001
代码如下:Class.forName("com.ibm.db2.jcc.DB2Driver");Connection conn = DriverManager.getConnect ...
- vue2 上传图片
<template> <div class="vue-upload-img-multiple"> <div v-if="images.len ...
- Mac 系统下的环境变量
1.查看电脑环境变量 -->echo $PATH 2. 新建环境变量 sudo vim ~/.bash_profile 输入密码 3. 按 I ,编辑新的环境变量地址,保存 退出 :w ...
- Javascript重要知识点梳理
Javascript重要知识点梳理 一.Javascript流程控制 js中常用的数据类型 var关键字的使用 if – else if – else switch while for 二.Javas ...
- JS-firstChild,firstElementChild,lastChild,firstElementChild,nextSibling,nextElementSibling
<body> <ul id="ul1"> <li>11111</li> <li>22222</li> < ...
- bootstrap中table的colspan不起作用
bootstrap中table的colspan不起作用,即在不指定宽度的条件下,各个td宽度不符合colspan指定的宽度. 添加table0layout:fixed后显示正常. table{ tab ...
- css3 自定义动画(2)位置的移动
<style> /*涉及到位置的必须给元素进行相对或绝对定位*/ @-webkit-keyframes move{ %{top:0px;left:0px;} %{top:0px;left: ...
- 从程序员到CTO的Java技术路线图 作者:zz563143188
在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样我们清楚的知道我们大概处于那个阶段和水平. Java程序员 高级特性 反射.泛型. ...
- InnoDB配置文件复习
1.文件分类 1.参数文件 2.日志文件 3.socket文件 4.pid文件 5.MySQL表文件 6.存储引擎文件 1.参数文件 1.参数内容写在my.cnf中,每次MySQL实例启动时,载入my ...