Like Share Discussion Bookmark Smile

J.J. Huang   2019-04-18   Spring Boot   瀏覽次數:

SpringBoot - 第三十章 | WebService簡介及應用 (Client)

在上一章針對WebService做了簡單的介紹和Server的架設,SpringBoot - 第二十九章 | WebService簡介及應用 (Server) ,這邊將要繼續Clinet的建置和使用。

Spring-WS建立客戶端調用

加入pom的依賴

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<!-- 生產wsdl文件 -->
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
</dependency>

參數配置

在src/main/resources/application.properties中配置

1
server.port=8090

獲取author.wsdl

  • 取得方式:啟動WebService應用,瀏覽器輸入http://localhost:8080/ws/author.wsdl ,將會取得wsdl內容。

  • 將author.wsdl放於,路徑:/src/main/resources/schemas/author.wsdl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:sch="http://www.jj.com/webservice" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.jj.com/webservice" targetNamespace="http://www.jj.com/webservice">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.jj.com/webservice">
<!-- 定義請求實體 -->
<xs:element name="authorRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- 定義回應實體 -->
<xs:element name="authorResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="author" type="tns:author" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- 定義請求實體 -->
<xs:element name="authorListRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="nonce" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- 定義回應實體 -->
<xs:element name="authorListResponse">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1" name="author" type="tns:author" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- 定義作者 訊息 -->
<xs:complexType name="author">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<!-- 愛好列表形式nillable = true可為空,maxOccurs = unbouned無限 -->
<xs:element maxOccurs="unbounded" name="hobby" nillable="true" type="xs:string" />
<!-- 性别 枚舉類型 限定 -->
<xs:element name="sex" type="tns:sex" />
<!-- 生日 -->
<xs:element name="birthday" type="xs:string" />
<!-- 描述 -->
<xs:element name="description" type="xs:string" />
</xs:sequence>
</xs:complexType>
<!-- 枚舉類型 性别:男 女 -->
<xs:simpleType name="sex">
<xs:restriction base="xs:string">
<xs:enumeration value="male" />
<xs:enumeration value="female" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
</wsdl:types>
<wsdl:message name="authorListResponse">
<wsdl:part element="tns:authorListResponse" name="authorListResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="authorListRequest">
<wsdl:part element="tns:authorListRequest" name="authorListRequest">
</wsdl:part>
</wsdl:message>
<wsdl:message name="authorResponse">
<wsdl:part element="tns:authorResponse" name="authorResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="authorRequest">
<wsdl:part element="tns:authorRequest" name="authorRequest">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="AuthorPort">
<wsdl:operation name="authorList">
<wsdl:input message="tns:authorListRequest" name="authorListRequest">
</wsdl:input>
<wsdl:output message="tns:authorListResponse" name="authorListResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="author">
<wsdl:input message="tns:authorRequest" name="authorRequest">
</wsdl:input>
<wsdl:output message="tns:authorResponse" name="authorResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AuthorPortSoap11" type="tns:AuthorPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="authorList">
<soap:operation soapAction="" />
<wsdl:input name="authorListRequest">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="authorListResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="author">
<soap:operation soapAction="" />
<wsdl:input name="authorRequest">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="authorResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AuthorPortService">
<wsdl:port binding="tns:AuthorPortSoap11" name="AuthorPortSoap11">
<soap:address location="http://127.0.0.1:8080/ws" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Maven 產生 實體對象

在pom.xml裡面<build><plugins>中加入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.13.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>com.jj.webservice</generatePackage>
<generateDirectory>${basedir}/src/main/java</generateDirectory>
<schemas>
<schema>
<fileset>
<!-- Defaults to schemaDirectory. -->
<directory>${basedir}/src/main/resources/schemas</directory>
<!-- Defaults to schemaIncludes. -->
<includes>
<include>*.wsdl</include>
</includes>
</fileset>
</schema>
</schemas>
</configuration>
</plugin>

注意:請求的實體需要在包com.jj.webservice路徑下,不然檢驗不通過。參考的文章也有特別強調!而我在這邊試驗過了,他會因為預期參數不一致造成錯誤,至於詳細原因為什麼⋯我並沒有深入去研究,大家可以多試看看。

運行 Maven install

project -> 右鍵 -> Run as -> Macen install,產生如下圖

建立 WsAuthorClient (用於調用webservice)

建立 WsClientConfig

關於marshallerunmarshaller解析xml和讀取xml,請自行Google相關知識。

建立 DemoController

Postman 測試

http://127.0.0.1:8090/author/get?name=J.J.Huang

http://127.0.0.1:8090/author/list

恭喜到這邊就調用成功Webservice,我這邊皆屬用實作、使用的方式再做筆記,並沒有太多的深入研究,所以如有不足的部分,還請大家多多包涵。這邊大量複製了參考文章來做我的筆記,因為我對這個沒有非常的熟悉,希望透過這樣的一步一步,閱讀、實作,讓自己更精進

註:以上參考了
Baidu百科Web Service 文章。
維基百科Web服務 文章。
Spring Web Services Reference Documentation
oKongSpringBoot | 第三十三章:Spring web Servcies集成和使用文章。