Ví dụ về Webservices

thongdoanvan

Moderator
21/1/10
247
7
16
Bài này hướng dẫn các bạn tạo một Webservices trong Java.
Nguồn: Thầy Sơn

Để tìm hiểu thêm về Webservices các bạn nên tham khảo thêm ở đây
http://congdongjava.com/showthread.php?t=571
Tìm hiểu về công dụng của Ws
Trong java bạn thường xây dựng một ứng dụng phân tán. Bằng cách sử dụng RMI, hoặc cổ hơn nữa là Corba. Tuy nhiên thì khi số lượng người dùng lớn, truy cập nhiều địa điểm khác nhau. khó khăn đầu tiên mà bạn gặp phải là sự giao tiếp giữa Client và Server bị tường lửa (firewalls) và Proxy Server ngăn chặn lại.
Webservices da đời đã giải quyết những khó khăn đó
Ưu điểm của nó là: Nó có khả năng vượt tường lửa, đồng thời sử dụng XML để giao tiếp. Và một ưu đỉểm nổi trội nhất, đó là tính độc lập nền tảng, tức là chúng ta có thể viết Webservices bằng Java và có thể gọi trong Dot.Net và ngược lại. Có thể nói nó là sự dung hòa giữa các ngôn ngữ, các trường phái khác nhau.

Cách tạo một WS đơn giản:Trước tiên ta sẽ gọi Webservices trong Java, sau này tôi sẽ làm ví dụ gọi nó trong .Net.

PHP:
Bước 1:Các bước xây dựng Webservices
Trong ví dụ này chúng ta xây dựng Webservices đơn giản, với bài toán convert nhiệt độ từ độ C sang độ F và ngược lại.
Create Project (Web Application) Name : Conversions




PHP:
Adding an Operation to the Web Service

PHP:
Adding an Operation to the Web Service


PHP:
=>0K

PHP:
Open conversion.java

PHP:
package org.me.convert;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService()
public class conversion {
    @WebMethod(operationName = "celsiusToFarenheit")
    public float celsiusToFarenheit(@WebParam(name = "celsius")
    float celsius) {
        //TODO write your implementation code here:
        return (celsius*9/5)+32;
    }

    @WebMethod(operationName = "farenheitToCelsius")
    public float farenheitToCelsius(@WebParam(name = "farenheit")
    float farenheit) {
        //TODO write your implementation code here:
        return (farenheit-32)*5/9;
    }

}
Deploying and Testing the Web Service


PHP:
=>View WSDL
PHP:
http://localhost:8080/Conversions/conversionService?WSDL

PHP:
Bước 2:Tiến hành gọi Webservices vừa tạo ra.
Để gọi Webservices thì ta có thể gọi bằng Swing, Jsp, hoặc gọi trong cửa sổ dòng lệnh cosole. Ở đây ta gọi trong Swing. Vì thế ta cần phải tạo Jframe.
PHP:
Create Project (ConversionClient) Name : ConversionClient

PHP:
Create Web service Client




PHP:
Create Java Application  frmConversion.java

PHP:
package app;
import org.me.convert.*;
public class frmConversions extends javax.swing.JFrame {

    /** Creates new form frmConversions */
    ConversionService service; //gọi Services
    Conversion ports; //tạo port để gọi

    public frmConversions() {
        initComponents();
        service = new ConversionService();
        ports = service.getConversionPort();
    }
private void btnConvertActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
    float value = Float.valueOf(txtValue.getText());
    String type = cboType.getSelectedItem().toString().trim();
    float result;
    if (type.equals("Celcius to Franenheit")) {
        result = ports.celsiusToFarenheit(value); //gọi Method của Services
        lblResult.setText(value + " Celcius =" + result + " Franenheit"); //kết quả trả về
    } else {
        result = ports.farenheitToCelsius(value);
        lblResult.setText(value + " Franenheit=" + result + " Celcius ");
    }

}
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new frmConversions().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton btnConvert;
    private javax.swing.JComboBox cboType;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel lblResult;
    private javax.swing.JTextField txtValue;
    // End of variables declaration
}
 

vns_hieu41

New Member
20/12/10
2
0
0
Ðề: Ví dụ về Webservices

Thank bai viet cua ban nhieu.
Minh lam giong ban rụ, nhung lam the nao de chay Client vay?
Cho minh hoi nho ti lun nha.
De chay cac file ma netbean bien dich thanh file.class trong Dos thi lam nht vay?
Thanh ban nhieu!
 

OluS

CongdongJava Dev Group
24/2/10
93
0
6
Ðề: Ví dụ về Webservices

Bạn tạo client bằng cách tạo 1 frame rồi kết nối đến service của mình để thực thi các hàm farenheitToCelsiusfarenheitToCelsius thôi. Còn file class thì bạn build là trong project sẽ tự sản sinh ra file class chứ mình nghĩ k cần dùng dos làm chi cả.
 

eclipse

New Member
27/4/11
16
0
0
Ðề: Ví dụ về Webservices

bác ơi cho em hỏi
em đang học webservlet
em dùng eclipse ,cài tomcat 5.5 vào khi chạy chương trình thì nó báo lỗi

HTTP Status 404 - /

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

type Status report

message /

description The requested resource (/) is not available.


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

Apache Tomcat/5.5.33



bác chỉ em với. lõi này là bị thế nào ạ
 

nghiencuuJava

Member
18/3/10
216
0
16
Ðề: Ví dụ về Webservices

Nhân tiện có chủ đề về webservice ở đây, các bạn cho mình hỏi vấn đề này, đó là:
Develop a JAX_RPC based Web service that expose a method Agecheck(boolean). This method should accept year of birth of user and should return true if user >=18 years else should return false.. Mình có thực hiện tương tự như trên thì giáo viên chấm bài nói ko chuẩn và yêu cầu về ngâm cứu lại tài liệu, có xem tài liệu thì tài liệu lại sử dụng phiên bản netbean 5.0, phải cấu hình lung tung còn mình đang sử dụng netbean 6.9.1 nên chưa biết phải cấu hình ra sao, vậy bạn nào biết vui lòng giúp mình nha! Thanks so much!
 

vtcNew

Active Member
8/10/11
252
60
28
Mọi người cho mình hỏi , ở đây :
Code:
import org.me.convert.*;
public class frmConversions extends javax.swing.JFrame {

    /** Creates new form frmConversions */
    ConversionService service; //gọi Services
    Conversion ports; //tạo port để gọi

    public frmConversions() {
        initComponents();
        service = new ConversionService();
        ports = service.getConversionPort();
    }
- mình không import được : import org.me.convert.*;
- lớp này : ConversionService service; //gọi Services

Sao mình không thấy trong project các bạn nhỉ. Tks All !!!
 

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,637
310
83
Cái ConversionService là 1 cái endpoint để bạn call có phải ko ??
Nếu vậy thì một là new 1 cái web service client(netbeans) đến project ws của bạn, trong trừong hợp bạn dùng ws của ngừoi khác thì phải trỏ đến file wsdl.
 
  • Like
Reactions: vtcNew

vtcNew

Active Member
8/10/11
252
60
28
Cái ConversionService là 1 cái endpoint để bạn call có phải ko ??
Nếu vậy thì một là new 1 cái web service client(netbeans) đến project ws của bạn, trong trừong hợp bạn dùng ws của ngừoi khác thì phải trỏ đến file wsdl.
Mình cũng không rõ là ConversionService là lớp nào , được tạo từ đâu ra bởi mình đang làm theo ví dụ trên kia mà :D
Lớp ConversionService chứa những gì , gồm những phương thức nào ,... trong bài hướng dẫn kia không thấy . Mà mình đọc thì cũng chưa hiểu được là tại sao lại xuất hiện thêm lớp ConversionService này . Mong các bạn giải đáp
 

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,637
310
83
Deploy cái web service nó mới ra cái file wsdl, từ đó cái project sử dụng ws mới trỏ vào nó, cái ConversionService là lớp tự động phát sinh.
 
  • Like
Reactions: vtcNew