+44(0) 1234 567 890 info@domainname.com

2012-11-30

Hướng dẫn xây dựng Web Service sử dụng Axis2 trên Eclipse

10:42:00

Share it Please

Mục đích: trong hướng dẫn này chúng ta sẽ tạo một webservice cung cấp dịch vụ lấy kết quả xổ số. (Dữ liệu được lấy từ RSS của trang xskt.com.vn)

Bước 0: Cấu hình cài đặt Axis2 trên Eclipse
  • Tải gói Axis2-1.4 từ trang http://ws.apache.org/axis2/download/1_4/download.cgi
  • Tải gói phiên bản “Standard Binary Distribution”, giải nén và lưu nhớ vị trí đó
  • Mở Eclipse → Vào Windows → Mục Preferences ta sẽ được như hình sau:
  • Ta chọn Webservices → Chọn Axis2 Preferences
  • Chọn đường dẫn tới thư mục Axis2 mà chúng ta đã giải nén ở bước trên, chúng sẽ được một màn hình thông báo “Axis2 runtime loaded sucessfully” như sau:

  • Click chọn OK
Bước 1: Tạo một web project
  • Vào File → New → Projects... → Chọn Web → Chọn Dynamic Web Project
  • Tartget runtime ở đây ta chọn Apache Tomcat 7.0 (đã được cấu hình trước đó) 
  • Dynamic web module version ta chọn 2.5 để có thể sử dụng Axis2
  • Mục Configuation


  • Chọn OK và sau đó Finish để tiến hành tạo web project

Bước 2: Xây dựng Interface định nghĩa các phương thức mà chúng ta sẽ cung cấp dịch vụ web
  • Ta đặt tên Interface này là KetQuaXoSoInterface

package hcmute.kqsx;

import java.util.ArrayList;

public interface KetQuaXoSoInterface {
       /**
        * @return một ArrayList<String> chứa danh sách các miền
        */
       public ArrayList<String> getDanhSachMien();
       /**
        * @param tenMien: tên miền
        * @return một ArrayList<String> chứa danh sách các tỉnh theo miền đưa vào
        */
       public ArrayList<String> getDanhSachTinh(String tenMien);
       /**
        * @param tenMien:tên miền
        * @param tenTinh:tên tỉnh
        * @return một ArrayList<String> chứa danh sách ngày có kết quả xổ số
        */
       public ArrayList<String> getDanhSachNgay(String tenMien, String tenTinh);
       /**
        * @param tenMien:tên miền
        * @param tenTinh:tên tỉnh
        * @param ngayXoSo:ngày xổ số
        * @return ArrayList<String> chứa danh sách kết quả xổ số
        */
       public ArrayList<String> getDanhSachKetQua(String tenMien, String tenTinh, String ngayXoSo);
}


Bước 3: Tiến hành hiện thực Interface ta vừa tạo
  • Ta đặt tên lớp này là KetQuaXoSoModel
package hcmute.kqsx;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class KetQuaXoSoModel implements KetQuaXoSoInterface {

      String strPath = "http://localhost:8080/KetQuaXoSoServer/ketquasoxo.xml";
      Document dom;

      public KetQuaXoSoModel() {
             // strPath = "ketquaxoso.xml";
             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
             try {

                    // Using factory get an instance of document builder
                    DocumentBuilder db = dbf.newDocumentBuilder();

                    // parse using builder to get DOM representation of the XML file
                    dom = db.parse(strPath);

             } catch (ParserConfigurationException pce) {
                    pce.printStackTrace();
             } catch (SAXException se) {
                    se.printStackTrace();
             } catch (IOException ioe) {
                    ioe.printStackTrace();
             }
      }

      @Override
      public ArrayList<String> getDanhSachMien() {
             ArrayList<String> list = new ArrayList<String>();
             Element docEle = dom.getDocumentElement();

             NodeList nl = docEle.getElementsByTagName("mien");
             if (nl != null && nl.getLength() > 0) {
                    for (int i = 0; i < nl.getLength(); i++) {

                           Element el = (Element) nl.item(i);
                           String temp = el.getAttribute("tenmien");
                           list.add(temp);
                    }
             }
             return list;
      }

      @Override
      public ArrayList<String> getDanhSachTinh(String tenMien) {
             ArrayList<String> list = new ArrayList<String>();
             Element docEle = dom.getDocumentElement();

             NodeList nl = docEle.getElementsByTagName("mien");
             if (nl != null && nl.getLength() > 0) {
                    for (int i = 0; i < nl.getLength(); i++) {

                           String temp = "";
                           Element el = (Element) nl.item(i);
                           if (el.getAttribute("tenmien").equals(tenMien)) {
                                 NodeList nl1 = el.getElementsByTagName("tinh");
                                 if (nl1 != null) {
                                        for (int j = 0; j < nl1.getLength(); j++) {
                                               Element el1 = (Element) nl1.item(j);
                                               temp = el1.getAttribute("tentinh");
                                               list.add(temp);
                                        }
                                 }

                           }
                    }
             }


Bước 4: Xây dựng các phương thức để tiến hành cung cấp dịch vụ web
  • Tạo Class KetQuaXoSo
  • package hcmute.kqsx;

    import java.util.ArrayList;

    /**
     * @author ChuwxNTC
     */
    public class KetQuaXoSo {
           public ArrayList<String> getDanhSachMien() {
                  return new KetQuaXoSoModel().getDanhSachMien();
           }

           public ArrayList<String> getDanhSachTinh(String tenMien) {
                  return new KetQuaXoSoModel().getDanhSachTinh(tenMien);
           }

           public ArrayList<String> getDanhSachNgay(String tenMien, String tenTinh) {
                  return new KetQuaXoSoModel().getDanhSachNgay(tenMien, tenTinh);
           }

           public ArrayList<String> getDanhSachKetQua(String tenMien, String tenTinh,
                         String ngayXoSo) {
                  return new KetQuaXoSoModel().getDanhSachKetQua(tenMien, tenTinh, ngayXoSo);
           }

    }

Bước 5: Tạo file ketquaxoso.xml để lưu danh sách tỉnh đường dẫn RSS đến trang xskt.com.vn
<?xml version="1.0" encoding="UTF-8"?>
<ketquasoxo>

       <mien tenmien="Miền Bắc">
          <tinh tentinh="Phú Yên" link="http://xskt.com.vn/rss-feed/phu-yen-xspy.rss" />
       </mien>

       <mien tenmien="Miền Trung">
          <tinh tentinh="Quảng Ngãi" link="http://xskt.com.vn/rss-feed/quang-ngai-xsqng.rss" />
          <tinh tentinh="Bình Định" link="http://xskt.com.vn/rss-feed/binh-dinh-xsbdi.rss" />
          <tinh tentinh="Phú Yên" link="http://xskt.com.vn/rss-feed/phu-yen-xspy.rss" />
       </mien>

       <mien tenmien="Miền Nam">
          <tinh tentinh="Đồng Tháp" link="http://xskt.com.vn/rss-feed/dong-thap-xsdt.rss" />
          <tinh tentinh="Hậu Giang" link="http://xskt.com.vn/rss-feed/hau-giang-xshg.rss" />
       </mien>

</ketquasoxo>


Bước 6: Tiến hành xây dựng webservice
  • Chọn lớp KetQuaXoSo vừa tạo: Vào File → New → Projects... → Chọn Web → Chọn Dynamic Web Project
  • Click chuột phải chọn New → Others… → Mục Web service → Chọn Web service

  • Ta được như hình sau:


  • Ta chỉnh chọn Web service runtime là Apache Axis2 như sau:


  • Chọn Next

  • Sau đó ta Start server


  • Click Finish

Bước 7: Kiểm tra hoạt động web service


  • Nếu kết quả hiển thự như màn hình này thì mọi thứ đang hoạt động tốt
  • Click chọn Service ta sẽ được danh sách các dịch vụ mà ta cung cấp




Tổng kết: Như vậy là qua hướng dẫn này bạn đã tạo được một web service cung cấp dịch vụ lấy kết quả xổ số kiến thiết. Trong bài tiếp theo mình sẽ hướng dẫn các bạn cách gọi một web service từ Android.

3 nhận xét:

  1. sao em thực hiện bước đưa lên webservice toàn bị lỗi như vậy "IWAB0014E Unexpected exception occurred." ah... help me!!!!!!!!!!!

    Trả lờiXóa
  2. sao em thực hiện bước đưa lên webservice toàn bị lỗi như vậy "IWAB0014E Unexpected exception occurred." ah... help me!!!!!!!!!!!
    ketquaxoso mien bac

    Trả lờiXóa
  3. Anh ơi anh có thể post cái hàm getDanhSachNgay và getDanhSachKetQua được ko
    2 cái hàm trên e lấy dữ liệu từ file xml thì e hiểu nhưng còn lấy ngày và kết quả từ RSS của kqxs e không hình dung ra được
    Thanks anh

    Trả lờiXóa