AXIS ตอนที่ 2 :: Create/Publish Service
posted on 01 Mar 2005 16:40 by somkiatAXIS ตอนที่ 2
การสร้างตัวอย่าง webservice และการ publish webservice
Testing Requirement
- Apache AXIS 1.1
- Tomcat 5.0/IBM WebSphere Application Server 4.0/5.1
ก่อนที่จะสร้าง Service นั้นเรามาดูเรื่องของการ publish service ขึ้น server เพื่อให้ใช้งานกันก่อนครับ โดย AXIS จะมีการ publish 2 แบบ คือ
1. JWS (Java Web Service) Files
2. Custom Deployment
แต่ในตอนนี้ผมจะใช้การ publish แบบที่สองครับ เนื่องจาก Service ที่จะสร้างขึ้นมามีการใช้ Data type ชนิด Complex type ด้วยครับเช่น JavaBean, Vector เป้นต้นครับ
การ publish แบบที่สอง นี้จะมี config file 1 ตัวคือ deploy.wsdd
Wsdd == WebService Deployment Descriptor
ตัวอย่าง deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="TestService" provider="java:RPC">
<parameter name="className" value="com.ws.Test"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:TestBean" xmlns:myNS="urn:BeanService"
languageSpecificType="java:com.ws.TestBean"/>
</service>
</deployment>
คำอธิบาย
1. ผมตั้งชื่อ Service นี้ว่า TestService
2. service class ที่ทำการสร้างส่วนของ service อยู่ใน file com.ws.Test.java โดยจะทุกๆ method ใน class นี้เป้น service ทั้งหมดครับ
3. ส่วนของ Bean mapping นี้ผมจะ service ที่ทำการ return ค่าออกมาเป็น JavaBean ครับ ซึ่งคือ file com.ws.TestBean.java
ว่าแล้วเรามาเริ่มสร้าง WebService ด้วย AXIS กันเลยครับ ผมจะไม่มี HelloWorld หรือ Calculator program แล้วนะครับ ผมจะสร้างตัวอย่างที่ใช้พวก Complex Type กันเลย
ขั้นตอนการสร้าง
1. สร้าง class สำหรับ implement Service method จากตัวอย่างจะอยู่ใน com.ws.Test.java ดังนี้ครับ
package com.ws;import java.util.Vector;public class Test {public Vector getDatas() { Vector datas = new Vector(); TestBean p = new TestBean(); p.setName("Test Data"); datas.add(p); return datas; } } |
package com.ws; public class TestBean { private String name; /** * @return */ public String getName() { return name; } /** * @param string */ public void setName(String string) { name = string; } } |
ทำการ compile code และนำ class ไปเก็บไว้ที่ %CATALINA_HOME%/webapps/axis/WEB-INF ด้วยนะครับ
แล้วก็ทำการ Start Tomcat Server ครับผม
2. หลังจากสร้าง Service เสร็จแล้วเราก็มาทำการ publish service ขึ้น server กันเลยครับ โดยจะต้องสร้าง deploy.wsdd ดังนี้
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="TestService" provider="java:RPC"> <parameter name="className" value="com.ws.Test"/> <parameter name="allowedMethods" value="*"/> <beanMapping qname="myNS:TestBean" xmlns:myNS="urn:BeanService" languageSpecificType="java:com.ws.TestBean"/> </service></deployment> |
และทำการ run command ดังนี้
% java org.apache.axis.client.AdminClient deploy.wsdd ผลลัพธ์ที่ถูกต้องคือ<Admin>Done processing</Admin> |
ในการ run java program นี้ผมใช้ tool ของ Eclipse/WebSphere ช่วยครับ ถ้าใครไม่มี tool เหล่านี้หรือ tool อื่นๆ จะต้อง set CLASSPATH ต่างๆ ที่จะใช้ให้ถูกต้องนะครับ เช่น
· axis-1_1/lib/axis.jar
· axis-1_1/lib/jaxrpc.jar
· axis-1_1/lib/saaj.jar
· axis-1_1/lib/commons-logging.jar
· axis-1_1/lib/commons-discovery.jar
· axis-1_1/lib/wsdl4j.jar
· A JAXP-1.1 compliant XML parser such as Xerces or Crimson. We recommend Xerces,
3. ทดสอบ service ว่า publish ขึ้น server แล้วหรือยัง
จากบทความก่อนหน้าผมอธิบายการติดตั้ง AXIS บน Tomcat ซึ่งจะอยู่ใน web context ชื่อว่า AXIS ซึ่งเราก็ start tomcat และเปิด browser ไปที่ http://localhost:8080/axis และไปที่ view hyperlink เพื่อดูว่า service ชื่อ TestService มีหรือไม่ ถ้ามีและมี method ต่างๆ แสดงว่าเราทำการ publish เสร็จเรียบร้อยแล้ว
จากหน้านี้เองเราสามารถที่จะ view/save wsdl file ได้ครับ ซึ่งจะนำไปใช้ในการสร้าง client application เพื่อใช้งาน service ที่เราสร้างขึ้นมา
4. มาลองสร้าง Client สำหรับเรียกใช้งาน Service กันโดยจะใช้ wsdj2java tool แต่ว่าผมไม่ใช้ครับผมจะใช้ Lomboz SOAP Client สำหรับการ generate java class จาก wsdl file ครับ
หลังจากที่เรา publish service ขึ้นไปบน server แล้วเราจะใช้งานโดย call service ดังกล่าวจะต้องใช้ wsdl filw ของ service นั้นๆ ครับ โดยผมจะ save wsdl ชือว่า testservice.wsdl
แล้วเราจะใช้งาน testservice.wsdl นี้อย่างไร
คำตอบก็คือเราสามารถทำได้ 2 แบบคือ
1. ใช้ java command เพื่อ run wsdl2java.exe ดังนี้
% java org.apache.axis.wsdl.WSDL2Java (WSDL-file-URL) |
อย่าลืมว่าจะต้อง set Classpath ของ Library ต่างๆ ให้ครบด้วยครับ
2. ใช้ Plug-in ในการgenerate class จาก wsdl จะง่ายกว่าหน่อยครับ ซึ่งในตัวอย่างนี้ผมใช้ Lomboz plug-in for Elipse
หลังจากที่ทำการ generate java class (Proxy class) จากข้อ 2 แล้วจะได้ file ต่างๆ เหล่านี้ครับ
- Test.java
- TestBean.java
- TestBean_Helper.java
- TestService.java
- TestServiceLocator.java
- TestServiceSoapBindingStub.java
แล้วลองมาลองเรียกใช้งานดูกันนะครับ
Test service = new TestServiceLocator().getTestService();
Vector datas = service.getDatas(); for(Iterator it = datas.iterator(); it.hasNext();) { TestBean value = (TestBean) it.next(); System.out.println(value.getName()); } |
ผลลัพทธ์ที่ได้
Test Data |
ลองทำตามผมดูนะครับ ถ้ามีปัญหาถามกันได้ครับ

#1 By nunu (203.113.67.39) on 2005-03-03 02:19