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>
<dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> </dependency>
|
參數配置
在src/main/resources/application.properties中配置
獲取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" /> <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> <directory>${basedir}/src/main/resources/schemas</directory> <includes> <include>*.wsdl</include> </includes> </fileset> </schema> </schemas> </configuration> </plugin>
|
注意:請求的實體需要在包com.jj.webservice路徑下,不然檢驗不通過。參考的文章也有特別強調!而我在這邊試驗過了,他會因為預期參數不一致造成錯誤,至於詳細原因為什麼⋯我並沒有深入去研究,大家可以多試看看。
運行 Maven install
project -> 右鍵 -> Run as -> Macen install,產生如下圖
建立 WsAuthorClient (用於調用webservice)
建立 WsClientConfig
關於marshaller
和unmarshaller
解析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
oKong 的 SpringBoot | 第三十三章:Spring web Servcies集成和使用文章。