使用Spring呼叫SOAP Web Service
阿新 • • 發佈:2019-01-29
你也可以直接參閱該指南匯入程式碼,或通過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
2
3
4
└── src
└── main
└── java
└── hello
建立Gradle 構建檔案
下面是一個初始的Gradle build檔案。
build.gradle
configurations {
jaxb
}
buildscript {
repositories {
maven { url "http://repo.spring.io/libs-release" }
mavenLocal()
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.6.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
repositories {
mavenLocal()
mavenCentral()
maven { url 'http://repo.spring.io/libs-release' }
}
// tag::wsdl[]
task genJaxb {
ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
ext.classesDir = "${buildDir}/classes/jaxb"
ext.schema = "http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl"
outputs.dir classesDir
doLast() {
project.ant {
taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
classpath: configurations.jaxb.asPath
mkdir(dir: sourcesDir)
mkdir(dir: classesDir)
xjc(destdir: sourcesDir, schema: schema,
package: "hello.wsdl") {
arg(value: "-wsdl")
produces(dir: sourcesDir, includes: "**/*.java")
}
javac(destdir: classesDir, source: 1.6, target: 1.6, debug: true,
debugLevel: "lines,vars,source",
classpath: configurations.jaxb.asPath) {
src(path: sourcesDir)
include(name: "**/*.java")
include(name: "*.java")
}
copy(todir: classesDir) {
fileset(dir: sourcesDir, erroronmissingdir: false) {
exclude(name: "**/*.java")
}
}
}
}
}
// end::wsdl[]
dependencies {
compile("org.springframework.boot:spring-boot-starter")
compile("org.springframework.ws:spring-ws-core")
compile(files(genJaxb.classesDir).builtBy(genJaxb))
jaxb "com.sun.xml.bind:jaxb-xjc:2.1.7"
}
jar {
from genJaxb.classesDir
}
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
task afterEclipseImport {
dependsOn genJaxb
}
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
2
3
4
└── src
└── main
└── java
└── hello
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-consuming-web-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.6.RELEASE</version>
</parent>
<properties>
<!-- use UTF-8 for everything -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::wsdl[] -->
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>hello.wsdl</generatePackage>
<forceRegenerate>true</forceRegenerate>
<schemas>
<schema>
<url>http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl</url>
</schema>
</schemas>
</configuration>
</plugin>
<!-- end::wsdl[] -->
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>http://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>http://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
注意:你可能注意到我們指定了maven-complier-plugin的版本。通常並不推薦這樣做。這裡主要是為了解決我們的CI系統預設執行在該外掛的早期版本(java5之前)的一個問題。
Spring Boot Maven外掛提供了很多便利的特性:
將classpath中的所有jar包構建單個可執行的jar包,從而更容易執行和傳播服務。