chuong 3.pdf

28
Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội Chương 3 Phát triển Web Service với các công nghệ chuẩn của java Bài viết gồm 6 phần: I. Giới thiệu II. Tổng quan các công nghệ III. Các công nghệ nền tảng của Web Service IV. Các công nghệ của Java hỗ trợ Web Service V. Các công cụ để sử dụng các công nghệ của Java cho web VI. Mô hình lập trình I. Giới thiệu 1. Mục đích Giới thiệu và hướng dẫn sử dụng các công nghệ và công cụ chuẩn do Sun cung cấp để làm việc với Web Service. 2. Người đọc Yêu cầu có kiến thức cơ bản về tư duy lập trình và ngôn ngữ Java. 3. Tham khảo http://www.w3.org/2002/ws/ http://ws.apache.org/ http://java.sun.com/webservices/ II. Tổng quan các công nghệ

Upload: linh-linh-pham

Post on 19-Feb-2015

145 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

Chương 3 Phát triển Web Service với các công nghệ chuẩn của java

Bài viết gồm 6 phần:

I. Giới thiệu

II. Tổng quan các công nghệ

III. Các công nghệ nền tảng của Web Service

IV. Các công nghệ của Java hỗ trợ Web Service

V. Các công cụ để sử dụng các công nghệ của Java cho web

VI. Mô hình lập trình

I. Giới thiệu

1. Mục đích

Giới thiệu và hướng dẫn sử dụng các công nghệ và công cụ chuẩn do Sun cung cấp để làm

việc với Web Service.

2. Người đọc

Yêu cầu có kiến thức cơ bản về tư duy lập trình và ngôn ngữ Java.

3. Tham khảo

http://www.w3.org/2002/ws/

http://ws.apache.org/

http://java.sun.com/webservices/

II. Tổng quan các công nghệ

Page 2: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

Figure 1 Các công nghệ và công cụ WS

Figure 2 Kiến trúc hướng dịch vụ

III. Các công nghệ nền tảng của Web Service

1. XML (eXtensible Markup Language)

• Đã trở thành chuẩn cho việc mô tả dữ liệu được trao đổi trên nền web.

Page 3: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

• Là ngôn ngữ đánh dấu, sử dụng các thẻ (tag) để đánh dấu nội dung của văn bản và định

nghĩa cấu trúc của thông tin.

• Vd:

<element name="locateCustomer">

<complexType>

<sequence>

<element name="FirstName" type="xs:string"/>

<element name="LastName" type="xs:string"/>

<element name="Address" type="USAddress"/>

</sequence>

</complexType>

</element>

<element name="locateCustomerResponse">

<complexType>

<sequence>

<element name="CustomerRecord" type="CustomerRecord"/>

</sequence>

</complexType>

</element>

• Tài liệu XML phải tuân theo một cấu trúc chuẩn (Well-formed).

• Tài liệu XML thường được kết hợp với lược đồ XML (XML Schema) để quy định cú

pháp và cấu trúc các thẻ được sử dụng trong tài liệu XML.

• Do có các tính chất trên nên tài liệu XML có thể dễ dàng được xử lý bởi các ứng dụng và

XML là ngôn ngữ dữ liệu cho Web Service.

2. SOAP (Simple Object Access Protocol)

Page 4: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

Figure 3 Một SOAP Message

• Là giao thức cấp cao dựa vào XML để trao đổi thông tin trong các hệ thống phân tán.

• SOAP cung cấp một định dạng chung cho các dữ liệu được trao đổi giữa client và server.

• Đơn vị trao đổi thông tin cơ bản của SOAP là 1 SOAP message.

• SOAP Message chính là một SOAP Envelope trong đó chứa SOAP Body và có thể chứa

SOAP Header.

• SOAP Envelope xác định XML Namespace và loại encoding được sử dụng trong SOAP

message.

• SOAP header được sử dụng để cho các ứng dụng quyết định việc xử lý SOAP message

như thế nào.

• Vd:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:end="http://endpoint.helloservice/">

<soapenv:Body>

<end:getUserBean>

<!--Optional:-->

Page 5: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

<arg0>?</arg0>

</end:getUserBean>

</soapenv:Body>

</soapenv:Envelope>

3. WSDL (Web Service Definition Language)

• Client và server giao tiếp với nhau thông qua việc gửi các SOAP message. WSDL định

nghĩa ra nội dung và câu trúc của SOAP message đó.

• WSDL là tài liệu XML đùng để mô tả interface của Web service.

• Tài liệu WSDL định nghĩa một lược đồ XML cho việc mô tả web service.

• Vd:

<definitions targetNamespace="http://endpoint.helloservice/" name="HelloService"

xmlns:tns="http://endpoint.helloservice/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>

<xsd:schema>

<xsd:import namespace="http://endpoint.helloservice/"

schemaLocation="http://localhost:8080/hello/hello?xsd=1"/>

</xsd:schema>

</types>

<message name="sayHello">

<part element="tns:sayHello" name="parameters"/>

</message>

<message name="sayHelloResponse">

<part element="tns:sayHelloResponse" name="parameters"/>

</message>

<message name="getUserBean">

Page 6: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

<part element="tns:getUserBean" name="parameters"/>

</message>

<message name="getUserBeanResponse">

<part element="tns:getUserBeanResponse" name="parameters"/>

</message>

<message name="Exception">

<part element="tns:Exception" name="Exception"/>

</message>

<portType name="Hello">

<operation name="sayHello">

<input message="tns:sayHello"/>

<output message="tns:sayHelloResponse"/>

</operation>

<operation name="getUserBean">

<input message="tns:getUserBean"/>

<output message="tns:getUserBeanResponse"/>

<fault message="tns:Exception" name="Exception"/>

</operation>

</portType>

<binding type="tns:Hello" name="HelloPortBinding">

<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="sayHello">

<soap:operation soapAction=""/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

<operation name="getUserBean">

Page 7: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

<soap:operation soapAction=""/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

<fault name="Exception">

<soap:fault use="literal" name="Exception"/>

</fault>

</operation>

</binding>

<service name="HelloService">

<port binding="tns:HelloPortBinding" name="HelloPort">

<soap:address location="http://localhost:8080/hello/hello"/>

</port>

</service>

</definitions>

IV. Các công nghệ của Java hỗ trợ Web Service

1. JAXP (Java API for XML Processing)

• Là một tập hợp các API cho việc xử lý tài liệu XML

• Bao gồm các tập API con để xử lý tài liệu XML như DOM, SAX.

2. JAX-RPC (Java API for XML – Remote Produce Call)

• Tập hợp các API để cung cấp các service bằng XML-RPC.

• Cho phép Java gọi các phương thức của Web Service thông qua các hệ thống phân tán.

• Không giới hạn việc sử dụng nền Java cho cả client và server. Client sử dụng JAX-RPC

có thể gọi Web Service trên các nền tảng khác nhau. Client không dùng Java cũng có thể

gọi các Web Service sử dụng công nghệ Java với Jax-RPC.

• Được thiết kế để đơn giản việc sử dụng SOAP. Lập trình viên không cần phải làm công

việc xử lý trực tiếp với SOAP mà chỉ cần sử dụng ngôn ngữ Java và các tập API của Java.

Page 8: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

• Từ phiên bản WSDP 2.0. JAX-RPC được đặt tên lại thành JAX-WS.

3. JAXB (Java API for XML Data Binding)

• Cung cấp các phương thức để mapping tài liệu XML thành 1 tập hợp các đối tượng Java

và các Interface dựa trên lược đồ XML.

• Làm việc trực tiếp với XML thay vì phải xử lý nội dung XML.

• Công việc được thực hiện với 2 bước chính đó là:

o Sử dụng bộ binding compiler được cung cấp với JAXB để binding lược đồ XML thành

các đối class Java và các interface.

o Sử dụng các phương thức gắn kết dữ liệu XML với các class và interface được tạo ra.

4. SAAJ (SOAP with Attachment API for Java)

• Một tập hợp API tuân theo đặc tả SOAP with Attachment.

• Dùng để tạo ra SOAP message có hoặc không có đình kèm dữ liệu nhị phân.

5. XWS (XML and Web Service Sercurity)

• Cung cấp bảo mật cấp SOAP message cho các ứng dụng sử dụng JAX-RPC.

• Thông tin bảo mật được chứa trong SOAP header.

• Mục đích dùng để chống các sự truy cập trái phép khi message được gửi trên đường

truyền.

V. Các công cụ để sử dụng các công nghệ của Java cho web service.

1. APT

• Apt là công cụ cung cấp phương tiện cho việc xử lý các annotation được thêm vào trong

Java bởi JSR 175. JSR 175 cho phép lập trình viên khai báo những loại bổ nghĩa cấu trúc

mới để kết hợp với thành phần trường, phương thức, class.

• Ant task cho apt được cung cấp bởi JAX-WS

• Vd:

<apt

verbose="true|false"

Page 9: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

classpath="classpath"

destdir="directory for generated class files"

sourcedestdir="directory for generated source files"

nocompile="true|false"

print="true|false"

factorypath="<path>"

factory="name of AnnotationProcessorFactory to use"

xlistannotationtypes="true|false"

xlistdeclarations="true|false"

xprintaptrounds="true|false"

xprintfactoryinfo="true|false"

xclassesasdecls="true|false"

debug="true|false"

debuglevel="lines|vars|source"

nowarn="true|false"

Page 10: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

deprecation="true|false"

bootclasspath="<path>"

extdirs="<path>"

endorseddirs="<path>"

sourcepath="<path>"

encoding="specify character encoding used by source files"

target="generate class files for specific virtual machine version">

<option key="keyname" value="keyvalue"/>

<source ... > ... </source>

<classpath ... > ... </classpath>

</apt>

• Bảng các tuỳ chọn của công cụ apt

verbose: In ra thông báo

classpath: Đường dẫn đến các class và thư viện

destdir: Xác định nơi chứa các class được biên dịch

sourcedestdir: Xác định nơi chứa các file source java được tạo ra

nocompile: Không biên dịch các file source java

print: In ra máy in

debug: Tạo ra các thông tin debug

debuglevel: Cấp độ debug: lines, vars, sources

nowarn: Không tạo ra các cảnh báo

sourcepath: Xác định đường dẫn đến các file source java

Page 11: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

encoding: Xác định encoding được sử dụng cho các file source java

target: Tạo ra các file class ứng với một phiên bản nhất định

option: Các tuỳ chọn đối với bộ xử lý annotation

• Vd:

<apt destdir="src" sourcedestdir="src" sourcepath="src" classpathref="project.classpath">

<source dir="src">

<include name="**/*.java" />

</source>

</apt>

2. WSImport

• Công cụ để tự động tạo ra các file class và source java để làm việc với web service dựa

vào tài liệu wsdl.

• WSImport Ant task được cung cấp bởi JAX-WS.

• Bảng các tuỳ chọn của wsimport

wsdl WSDL file

destdir:Xác định đường dẫn chứa các file class được tạo ra

sourcedestdir:Xác định đường dẫn chứa các file source java được tạo ra

verbose: Hiện thông báo

binding: Xác định find dùng để binding dữ liệu

package: Xác định package

• Vd:

<target name="import-webservice">

<echo message="Import web service ..." />

<wsimport destdir="src" sourcedestdir="src"

wsdl="http://localhost:8080/hello/hello?wsdl">

</wsimport>

</target>

Page 12: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

Mình đã gửi file đính kèm ví dụ của bài viết ở trong bài đầu tiên.

----------------------------------------

-------------

http://javasimple.wordpress.com

Phần 6: Phát triển Web Service với các công nghệ chuẩn của java!

VI. Mô hình lập trình

Chúng ta sẽ xây dựng một ứng dụng web service nhỏ để thể hiện các công cụ và công

nghệ java cho web service. Ứng dụng này có một web service end point cung cấp hai

phương thức đơn giản String sayHello(String name) và UserBean getUserBean(String

userName).

1. Server

Figure 4 Cấu trúc cây thư mục

• Các bước cơ bản để tạo một ứng dụng web service phía server

o Viết các file java

Page 13: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

o Sử dụng công cụ apt để tạo ra các file class cho web service.

o Đóng gói các class và resourse thành ứng dụng web (file war).

o Triển khai ứng dụng.

• Yêu cầu phải có cài j2sdk 1.5.06 và có tất cả các thư viện trong bộ WSDP 2.0. Biên dịch

các file java ở chế độ tương thích với phiên bản java 1.5.

1.1. Viết các file Java

• Viết các java bean được dùng để lưu trữ dữ liệu được truyền giữa client và server.

Document.java

package helloservice.endpoint;

import java.util.Date;

public class Document {

private String name;

private Date createdDate;

public Date getCreatedDate() {

return createdDate;

}

public void setCreatedDate(Date createdDate) {

this.createdDate = createdDate;

}

public String getName() {

return name;

}

Page 14: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

public void setName(String name) {

this.name = name;

}

}

UserBean.java

package helloservice.endpoint;

public class UserBean {

private String username;

private String password;

private Document document;

public Document getDocument() {

return document;

}

public void setDocument(Document document) {

this.document = document;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

Page 15: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

}

• Viết file java thi hành web service

Hello.java

package helloservice.endpoint;

import java.util.Date;

import javax.jws.WebMethod;

import javax.jws.WebService;

@WebService()

public class Hello {

private String message = new String("Hello, ");

public void Hello() {

}

@WebMethod()

public String sayHello(String name) {

Page 16: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

return message + name;

}

@WebMethod()

public UserBean getUserBean(String username) throws Exception{

if(username.equals("cuonglm")) throw new Exception("User not found");

UserBean userBean=new UserBean();

Document doc=new Document();

doc.setName("My Doc");

doc.setCreatedDate(new Date());

userBean.setUsername(username);

userBean.setPassword("password");

userBean.setDocument(doc);

return userBean;

}

}

• Trong thấy trong file java thi hành web service có sử dụng các annotation.

o @WebService được sử dụng để đánh dấu một lớp Java là thi hành web service hoặc là

đánh dấu một interface định nghĩa web service interface.

o @WebMethod làm cho một phương thức trở thành một phương thức web service.

1.2. Sử dụng công công cụ apt để biên dịch

• Chúng ta phải đảm bảo các thư viện của WSDP đều có trong class path.

• Tạo file build.xml. Định nghĩa apt ant task:

Page 17: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

<taskdef classpathref="project.classpath" name="apt"

classname="com.sun.tools.ws.ant.Apt">

</taskdef>

• Sau đó tạo một target build:

<target name="build">

<echo message="${ant.project.name}: ${ant.file}" />

<javac destdir="src">

<src path="src" />

<classpath refid="project.classpath" />

</javac>

<apt destdir="src" sourcedestdir="src" sourcepath="src" classpathref="project.classpath">

<source dir="src">

<include name="**/*.java" />

</source>

</apt>

</target>

• Chúng ta sử dụng câu lệnh ant build để chạy file build.xml từ dòng lệnh hoặc có thể sử

dụng Eclipse để chạy file build.xml.

• Sau khi build xong chúng ta sẽ thấy apt tạo thêm một số file java cho web service.

1.3. Đóng gói thành ứng dụng web

Viết file cấu hình định nghĩa web service sun-jaxws.xml với nội dung sau

<?xml version="1.0" encoding="UTF-8"?>

<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>

<endpoint

name='HelloService'

Page 18: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

implementation='helloservice.endpoint.Hello'

url-pattern='/hello'/>

</endpoints>

• Thẻ endpoint dùng để định nghĩa một web service end point. Thuộc tính name xác định

tên của web service. Thuộc tính implementation xác định lớp thực thi web service. url-

pattern là đường dẫn tương đối của ứng dụng với ứng dụng web chúng ta triển khai web

service (http://localhost:8080/hello/hello).

• Viết file cấu hình web cho ứng dụng web: web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app

xmlns="http://java.sun.com/xml/ns/javaee"

version="2.5"

xmlns:xsi="http://www.w3.org/2001/XMLSchema"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name>HelloService</display-name>

<listener>

<listener-

class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>

</listener>

<servlet>

<display-name>HelloService</display-name>

<servlet-name>HelloService</servlet-name>

<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>HelloService</servlet-name>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

Page 19: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

<session-config>

<session-timeout>30</session-timeout>

</session-config>

</web-app>

• Tương ứng với mỗi web service được định nghĩa trong file sun-jaxws.xml chúng ta sẽ

định nghĩa một servlet trong file web.xml. Display name và servlet name có cùng tên với

web service, servlet class là mặc định. url-pattern tương ứng với url-pattern của web

service trong file sun.jaxws.xml.

• Tạo thêm một target create-war trong file build.xml để đóng gói ứng dụng thành ứng

dụng web.

<target name="create-war" description="Packages the WAR file" depends="build">

<echo message="Creating the WAR...." />

<delete file="hello.war" />

<war warfile="hello.war" webxml="webconfig/web.xml">

<webinf dir="webconfig" includes="*.xml" excludes="web.xml" />

<zipfileset dir="webconfig" includes="*.wsdl, *.xsd" prefix="/WEB-INF/wsdl" />

<lib dir="C:/libs/jaxb" />

<lib dir="C:/libs/jaxp/endorsed" />

<lib dir="C:/libs/jaxr" />

<lib dir="C:/libs/jaxws" />

<lib dir="C:/libs/jwsdp" />

<lib dir="C:/libs/saaj" />

<lib dir="C:/libs/sjsxp" />

<lib dir="C:/libs/xws" />

<classes dir="src" excludes="**/*.java" />

</war>

</target>

Page 20: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

• Build từ dòng lệnh với câu lệnh ant create-war hoặc build từ trong Eclipse.

• Chúng ta sẽ nhận được một file là hello.war.

1.4. Triển khai ứng dụng

• Copy file war vào web server tomcat 5.5 hoặc JBoss 4.03 sau đó gõ vào trình duyệt dòng

sau để kiểm tra: http://localhost:8080/hello/hello?wsdl

----------------------------------------

-------------

http://javasimple.wordpress.com

Một số đường dẫn đến các file thư viện trong bài ví dụ mình viết để đường dẫn tuyệt đối.

Các bạn khi download về thì phải sửa cho đúng với đường dẫn trên máy của bạn mới chạy

được.

----------------------------------------

-------------

http://javasimple.wordpress.com

2. Client

Page 21: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

Figure 5 Cấu trúc cây thư mục

• Định nghĩa wsimport ant task trong file build.xml

<taskdef classpathref="project.classpath" name="wsimport"

classname="com.sun.tools.ws.ant.WsImport">

</taskdef>

Tạo một target import-webservice:

<target name="import-webservice">

<echo message="Import web service ..." />

<wsimport destdir="src" sourcedestdir="src"

wsdl="http://localhost:8080/hello/hello?wsdl">

</wsimport>

</target>

• Sau khi chạy target import-webservice chúng ta sẽ nhận được các file java tương ứng để

làm việc với web service ở phía server.

• Viết một lớp Run để kiểm tra

Page 22: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

Run.java

package helloservice.endpoint;

import javax.xml.ws.WebServiceRef;

public class Run {

static HelloService helloService=new HelloService();

public static void main(String[] args) {

Run run=new Run();

run.doTest();

}

public void doTest() {

System.out.println(helloService);

Hello client=helloService.getHelloPort();

System.out.println(client.sayHello("Le Manh Cuong"));

UserBean userBean;

Document document;

try {

userBean=client.getUserBean("cuonglm");

} catch (Exception_Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

Page 23: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

userBean=client.getUserBean("linhpk");

document=userBean.getDocument();

System.out.println(userBean.getUsername());

System.out.println(userBean.getPassword());

System.out.println(document.getName());

System.out.println(document.getCreatedDate());

} catch (Exception_Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

I. Những thiết lập cần thiết cho dịch vụ web viết bằng Java

1. Danh sách các tập tin cần tải xuống

a) Apache Tomcat (phiên bản 5.0.30)

http://www.apache.org

b) Apache Axis (phiên bản 1.4)

http://xml.apache.org/axis/index.html

c) Xerces (version 2.6.2)

http://xml.apache.org/dist/xerces-j/

Chú ý: Đó là phiên bản mới nhất khi viết bài này, có thể có những bản mới hơn tại các địa

chỉ trên

2. Cài đặt Apache Tomcat

Chúng ta có thể tải tomcat có tên jakarta-tomcat-5.0.30.zip tại địa chỉ

http://www.apache.org. Rồi bạn có thể cài đặt hoặc giải nén nó. Tôi giả sử bạn đã cài đặt

hoặc giải nén Apache tomcat ở trong thư mục G:\WebService\tomcat và thư mục và thư

mục JDK là G:\WebService\j2sdk1.4.2_11

Page 24: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

3. Cấu hình biến môi trường

Bây giờ tất cả thư viện của Apache tomcat được cài đặt trên máy của bạn, bạn cần phải chỉ

cho Java biết vị trí của chúng. Điều này có thể thực hiện bằng cách thiết thông qua biến

môi trường CLASSPATH.

set JAVA_HOME=G:\WebService\j2sdk1.4.2_11

set CATALINA_HOME=G:\WebService\tomcat

set CATALINA_LIB=%CATALINA_HOME%\common\lib

set CLASSPATH=%CLASSPATH%;.;%CATALINA_LIB%\mail.jar;

%CATALINA_LIB%\activation.jar;%CATALINA_LIB%\servlet.jar

set PATH=%PATH%;%JAVA_HOME%\bin;%CATALINA_HOME%\bin

4. Điều kiện cần thiết để sử dụng Apache Axis

Tôi giả sử rằng bạn cài đặt Apache Axis vào thư mục G:\WebService\axis. Sau đó, bạn

phải thiết lập biến môi trường đến các thư viện Apache Axis

set AXIS_LIB=G:\WebService\axis\lib

set CLASSPATH=%CLASSPATH%;

%AXIS_LIB%\axis.jar;

%AXIS_LIB%\axis-ant.jar;

%AXIS_LIB%\commons-discovery.jar;

%AXIS_LIB%\commons-logging.jar;

%AXIS_LIB%\jaxrpc.jar;

%AXIS_LIB%\log4j-1.2.8.jar;

%AXIS_LIB%\saaj.jar;

%AXIS_LIB%\wsdl4j.jar

Sau khi thiết lập đầy đủ các thư viện cho Apache Axis, bạn cần tạo một đường dẫn ngữ

cảnh ứng dụng web đến thư mục G:\WebService\axis\webapps\axis hoặc chép thư mục

G:\WebService\axis\webapps\axis vào trong thư mục G:\WebService\tomcat\webapps.

Sau đó bạn khởi động máy chủ web bằng lệnh: startup.

Page 25: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

II. Tích hợp Java và .NET sử dịch vụ web

1. Viết dịch vụ web bằng Axis và .NET

Trong phần này, chúng ta sẽ tích hợp dịch vụ web viết bằng ngôn ngữ java sử dụng thư

viện Apache Axis với dịch vụ web viết bằng ngôn ngữ.NET.

Chúng ta sẽ viết 2 dịch vụ web bằng cách sử dụng thư viện Apache Axis và .NET. Sau đó

chúng ta sẽ viết 2 chương trình bằng ngôn ngữ Java và .NET để sử dụng các dịch vụ web

này. Dưới đây là mô hình minh họa ví dụ

Đầu tiên chúng ta sẽ viêt dịch vụ web bằng ngôn ngữ .NET

namespace CsharpService {

[WebService(Namespace="net")]

public class NetService : System.Web.Services.WebService {

[WebMethod]

public string getCSharpMessage() {

return "This is message from MS .NET";

}

}

}

Page 26: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

Tiếp theo là dịch vụ web bằng ngôn ngữ Java sử dụng thư viện Apache Axis

public class Axis {

public String getAxisMessage() throws Exception {

return "This is message from Apache Axis";

}

}

Đổi tên tập tin thành Axis.jws, Chép nó vào thư mục G:\WebService\tomcat\webapps\axis

and restart Apache Tomcat.

2. Tiếp đến chúng ta sẽ tạo các chương trình ở phía người dùng bằng ngôn ngữ Java và

.NET sử dụng các dịch vụ web trên

Trước khi chúng ta viết một ứng dụng .NET dùng các dịch vụ web này thì chúng ta phải

tạo WSDL để chương trình.NET có thể tham chiếu đến các dịch vụ web. Đối với dịch vụ

web viết bằng Apache Axis thì chúng ta sử dụng URL:

http://localhost:8080/axis/Axis.jws?wsdl để tham chiếu đến dịch vụ web Apache Axis

Và đây là mã nguồn của ứng dụng.NET sử dụng các dịch vụ web kể trên

using System;

namespace CsharpClient {

class Csharp {

public CSharp() {

//Call .NET Web Service

NetRef.NetService net = new NetRef.NetService();

Console.WriteLine(net.getCSharpMessage());

AxisRef.AxisService axis = new AxisRef.AxisService();

Console.WriteLine(axis.getAxisMessage());

Console.Read();

}

static void Main(string[] args) {

Page 27: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

CSharp cs = new CSharp();

}

}

}

Với NetRef, AxisRef là các tên tham chiếu đến dịch vụ web tương ứng với các dịch vụ

web viết bằng.NET và Apache Axis

Tiếp đến chúng ta sẽ viết ứng dụng Java sử dụng các dịch vụ web trên. Để gọi các dịch vụ

này, chúng ta phải tạo các proxy đến các dịch vụ web này.Lệnh dưới đây dùng để tạo một

proxy của java đến dịch vụ web của .NET

java org.apache.axis.wsdl.WSDL2Java

http://localhost/CSharpService/NetService.asmx?wsdl

Tiếp đến, chúng ta sẽ tạo proxy đến dịch vụ web viết bằng Apache Axis,tương tự như dịch

vụ web của .NET chúng ta chỉ cần thay thế URL của dịch vụ web viết bằng .NET bằng

dịch vụ viết bằng Apache Axis như sau:

java org.apache.axis.wsdl.WSDL2Java -p axis http://localhost:8080/axis/Axis.jws?wsdl

Sau khi chúng ta tạo các proxy java đến các dịch vụ web này chúng ta sẽ có các thư mục

chứa các lớp proxy đến các dịch vụ này có tên tương ứng là net và axis

Bây giờ chúng ta có thể viết chương trình bằng ngôn ngữ Java sử dụng các dịch vụ web

trên

import axis. *;

import net.*;

public class GetAllType {

public static void main(String [] args) throws Exception {

//Call MS .NET

NetServiceLocator netLocator = new NetServiceLocator();

NetServiceSoap net = netLocator.getNetServiceSoap();

System.out.println(net.getCSharpMessage());

//Call Apache Axis

AxisServiceLocator axisLocator = new AxisServiceLocator();

Page 28: Chuong 3.PDF

Giáo trình Java

Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội

localhost.axis.Axis_jws.Axis axis = axisLocator.getAxis();

System.out.println(axis.getAxisMessage());

}

}

III. Tài liệu tham khảo

http://www.google.com.vn

http://www.sun.com

http://www.apache.org

http://www.deitel.com

http://www.charlesrive.com