Spring WS - Hướng dẫn nhanh
Spring Web Services (Spring-WS) là một trong những dự án được phát triển bởi Spring Community. Trọng tâm chính của nó là tạo ra các Dịch vụ Web hướng tài liệu. Dự án Dịch vụ Web Mùa xuân tạo điều kiện cho hợp đồng trước tiênSOAP Service Development, cung cấp nhiều cách để tạo các dịch vụ web linh hoạt, có thể thao tác với các tải trọng XML theo nhiều cách.
Các dịch vụ web Spring sử dụng các khái niệm Spring như chèn phụ thuộc và cấu hình một cách liền mạch. Spring-WS yêu cầu phiên bản Spring 3.0. Với sự phát triển dựa trên hợp đồng, chúng tôi bắt đầu vớiWSDL Contract và sau đó sẽ sử dụng JAVA để thực hiện hợp đồng được yêu cầu.
Trái ngược với cách tiếp cận hợp đồng cuối cùng trong đó các giao diện JAVA tạo ra hợp đồng WSDL / XSD. Hợp đồng dựa trên WSDL vẫn độc lập với việc thực hiện JAVA theo cách tiếp cận theo hợp đồng. Trong trường hợp chúng tôi yêu cầu thay đổi giao diện JAVA, thì không cần phải thông báo những thay đổi được thực hiện trong hợp đồng WSDL hiện tại cho người dùng dịch vụ web. Spring-WS nhằm mục đích cung cấp sự kết hợp lỏng lẻo giữa hợp đồng WSDL và việc triển khai dựa trên JAVA của nó.
Đặc trưng
Sau đây là các tính năng của Spring Web Services -
XML Mapping to Objects - Các yêu cầu dựa trên XML có thể được ánh xạ tới bất kỳ đối tượng nào bằng cách sử dụng thông tin được lưu trữ trong Tải trọng thông báo, Tiêu đề hành động SOAP hoặc bằng cách sử dụng Biểu thức XPath.
Multiple API Support to parse XML - Ngoài các API JAXP tiêu chuẩn (DOM, SAX, StAX) để phân tích cú pháp các yêu cầu XML đến, các thư viện khác như JDOM, dom4j, XOM cũng được hỗ trợ.
Multiple API Support to marshal XML- Spring Web Services hỗ trợ các thư viện JAXB 1 và 2, Castor, XMLBeans, JiBX và XStream bằng cách sử dụng mô-đun Ánh xạ đối tượng / XML của nó. Mô-đun Ánh xạ đối tượng / XML cũng có thể được sử dụng trong mã dịch vụ không phải web.
Spring based configurations - Spring Web Services sử dụng Spring Application Contexts cho các cấu hình của nó có kiến trúc tương tự như của Spring Web MVC.
Integrated WS-Security module - Sử dụng mô-đun WS-Security, bạn có thể Ký, Mã hóa, Giải mã Thông báo SOAP hoặc Xác thực chúng.
Support for Acegi Security - Sử dụng triển khai WS-Security của Dịch vụ Web Mùa xuân, cấu hình Acegi có thể được sử dụng cho các dịch vụ SOAP của bạn.
Ngành kiến trúc
Dự án Spring-WS bao gồm năm mô-đun chính, được giải thích bên dưới.
Spring-WS Core - Đây là mô-đun chính và cung cấp các Giao diện Trung tâm như WebServiceMessage và SoapMessage, khuôn khổ phía máy chủ, khả năng gửi thông điệp mạnh mẽ và hỗ trợ các lớp để triển khai các điểm cuối dịch vụ Web. Nó cũng cung cấp cho khách hàng tiêu dùng Dịch vụ Web nhưWebServiceTemplate.
Spring-WS Support - Mô-đun này cung cấp hỗ trợ cho JMS, email, v.v.
Spring-WS Security- Mô-đun này chịu trách nhiệm cung cấp triển khai WS-Security tích hợp với Mô-đun Dịch vụ Web cốt lõi. Sử dụng mô-đun này, chúng tôi có thể thêm mã thông báo chính, ký, mã hóa và giải mã các thông điệp SOAP. Mô-đun này cho phép sử dụng Triển khai bảo mật mùa xuân hiện có để xác thực và ủy quyền.
Spring XML- Mô-đun này cung cấp các lớp hỗ trợ XML cho Dịch vụ Web Mùa xuân. Mô-đun này được sử dụng nội bộ bởi Spring-WS framework.
Spring OXM - Mô-đun này cung cấp các lớp hỗ trợ cho Ánh xạ đối tượng và XML.
Trong Chương này, chúng ta sẽ hiểu quá trình thiết lập Spring-WS trên các hệ thống chạy Windows và Linux. Spring-WS có thể dễ dàng cài đặt và tích hợp với dòng điện của bạnJava environment và MAVENbằng cách làm theo một vài bước đơn giản mà không cần bất kỳ thủ tục thiết lập phức tạp nào. Quản trị người dùng được yêu cầu trong khi cài đặt.
yêu cầu hệ thống
Bảng sau liệt kê các yêu cầu hệ thống, trong khi các bước tiếp theo sẽ hướng dẫn chúng ta thực hiện quy trình thiết lập môi trường.
JDK | Java SE 2 JDK 1.5 trở lên |
Ký ức | RAM 1 GB (khuyến nghị) |
Dung lượng đĩa | Không có yêu cầu tối thiểu |
Phiên bản hệ điều hành | Windows XP trở lên, Linux |
Bây giờ chúng ta hãy tiến hành các bước cài đặt Spring-WS.
Bước 1: Xác minh cài đặt Java
Để bắt đầu, bạn cần cài đặt Bộ phát triển phần mềm Java (SDK) trên hệ thống của mình. Để xác minh điều này, hãy thực hiện bất kỳ lệnh nào trong hai lệnh sau tùy thuộc vào nền tảng bạn đang làm việc.
Nếu cài đặt Java đã được thực hiện đúng cách, thì nó sẽ hiển thị phiên bản hiện tại và đặc điểm kỹ thuật của cài đặt Java của bạn. Đầu ra mẫu được đưa ra trong bảng sau.
Nền tảng | Chỉ huy | Đầu ra mẫu |
---|---|---|
các cửa sổ | Mở bảng điều khiển lệnh và gõ - \> java -version |
Phiên bản Java "1.7.0_60" Môi trường thời gian chạy Java (TM) SE (bản dựng 1.7.0_60-b19) Java Hotspot (TM) Máy chủ 64-bit VM (bản dựng 24.60-b09, chế độ hỗn hợp) |
Linux | Mở đầu cuối lệnh và nhập - $ java -version |
phiên bản java "1.7.0_25" Mở môi trường thời gian chạy JDK (rhel-2.3.10.4.el6_4-x86_64) Mở JDK 64-Bit Server VM (bản dựng 23.7-b01, chế độ hỗn hợp) |
Chúng tôi giả định rằng người đọc của hướng dẫn này đã cài đặt Java SDK phiên bản 1.7.0_60 trên hệ thống của họ.
Trong trường hợp bạn không có Java SDK, hãy tải xuống phiên bản hiện tại của nó từ https://www.oracle.com/technetwork/java/javase/downloads/index.html và đã cài đặt nó.
Bước 2: Đặt Môi trường Java của bạn
Đặt biến môi trường JAVA_HOME để trỏ đến vị trí thư mục cơ sở nơi Java được cài đặt trên máy của bạn.
Không. | Nền tảng & Mô tả |
---|---|
1 | Windows Đặt JAVA_HOME thành C: \ ProgramFiles \ java \ jdk1.7.0_60 |
2 | Linux Xuất JAVA_HOME = / usr / local / java-current |
Nối đường dẫn đầy đủ của vị trí trình biên dịch Java vào Đường dẫn hệ thống.
Không. | Nền tảng & Mô tả |
---|---|
1 | Windows Nối chuỗi "C: \ Program Files \ Java \ jdk1.7.0_60 \ bin" vào cuối biến hệ thống PATH. |
2 | Linux Xuất PATH = $ PATH: $ JAVA_HOME / bin / |
Thực hiện lệnh java -version từ dấu nhắc lệnh như đã giải thích ở trên.
Bước 3: Tải xuống kho lưu trữ Maven
Tải xuống Maven 3.3.3 từ https://maven.apache.org/download.cgi
Hệ điều hành | Tên lưu trữ |
---|---|
các cửa sổ | apache-maven-3.3.3-bin.zip |
Linux | apache-maven-3.3.3-bin.tar.gz |
Mac | apache-maven-3.3.3-bin.tar.gz |
Bước 4: Giải nén kho lưu trữ Maven
Giải nén kho lưu trữ vào thư mục bạn muốn cài đặt Maven 3.3.3. Thư mục con apache-maven-3.3.3 sẽ được tạo từ kho lưu trữ.
Hệ điều hành | Vị trí (có thể khác tùy theo cài đặt của bạn) |
---|---|
các cửa sổ | C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3 |
Linux | / usr / local / apache-maven |
Mac | / usr / local / apache-maven |
Bước 5: Đặt các biến môi trường Maven
Thêm M2_HOME, M2 và MAVEN_OPTS vào các biến môi trường.
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | Đặt các biến môi trường bằng cách sử dụng thuộc tính hệ thống. M2_HOME = C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3 M2 =% M2_HOME% \ bin MAVEN_OPTS = -Xms256m -Xmx512m |
Linux | Mở đầu cuối lệnh và đặt các biến môi trường. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3 xuất M2 = $ M2_HOME / thùng xuất MAVEN_OPTS = -Xms256m -Xmx512m |
Mac | Mở đầu cuối lệnh và đặt các biến môi trường. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3 xuất M2 = $ M2_HOME / thùng xuất MAVEN_OPTS = -Xms256m -Xmx512m |
Bước 6: Thêm vị trí thư mục bin Maven vào đường dẫn hệ thống
Bây giờ thêm biến M2 vào Đường dẫn hệ thống.
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | Nối chuỗi;% M2% vào cuối biến hệ thống, Đường dẫn. |
Linux | xuất PATH = $ M2: $ PATH |
Mac | xuất PATH = $ M2: $ PATH |
Bước 7: Xác minh cài đặt Maven
Bây giờ mở bảng điều khiển, thực hiện như sau mvn chỉ huy.
Hệ điều hành | Bài tập | Chỉ huy |
---|---|---|
các cửa sổ | Mở bảng điều khiển lệnh | c: \> mvn --version |
Linux | Mở Command Terminal | $ mvn - phiên bản |
Mac | Mở thiết bị đầu cuối | máy: <joseph $ mvn --version |
Cuối cùng, xác minh kết quả đầu ra của các lệnh trên, sẽ giống như hình dưới đây:
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30) Trang chủ Maven: C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3 Phiên bản Java: 1.7.0_75, nhà cung cấp: Oracle Corporation Trang chủ Java: C: \ Program Files \ Java \ jdk1.7.0_75 \ jre Ngôn ngữ mặc định: en_US, mã hóa nền tảng: Cp1252 |
Linux | Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30) Trang chủ Maven: /usr/local/apache-maven/apache-maven-3.3.3 Phiên bản Java: 1.7.0_75, nhà cung cấp: Oracle Corporation Trang chủ Java: /usr/local/java-current/jdk1.7.0_75/jre |
Mac | Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30) Trang chủ Maven: /usr/local/apache-maven/apache-maven-3.3.3 Phiên bản Java: 1.7.0_75, nhà cung cấp: Oracle Corporation Trang chủ Java: /Library/Java/Home/jdk1.7.0_75/jre |
Bước 8: Thiết lập IDE Eclipse
Tất cả các ví dụ trong hướng dẫn này đã được viết bằng IDE Eclipse. Người đọc nên cài đặt phiên bản Eclipse mới nhất trên máy của họ. Để cài đặt IDE Eclipse, hãy tải xuống các tệp nhị phân Eclipse mới nhất từ liên kết sauhttps://www.eclipse.org/downloads/. Sau khi tải xuống bản cài đặt, hãy giải nén bản phân phối nhị phân vào một vị trí thuận tiện.
Ví dụ trong C:\eclipse trên cửa sổ, hoặc /usr/local/eclipsetrên Linux / Unix và cuối cùng đặt biến PATH một cách thích hợp. Eclipse có thể được khởi động bằng cách thực hiện các lệnh sau trên máy windows, hoặc bạn có thể chỉ cần nhấp đúp vào eclipse.exe.
%C:\eclipse\eclipse.exe
Eclipse có thể được khởi động bằng cách thực hiện các lệnh sau trên máy UNIX (Solaris, Linux, v.v.):
$/usr/local/eclipse/eclipse
Sau khi khởi động thành công, nếu mọi thứ đều ổn thì nó sẽ hiển thị màn hình sau:
Bước 9: Thiết lập Apache Tomcat
Chúng tôi có thể tải xuống phiên bản mới nhất của Tomcat từ https://tomcat.apache.org/. Sau khi tải xuống bản cài đặt, hãy giải nén bản phân phối nhị phân vào một vị trí thuận tiện. Ví dụ trongC:\apache-tomcat-7.0.59 trên máy windows, hoặc trong /usr/local/apache-tomcat-7.0.59 trên máy Linux / Unix và sau đó đặt CATALINA_HOME biến môi trường trỏ đến vị trí cài đặt.
Tomcat có thể được khởi động bằng cách thực hiện các lệnh sau trên máy windows hoặc bạn có thể chỉ cần nhấp đúp vào startup.bat
%CATALINA_HOME%\bin\startup.bat
or
C:\apache-tomcat-7.0.59\bin\startup.bat
Tomcat có thể được khởi động bằng cách thực hiện các lệnh sau trên máy UNIX (Solaris, Linux, v.v.) -
$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-7.0.59/bin/startup.sh
Sau khi khởi động thành công, các ứng dụng web mặc định đi kèm với Tomcat sẽ khả dụng bằng cách truy cập: http://localhost:8080/. Nếu mọi thứ đều ổn, thì nó sẽ hiển thị màn hình sau:
Thông tin thêm về cấu hình và chạy Tomcat có thể được tìm thấy trong tài liệu có ở đây, cũng như trên trang web Tomcat - https://tomcat.apache.org
Có thể dừng Tomcat bằng cách thực hiện các lệnh sau trên máy tính Windows:
%CATALINA_HOME%\bin\shutdown
or
C:\apache-tomcat-7.0.59\bin\shutdown
Có thể dừng Tomcat bằng cách thực hiện các lệnh sau trên máy UNIX (Solaris, Linux, v.v.):
$CATALINA_HOME/bin/shutdown.sh
or
/usr/local/apache-tomcat-7.0.59/bin/shutdown.sh
Khi chúng ta đã hoàn thành bước cuối cùng này, chúng ta đã sẵn sàng tiếp tục cho Ví dụ về dịch vụ web đầu tiên, mà chúng ta sẽ thảo luận trong chương tiếp theo.
Hãy để chúng tôi bắt đầu viết một dịch vụ web dựa trên SOAP thực tế với Spring-WS Framework. Trước khi bắt đầu viết ví dụ đầu tiên bằng cách sử dụng khuôn khổ Spring-WS, chúng ta phải đảm bảo rằng môi trường Spring-WS được thiết lập đúng như đã giải thích trong chương Thiết lập Môi trường - Dịch vụ Web Spring . Chúng tôi giả định rằng người đọc có một số kiến thức làm việc cơ bản với IDE Eclipse.
Do đó, chúng ta hãy tiến hành viết một Đơn xin việc Spring WS đơn giản sẽ đưa ra một phương pháp dịch vụ web để đăng ký nghỉ việc trong Cổng thông tin nhân sự.
Phương pháp tiếp cận theo hợp đồng đầu tiên
Spring-WS sử dụng phương pháp dựa trên Hợp đồng, có nghĩa là chúng ta nên có XML Structuressẵn sàng trước khi viết bất kỳ mã triển khai dựa trên JAVA nào. Chúng tôi đang xác định Đối tượng Rời khỏi yêu cầu, đối tượng này có các đối tượng phụ - Nghỉ việc và Nhân viên.
Sau đây là các cấu trúc XML bắt buộc:
Rời khỏi.xml
<Leave xmlns = "http://tutorialspoint.com/hr/schemas">
<StartDate>2016-07-03</StartDate>
<EndDate>2016-07-07</EndDate>
</Leave>
Employee.xml
<Employee xmlns = "http://tutorialspoint.com/hr/schemas">
<Number>404</Number>
<FirstName>Mahesh</FirstName>
<LastName>Parashar</LastName>
</Employee>
LeaveRequest.xml
<LeaveRequest xmlns = "http://tutorialspoint.com/hr/schemas">
<Leave>
<StartDate>2016-07-03</StartDate>
<EndDate>2016-07-07</EndDate>
</Leave>
<Employee>
<Number>404</Number>
<FirstName>Mahesh</FirstName>
<LastName>Parashar</LastName>
</Employee>
</LeaveRequest>
hr.xsd
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
xmlns:hr = "http://tutorialspoint.com/hr/schemas"
elementFormDefault = "qualified"
targetNamespace = "http://tutorialspoint.com/hr/schemas">
<xs:element name = "LeaveRequest">
<xs:complexType>
<xs:all>
<xs:element name = "Leave" type = "hr:LeaveType"/>
<xs:element name = "Employee" type = "hr:EmployeeType"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name = "LeaveType">
<xs:sequence>
<xs:element name = "StartDate" type = "xs:date"/>
<xs:element name = "EndDate" type = "xs:date"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name = "EmployeeType">
<xs:sequence>
<xs:element name = "Number" type = "xs:integer"/>
<xs:element name = "FirstName" type = "xs:string"/>
<xs:element name = "LastName" type = "xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Tạo dự án
Bây giờ chúng ta hãy mở một bảng điều khiển lệnh, truy cập thư mục C: \ MVN và thực hiện các thao tác sau mvn chỉ huy.
C:\MVN>mvn archetype:generate -DarchetypeGroupId = org.springframework.ws
-DarchetypeArtifactId = spring-ws-archetype -DgroupId = com.tutorialspoint.hr
-DartifactId = leaveService
Maven sẽ bắt đầu xử lý và sẽ tạo ra Cấu trúc Dự án Ứng dụng Java hoàn chỉnh.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] Using property: groupId = com.tutorialspoint.hr
[INFO] Using property: artifactId = leaveService
Define value for property 'version': 1.0-SNAPSHOT: :
[INFO] Using property: package = com.tutorialspoint.hr
Confirm properties configuration:
groupId: com.tutorialspoint.hr
artifactId: leaveService
version: 1.0-SNAPSHOT
package: com.tutorialspoint.hr
Y: :
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
spring-ws-archetype:2.0.0-M1
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: com.tutorialspoint.hr
[INFO] Parameter: packageName, Value: com.tutorialspoint.hr
[INFO] Parameter: package, Value: com.tutorialspoint.hr
[INFO] Parameter: artifactId, Value: leaveService
[INFO] Parameter: basedir, Value: C:\mvn
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\mvn\leaveService
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 35.989 s
[INFO] Finished at: 2017-01-21T11:18:31+05:30
[INFO] Final Memory: 17M/178M
[INFO] ------------------------------------------------------------------------
Bây giờ đi đến C:/MVNdanh mục. Chúng ta sẽ thấy một dự án ứng dụng java được tạo có tênleaveService(như được chỉ định trong ArtifactId). Cập nhật pom.xml và thêm HumanResourceService.java và HumanResourceServiceImpl.java vào thư mục sau - C: \ MVN \ leftService \ src \ main \ java \ com \ tutorialspoint \ hr \ service folder. Sau khi hoàn tất, hãy thêm LeaveEndpoint.java vào thư mục sau - thư mục C: \ MVN \ leftService \ src \ main \ java \ com \ tutorialspoint \ hr \ ws.
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint.hr</groupId>
<artifactId>leaveService</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>leaveService Spring-WS Application</name>
<url>http://www.springframework.org/spring-ws</url>
<build>
<finalName>leaveService</finalName>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
</project>
HumanResourceService.java
package com.tutorialspoint.hr.service;
import java.util.Date;
public interface HumanResourceService {
void bookLeave(Date startDate, Date endDate, String name);
}
HumanResourceServiceImpl.java
package com.tutorialspoint.hr.service;
import java.util.Date;
import org.springframework.stereotype.Service;
@Service
public class HumanResourceServiceImpl implements HumanResourceService {
public void bookLeave(Date startDate, Date endDate, String name) {
System.out.println("Booking holiday for [" + startDate + "-" + endDate + "]
for [" + name + "] ");
}
}
LeaveEndpoint.java
package com.tutorialspoint.hr.ws;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import com.tutorialspoint.hr.service.HumanResourceService;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.xpath.XPath;
@Endpoint
public class LeaveEndpoint {
private static final String NAMESPACE_URI = "http://tutorialspoint.com/hr/schemas";
private XPath startDateExpression;
private XPath endDateExpression;
private XPath nameExpression;
private HumanResourceService humanResourceService;
@Autowired
public LeaveEndpoint(HumanResourceService humanResourceService) throws JDOMException {
this.humanResourceService = humanResourceService;
Namespace namespace = Namespace.getNamespace("hr", NAMESPACE_URI);
startDateExpression = XPath.newInstance("//hr:StartDate");
startDateExpression.addNamespace(namespace);
endDateExpression = XPath.newInstance("//hr:EndDate");
endDateExpression.addNamespace(namespace);
nameExpression = XPath.newInstance("concat(//hr:FirstName,' ',//hr:LastName)");
nameExpression.addNamespace(namespace);
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "LeaveRequest")
public void handleLeaveRequest(@RequestPayload Element leaveRequest) throws Exception {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = dateFormat.parse(startDateExpression.valueOf(leaveRequest));
Date endDate = dateFormat.parse(endDateExpression.valueOf(leaveRequest));
String name = nameExpression.valueOf(leaveRequest);
humanResourceService.bookLeave(startDate, endDate, name);
}
}
/WEB-INF/spring-ws-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:sws = "http://www.springframework.org/schema/web-services"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/web-services
http://www.springframework.org/schema/web-services/web-services-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.tutorialspoint.hr"/>
<bean id = "humanResourceService"
class = "com.tutorialspoint.hr.service.HumanResourceServiceImpl" />
<sws:annotation-driven/>
<sws:dynamic-wsdl id = "leave"
portTypeName = "HumanResource"
locationUri = "/leaveService/"
targetNamespace = "http://tutorialspoint.com/hr/definitions">
<sws:xsd location = "/WEB-INF/hr.xsd"/>
</sws:dynamic-wsdl>
</beans>
/WEB-INF/web.xml
<web-app xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version = "2.4">
<display-name>TutorialsPoint HR Leave Service</display-name>
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>
org.springframework.ws.transport.http.MessageDispatcherServlet
</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
/WEB-INF/hr.xsd
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
xmlns:hr = "http://tutorialspoint.com/hr/schemas"
elementFormDefault = "qualified"
targetNamespace = "http://tutorialspoint.com/hr/schemas">
<xs:element name = "LeaveRequest">
<xs:complexType>
<xs:all>
<xs:element name = "Leave" type = "hr:LeaveType"/>
<xs:element name = "Employee" type = "hr:EmployeeType"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name = "LeaveType">
<xs:sequence>
<xs:element name = "StartDate" type = "xs:date"/>
<xs:element name = "EndDate" type = "xs:date"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name = "EmployeeType">
<xs:sequence>
<xs:element name = "Number" type = "xs:integer"/>
<xs:element name = "FirstName" type = "xs:string"/>
<xs:element name = "LastName" type = "xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Xây dựng dự án
Bây giờ chúng ta hãy mở bảng điều khiển lệnh, truy cập thư mục C: \ MVN \ leftService và thực hiện như sau mvn chỉ huy.
C:\MVN\leaveService>mvn clean package
Maven sẽ bắt đầu xây dựng dự án.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building leaveService Spring-WS Application 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ leaveService ---
[INFO] Deleting C:\mvn\leaveService\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ leaveServi
ce ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ leaveService --
-
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b
uild is platform dependent!
[INFO] Compiling 3 source files to C:\mvn\leaveService\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ le
aveService ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\mvn\leaveService\src\test\resource
s
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ leaveSe
rvice ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ leaveService ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ leaveService ---
[INFO] Packaging webapp
[INFO] Assembling webapp [leaveService] in [C:\mvn\leaveService\target\leaveServ
ice]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\mvn\leaveService\src\main\webapp]
[INFO] Webapp assembled in [7159 msecs]
[INFO] Building war: C:\mvn\leaveService\target\leaveService.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.667 s
[INFO] Finished at: 2017-01-21T11:56:43+05:30
[INFO] Final Memory: 18M/173M
[INFO] ------------------------------------------------------------------------
Nhập dự án trong Eclipse
Làm theo các bước dưới đây để nhập dự án trong Eclipse.
Mở Eclipse.
Lựa chọn File → Import → Lựa chọn.
Chọn Tùy chọn Dự án Maven. Nhấp vào nút Tiếp theo.
Chọn Vị trí dự án, nơi leaveService project đã được tạo bằng Maven.
Nhấp vào nút Kết thúc.
Chạy dự án
Khi chúng ta đã hoàn tất việc tạo tệp nguồn và cấu hình, hãy xuất ứng dụng. Nhấp chuột phải vào ứng dụng, sử dụng tùy chọn Export → WAR File và lưu tệp leaveService.war trong thư mục webapps của Tomcat.
Khởi động máy chủ Tomcat và đảm bảo chúng tôi có thể truy cập các trang web khác từ thư mục ứng dụng web bằng trình duyệt chuẩn. Hãy thử truy cập vào URL - http: // localhost: 8080 / leftService / left.wsdl, nếu mọi thứ đều ổn với Ứng dụng Web Spring, chúng ta sẽ thấy màn hình sau.
Trong chương trước Spring -WS - First Application , chúng ta đã tạo WSDL tự động bằng cách sử dụng Spring WS Configuration. Trong trường hợp này, chúng tôi sẽ hiển thị cách hiển thị WSDL hiện có bằng Spring WS.
Bươc | Sự miêu tả |
---|---|
1 | Tạo một dự án với tên leaveService theo gói com.tutorialspoint như đã giải thích trong chương Spring WS - First Application. |
2 | Tạo một WSDL left.wsdl trong thư mục con / WEB-INF / wsdl. |
3 | Cập nhật spring-ws-servlet.xml trong thư mục con / WEB-INF. Chúng tôi đang sử dụng thẻ static-wsdl ở đây thay vì động-wsdl. |
4 | Bước cuối cùng là tạo nội dung của tất cả các tệp nguồn và cấu hình và xuất ứng dụng như được giải thích bên dưới. |
/WEB-INF/spring-ws-servlet.xml
<wsdl:definitions xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:schema = "http://tutorialspoint.com/hr/schemas"
xmlns:tns = "http://tutorialspoint.com/hr/definitions"
targetNamespace = "http://tutorialspoint.com/hr/definitions">
<wsdl:types>
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<xsd:import namespace = "http://tutorialspoint.com/hr/schemas"
schemaLocation = "hr.xsd"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name = "LeaveRequest">
<wsdl:part element = "schema:LeaveRequest" name = "LeaveRequest"/>
</wsdl:message>
<wsdl:portType name = "HumanResource">
<wsdl:operation name = "Leave">
<wsdl:input message = "tns:LeaveRequest" name = "LeaveRequest"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name = "HumanResourceBinding" type = "tns:HumanResource">
<soap:binding style = "document"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name = "Leave">
<soap:operation soapAction = "http://mycompany.com/RequestLeave"/>
<wsdl:input name = "LeaveRequest">
<soap:body use = "literal"/>
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name = "HumanResourceService">
<wsdl:port binding = "tns:HumanResourceBinding" name = "HumanResourcePort">
<soap:address location = "http://localhost:8080/leaveService/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
/WEB-INF/spring-ws-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:sws = "http://www.springframework.org/schema/web-services"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/web-services
http://www.springframework.org/schema/web-services/web-services-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.tutorialspoint.hr"/>
<sws:annotation-driven/>
<sws:static-wsdl id = "leave" location = "/WEB-INF/wsdl/leave.wsdl"/>
</beans>
Chạy dự án
Sau khi hoàn tất việc tạo tệp nguồn và tệp cấu hình, chúng ta nên xuất ứng dụng. Nhấp chuột phải vào ứng dụng, sử dụng tùy chọn Export → WAR File và lưu tệp leftService.war của bạn vào thư mục webapps của Tomcat.
Bây giờ, khởi động máy chủ Tomcat và đảm bảo rằng chúng ta có thể truy cập các trang web khác từ thư mục ứng dụng web bằng trình duyệt chuẩn. Hãy thử truy cập vào URL - http: // localhost: 8080 / leftService / left.wsdl, nếu mọi thứ đều ổn với Ứng dụng Web Spring, chúng ta sẽ thấy màn hình sau.
Trong chương này, chúng ta sẽ hiểu cách tạo một máy chủ ứng dụng web bằng Spring WS.
Bươc | Sự miêu tả |
---|---|
1 | Tạo một dự án với tên countryService theo gói com.tutorialspoint như được giải thích trong chương Spring WS - First Application. |
2 | Tạo các country.xsd, các lớp miền, CountryRepository và CountryEndPoint như được giải thích trong các bước sau. |
3 | Cập nhật spring-ws-servlet.xml trong thư mục con / WEB-INF. |
4 | Bước cuối cùng là tạo nội dung cho tất cả các tệp nguồn và cấu hình và xuất ứng dụng như được giải thích bên dưới. |
country.xsd
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
xmlns:tns = "http://tutorialspoint/schemas"
targetNamespace = "http://tutorialspoint/schemas"
elementFormDefault = "qualified">
<xs:element name = "getCountryRequest">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "getCountryResponse">
<xs:complexType>
<xs:sequence>
<xs:element name = "country" type = "tns:country"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name = "country">
<xs:sequence>
<xs:element name = "name" type = "xs:string"/>
<xs:element name = "population" type = "xs:int"/>
<xs:element name = "capital" type = "xs:string"/>
<xs:element name = "currency" type = "tns:currency"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name = "currency">
<xs:restriction base = "xs:string">
<xs:enumeration value = "GBP"/>
<xs:enumeration value = "USD"/>
<xs:enumeration value = "INR"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Tạo dự án
Hãy để chúng tôi mở bảng điều khiển lệnh, truy cập thư mục C: \ MVN và thực hiện như sau mvn chỉ huy.
C:\MVN>mvn archetype:generate -DarchetypeGroupId = org.springframework.ws
-DarchetypeArtifactId = spring-ws-archetype -DgroupId = com.tutorialspoint
-DartifactId = countryService
Maven sẽ bắt đầu xử lý và sẽ tạo ra Cấu trúc Dự án Ứng dụng Java hoàn chỉnh.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] Using property: groupId = com.tutorialspoint
[INFO] Using property: artifactId = countryService
Define value for property 'version': 1.0-SNAPSHOT: :
[INFO] Using property: package = com.tutorialspoint
Confirm properties configuration:
groupId: com.tutorialspoint
artifactId: countryService
version: 1.0-SNAPSHOT
package: com.tutorialspoint
Y: :
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
spring-ws-archetype:2.0.0-M1
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: com.tutorialspoint
[INFO] Parameter: packageName, Value: com.tutorialspoint
[INFO] Parameter: package, Value: com.tutorialspoint
[INFO] Parameter: artifactId, Value: countryService
[INFO] Parameter: basedir, Value: C:\mvn
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\mvn\countryService
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 35.989 s
[INFO] Finished at: 2017-01-21T11:18:31+05:30
[INFO] Final Memory: 17M/178M
[INFO] ------------------------------------------------------------------------
Bây giờ vào thư mục C: / MVN. Chúng ta sẽ thấy một dự án ứng dụng java được tạo có tên countryService (như được chỉ định trong ArtifactId). Cập nhật pom.xml.
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint.hr</groupId>
<artifactId>countryService</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>countryService Spring-WS Application</name>
<url>http://www.springframework.org/spring-ws</url>
<build>
<finalName>countryService</finalName>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
</project>
Tạo các lớp miền
Sao chép các country.xsd trong thư mục C: \ mvn \ countryService \ src \ main \ resources. Hãy để chúng tôi mở bảng điều khiển lệnh, truy cập thư mục C: \ mvn \ countryService \ src \ main \ resources và thực hiện như sauxjc lệnh để tạo các lớp miền bằng cách sử dụng country.xsd.
C:\MVN\countryService\src\main\resources>xjc -p com.tutorialspoint countries.xsd
Maven sẽ bắt đầu xử lý và sẽ tạo các lớp miền trong gói com.tutorialspoint.
parsing a schema...
compiling a schema...
com\tutorialspoint\Country.java
com\tutorialspoint\Currency.java
com\tutorialspoint\GetCountryRequest.java
com\tutorialspoint\GetCountryResponse.java
com\tutorialspoint\ObjectFactory.java
com\tutorialspoint\package-info.java
Tạo thư mục java trong C: \ mvn \ countryService \ src \ main folder. Sao chép tất cả các lớp trong thư mục C: \ mvn \ countryService \ src \ main \ java. Tạo CountryRepository và CountryEndPoint để đại diện cho cơ sở dữ liệu quốc gia và máy chủ quốc gia tương ứng.
CountryRepository.java
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.propertyeditors.CurrencyEditor;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
@Component
public class CountryRepository {
private static final List<Country> countries = new ArrayList<Country>();
public CountryRepository(){
initData();
}
public void initData() {
Country us = new Country();
us.setName("United States");
us.setCapital("Washington");
us.setCurrency(Currency.USD);
us.setPopulation(46704314);
countries.add(us);
Country india = new Country();
india.setName("India");
india.setCapital("New Delhi");
india.setCurrency(Currency.INR);
india.setPopulation(138186860);
countries.add(india);
Country uk = new Country();
uk.setName("United Kingdom");
uk.setCapital("London");
uk.setCurrency(Currency.GBP);
uk.setPopulation(63705000);
countries.add(uk);
}
public Country findCountry(String name) {
Assert.notNull(name);
Country result = null;
for (Country country : countries) {
if (name.trim().equals(country.getName())) {
result = country;
}
}
return result;
}
}
CountryEndPoint.java
package com.tutorialspoint.ws;
import org.jdom.JDOMException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import com.tutorialspoint.Country;
import com.tutorialspoint.CountryRepository;
import com.tutorialspoint.GetCountryRequest;
import com.tutorialspoint.GetCountryResponse;
@Endpoint
public class CountryEndPoint {
private static final String NAMESPACE_URI = "http://tutorialspoint/schemas";
private CountryRepository countryRepository;
@Autowired
public CountryEndPoint(CountryRepository countryRepository) throws JDOMException {
this.countryRepository = countryRepository;
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getCountryRequest")
@ResponsePayload
public GetCountryResponse getCountry(@RequestPayload GetCountryRequest request)
throws JDOMException {
Country country = countryRepository.findCountry(request.getName());
GetCountryResponse response = new GetCountryResponse();
response.setCountry(country);
return response;
}
}
/WEB-INF/spring-ws-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:sws = "http://www.springframework.org/schema/web-services"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/web-services
http://www.springframework.org/schema/web-services/web-services-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.tutorialspoint"/>
<sws:annotation-driven/>
<sws:dynamic-wsdl id="countries"
portTypeName = "CountriesPort"
locationUri = "/countryService/"
targetNamespace = "http://tutorialspoint.com/definitions">
<sws:xsd location = "/WEB-INF/countries.xsd"/>
</sws:dynamic-wsdl>
</beans>
/WEB-INF/web.xml
<web-app xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version = "2.4">
<display-name>TutorialsPoint Country Service</display-name>
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet
</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Xây dựng dự án
Hãy để chúng tôi mở bảng điều khiển lệnh. Truy cập thư mục C: \ MVN \ countryService và thực hiện như saumvn chỉ huy.
C:\MVN\countryService>mvn clean package
Maven sẽ bắt đầu xây dựng dự án.
INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building countryService Spring-WS Application 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ countryService ---
[INFO] Deleting C:\mvn\countryService\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ countrySer
vice ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ countryService
---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e.
build is platform dependent!
[INFO] Compiling 4 source files to C:\mvn\countryService\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ co
untryService ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\mvn\countryService\src\test\resour
ces
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ country
Service ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ countryService ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ countryService ---
[INFO] Packaging webapp
[INFO] Assembling webapp [countryService] in [C:\mvn\countryService\target\count
ryService]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\mvn\countryService\src\main\webapp]
[INFO] Webapp assembled in [5137 msecs]
[INFO] Building war: C:\mvn\countryService\target\countryService.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.484 s
[INFO] Finished at: 2017-01-28T09:07:59+05:30
[INFO] Final Memory: 19M/170M
[INFO] ------------------------------------------------------------------------
Chạy dự án
Khi chúng tôi đã tạo tệp nguồn và tệp cấu hình, hãy xuất tệp countryService.war trong thư mục ứng dụng web của Tomcat.
Bây giờ, khởi động máy chủ Tomcat và đảm bảo liệu chúng ta có thể truy cập các trang web khác từ thư mục ứng dụng web bằng trình duyệt chuẩn hay không. Thực hiện yêu cầu ĐĂNG tới URL - http: // localhost: 8080 / countryService / và bằng cách sử dụng bất kỳ ứng dụng khách SOAP nào, hãy thực hiện yêu cầu sau.
<x:Envelope xmlns:x = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns = "http://tutorialspoint/schemas">
<x:Header/>
<x:Body>
<tns:getCountryRequest>
<tns:name>United States</tns:name>
</tns:getCountryRequest>
</x:Body>
</x:Envelope>
Bạn sẽ thấy kết quả sau.
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:getCountryResponse xmlns:ns2 = "http://tutorialspoint/schemas">
<ns2:country>
<ns2:name>United States</ns2:name>
<ns2:population>46704314</ns2:population>
<ns2:capital>Washington</ns2:capital>
<ns2:currency>USD</ns2:currency>
</ns2:country>
</ns2:getCountryResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Trong chương này, chúng ta sẽ hiểu cách kiểm tra đơn vị một dịch vụ ứng dụng web được tạo bằng cách sử dụng Spring WS.
Bươc | Sự miêu tả |
---|---|
1 | Cập nhật dự án countryService được tạo trong chương Spring WS - Write Server. Thêm thư mục src / test / java. |
2 | Tạo CustomerEndPointTest.java trong thư mục - src / test / java / com / tutorialspoint / ws và sau đó cập nhật POM.xml như chi tiết bên dưới. |
3 | Thêm spring-context.xml trong thư mục con src / main / resources. |
4 | Bước cuối cùng là tạo nội dung cho tất cả các tệp nguồn và cấu hình và kiểm tra ứng dụng như được giải thích bên dưới. |
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint</groupId>
<artifactId>countryService</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>countryService Spring-WS Application</name>
<url>http://www.springframework.org/spring-ws</url>
<build>
<finalName>countryService</finalName>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-test</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
spring-context.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:sws = "http://www.springframework.org/schema/web-services"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/web-services
http://www.springframework.org/schema/web-services/web-services-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.tutorialspoint"/>
<sws:annotation-driven/>
<bean id = "schema" class = "org.springframework.core.io.ClassPathResource">
<constructor-arg index = "0" value = "countries.xsd" />
</bean>
</beans>
CustomerEndPointTest.java
package com.tutorialspoint.ws;
import javax.xml.transform.Source;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.ws.test.server.MockWebServiceClient;
import org.springframework.xml.transform.StringSource;
import static org.springframework.ws.test.server.RequestCreators.withPayload;
import static org.springframework.ws.test.server.ResponseMatchers.payload;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( locations = "/spring-context.xml" )
public class CustomerEndPointTest {
@Autowired
private ApplicationContext applicationContext;
private MockWebServiceClient mockClient;
@Before
public void createClient() {
mockClient = MockWebServiceClient.createClient(applicationContext);
GenericApplicationContext ctx = (GenericApplicationContext) applicationContext;
final XmlBeanDefinitionReader definitionReader = new XmlBeanDefinitionReader(ctx);
definitionReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
definitionReader.setNamespaceAware(true);
}
@Test
public void testCountryEndpoint() throws Exception {
Source requestPayload = new StringSource(
"<getCountryRequest xmlns = 'http://tutorialspoint/schemas'>"+
"<name>United States</name>"+
"</getCountryRequest>");
Source responsePayload = new StringSource(
"<getCountryResponse xmlns='http://tutorialspoint/schemas'>" +
"<country>" +
"<name>United States</name>"+
"<population>46704314</population>"+
"<capital>Washington</capital>"+
"<currency>USD</currency>"+
"</country>"+
"</getCountryResponse>");
mockClient.sendRequest(withPayload(requestPayload)).andExpect(payload(responsePayload));
}
}
Xây dựng dự án
Hãy để chúng tôi mở bảng điều khiển lệnh, đi đến thư mục C: \ MVN \ countryService và thực hiện lệnh mvn sau.
C:\MVN\countryService>mvn test
Maven sẽ bắt đầu xây dựng và thử nghiệm dự án.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building countryService Spring-WS Application 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ countrySer
vice ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ countryService
---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ co
untryService ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\countryService\src\test\resour
ces
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ country
Service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ countryService ---
[INFO] Surefire report directory: C:\MVN\countryService\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.tutorialspoint.ws.CustomerEndPointTest
Feb 27, 2017 11:49:30 AM org.springframework.test.context.TestContextManager ret
rieveTestExecutionListeners
INFO: @TestExecutionListeners is not present for class [class com.tutorialspoint
.ws.CustomerEndPointTest]: using defaults.
Feb 27, 2017 11:49:30 AM org.springframework.beans.factory.xml.XmlBeanDefinition
Reader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring-context.xml]
Feb 27, 2017 11:49:30 AM org.springframework.context.support.GenericApplicationC
ontext prepareRefresh
INFO: Refreshing org.springframework.context.support.GenericApplicationContext@b
2eddc0: startup date [Mon Feb 27 11:49:30 IST 2017]; root of context hierarchy
Feb 27, 2017 11:49:31 AM org.springframework.ws.soap.addressing.server.Annotatio
nActionEndpointMapping afterPropertiesSet
INFO: Supporting [WS-Addressing August 2004, WS-Addressing 1.0]
Feb 27, 2017 11:49:31 AM org.springframework.ws.soap.saaj.SaajSoapMessageFactory
afterPropertiesSet
INFO: Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.386 sec
Feb 27, 2017 11:49:31 AM org.springframework.context.support.GenericApplicationC
ontext doClose
INFO: Closing org.springframework.context.support.GenericApplicationContext@b2ed
dc0: startup date [Mon Feb 27 11:49:30 IST 2017]; root of context hierarchy
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.517 s
[INFO] Finished at: 2017-02-27T11:49:31+05:30
[INFO] Final Memory: 11M/109M
[INFO] ------------------------------------------------------------------------
Trong chương này, chúng ta sẽ học cách tạo một máy khách cho máy chủ ứng dụng web được tạo trong Spring WS - Máy chủ Viết bằng Spring WS.
Bươc | Sự miêu tả |
---|---|
1 | Cập nhật countryService của dự án theo gói com.tutorialspoint như được giải thích trong chương Spring WS - Máy chủ Viết. |
2 | Tạo CountryServiceClient.java trong gói com.tutorialspoint.client và MainApp.java trong gói com.tutorialspoint như được giải thích trong các bước sau. |
CountryServiceClient.java
package com.tutorialspoint.client;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import com.tutorialspoint.GetCountryRequest;
import com.tutorialspoint.GetCountryResponse;
public class CountryServiceClient extends WebServiceGatewaySupport {
public GetCountryResponse getCountryDetails(String country){
String uri = "http://localhost:8080/countryService/";
GetCountryRequest request = new GetCountryRequest();
request.setName(country);
GetCountryResponse response =(GetCountryResponse) getWebServiceTemplate()
.marshalSendAndReceive(uri, request);
return response;
}
}
MainApp.java
package com.tutorialspoint;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import com.tutorialspoint.client.CountryServiceClient;
public class MainApp {
public static void main(String[] args) {
CountryServiceClient client = new CountryServiceClient();
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.tutorialspoint");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
GetCountryResponse response = client.getCountryDetails("United States");
System.out.println("Country : " + response.getCountry().getName());
System.out.println("Capital : " + response.getCountry().getCapital());
System.out.println("Population : " + response.getCountry().getPopulation());
System.out.println("Currency : " + response.getCountry().getCurrency());
}
}
Khởi động Dịch vụ Web
Khởi động máy chủ Tomcat và đảm bảo rằng chúng tôi có thể truy cập các trang web khác từ thư mục ứng dụng web bằng trình duyệt chuẩn.
Kiểm tra ứng dụng khách dịch vụ web
Nhấp chuột phải vào MainApp.java trong ứng dụng của bạn trong Eclipse và sử dụng run as Java Applicationchỉ huy. Nếu mọi thứ đều ổn với ứng dụng, nó sẽ in thông báo sau.
Country : United States
Capital : Washington
Population : 46704314
Currency : USD
Tại đây, chúng tôi đã tạo một Khách hàng - CountryServiceClient.javacho dịch vụ web dựa trên SOAP. MainApp sử dụng CountryServiceClient để truy cập vào dịch vụ web, thực hiện yêu cầu đăng bài và lấy dữ liệu.
Trong chương này, chúng ta sẽ học cách kiểm tra đơn vị một máy khách được tạo trong Spring WS - Máy khách Viết cho máy chủ ứng dụng web được tạo trong chương Spring WS - Máy chủ viết bằng Spring WS.
Bươc | Sự miêu tả |
---|---|
1 | Cập nhật countryService của dự án theo gói com.tutorialspoint như được giải thích trong chương Spring WS - Máy chủ Viết. |
2 | Tạo CountryServiceClientTest.java trong gói com.tutorialspoint trong thư mục SRC → Kiểm tra → Java như được giải thích trong các bước dưới đây. |
CountryServiceClientTest.java
package com.tutorialspoint;
import static org.junit.Assert.*;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import com.tutorialspoint.client.CountryServiceClient;
public class CountryServiceClientTest {
CountryServiceClient client;
@Before
public void setUp() throws Exception {
client = new CountryServiceClient();
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.tutorialspoint");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
}
@Test
public void test() {
GetCountryResponse response = client.getCountryDetails("United States");
Country expectedCountry = new Country();
expectedCountry.setCapital("Washington");
Country actualCountry = response.getCountry();
Assert.assertEquals(expectedCountry.getCapital(), actualCountry.getCapital());
}
}
Khởi động Dịch vụ Web
Khởi động máy chủ Tomcat và đảm bảo chúng tôi có thể truy cập các trang web khác từ thư mục ứng dụng web bằng trình duyệt chuẩn.
Máy khách dịch vụ web kiểm tra đơn vị
Hãy để chúng tôi mở bảng điều khiển lệnh, đi đến thư mục C: \ MVN \ countryService và thực hiện lệnh mvn sau.
C:\MVN\countryService>mvn test
Maven sẽ bắt đầu xây dựng và thử nghiệm dự án.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building countryService Spring-WS Application 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ countrySer
vice ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ countryService
---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b
uild is platform dependent!
[INFO] Compiling 10 source files to C:\MVN\countryService\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ co
untryService ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\countryService\src\test\resour
ces
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ country
Service ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b
uild is platform dependent!
[INFO] Compiling 2 source files to C:\MVN\countryService\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ countryService ---
[INFO] Surefire report directory: C:\MVN\countryService\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.tutorialspoint.CountryServiceClientTest
Feb 27, 2017 8:45:26 PM org.springframework.ws.soap.saaj.SaajSoapMessageFactory
afterPropertiesSet
INFO: Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol
Feb 27, 2017 8:45:26 PM org.springframework.oxm.jaxb.Jaxb2Marshaller createJaxbC
ontextFromContextPath
INFO: Creating JAXBContext with context path [com.tutorialspoint]
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.457 sec
Running com.tutorialspoint.ws.CustomerEndPointTest
Feb 27, 2017 8:45:27 PM org.springframework.test.context.TestContextManager retr
ieveTestExecutionListeners
INFO: @TestExecutionListeners is not present for class [class com.tutorialspoint
.ws.CustomerEndPointTest]: using defaults.
Feb 27, 2017 8:45:27 PM org.springframework.beans.factory.xml.XmlBeanDefinitionR
eader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring-context.xml]
Feb 27, 2017 8:45:27 PM org.springframework.context.support.GenericApplicationCo
ntext prepareRefresh
INFO: Refreshing org.springframework.context.support.GenericApplicationContext@5
17c642: startup date [Mon Feb 27 20:45:27 IST 2017]; root of context hierarchy
Feb 27, 2017 8:45:28 PM org.springframework.ws.soap.addressing.server.Annotation
ActionEndpointMapping afterPropertiesSet
INFO: Supporting [WS-Addressing August 2004, WS-Addressing 1.0]
Feb 27, 2017 8:45:28 PM org.springframework.ws.soap.saaj.SaajSoapMessageFactory
afterPropertiesSet
INFO: Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.243 sec
Feb 27, 2017 8:45:28 PM org.springframework.context.support.GenericApplicationCo
ntext doClose
INFO: Closing org.springframework.context.support.GenericApplicationContext@517c
642: startup date [Mon Feb 27 20:45:27 IST 2017]; root of context hierarchy
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.686 s
[INFO] Finished at: 2017-02-27T20:45:28+05:30
[INFO] Final Memory: 17M/173M
[INFO] ------------------------------------------------------------------------