Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Consume .NET Web Service with Eclipse

Trong bài này, chúng ta sẽ tìm hiểu cách dùng java trong môi trường eclipse để truy xuất đến 1 web service viết bằng C#. Ở đây ta dùng lại bài viết về cách tạo web service trên C# ở bài viết “Tạo Web service với C# step-by-step“.

Giả sử chúng ta có 1 url đến file WSDL là http://localhost:1291/ConvertWS.asmx?WSDL.

1. Tạo 1 Dynamic Web project mới với tên WS_NETWScomsumer

2. Nhấn chuột phải lên project vừa tạo, chọn New->Other, chọn Web Service Client

Nhấn Next

3. Gõ URL http://localhost:1291/ConvertWS.asmx?WSDL vào ô Service definition.

Nhấn Finish. Kết quả như sau

ở đây ví dụ ta chọn USD2VND, gõ vào số tiền usd là 100, bên dưới ta có kết quả là 1674000 như hình.

4. Tạo client

Tạo lớp Client_NetWS.java có nội dung sau

package client;

import java.awt.BorderLayout;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import org.tempuri.ConvertWSStub;

public class Client_NetWS extends JFrame implements ActionListener {

private static final long serialVersionUID = 1L;

private JTextField tfMoney,tfDisplay;

private JButton btnVND2USD,btnVND2EUR,btnUSD2VND,btnEUR2VND;

public Client_NetWS(){

setTitle(“Net Service Consumer”);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(450,150);setResizable(false);

JLabel lblTitle=new JLabel(“CHUYỂN ĐỔI TIỀN TỆ”,JLabel.CENTER);

lblTitle.setFont(new Font(“Arial”,Font.BOLD,18));

this.add(lblTitle,BorderLayout.NORTH);

createGUI();

}

void createGUI(){

JPanel pCen=new JPanel(new GridLayout(2,1));

JPanel pBot=new JPanel();

this.add(pBot,BorderLayout.SOUTH);

this.add(pCen,BorderLayout.CENTER);

JPanel p1=new JPanel();JLabel l1,l2;

p1.add(l1=new JLabel(“Tiền qui đổi:”,JLabel.RIGHT));

p1.add(tfMoney=new JTextField(25));

pCen.add(p1);

JPanel p2=new JPanel();

p2.add(l2=new JLabel(“Kết quả:”,JLabel.RIGHT));

p2.add(tfDisplay=new JTextField(25));

tfDisplay.setEditable(false);

pCen.add(p2);

l2.setPreferredSize(l1.getPreferredSize());

pBot.add(btnVND2USD=new JButton(“VND2USD”));

pBot.add(btnVND2EUR=new JButton(“VND2EUR”));

pBot.add(btnUSD2VND=new JButton(“USD2VND”));

pBot.add(btnEUR2VND=new JButton(“EUR2VND”));

btnVND2USD.addActionListener(this);

btnVND2EUR.addActionListener(this);

btnUSD2VND.addActionListener(this);

btnEUR2VND.addActionListener(this);

}

@Override

public void actionPerformed(ActionEvent e) {

Object o=e.getSource();

if(o.equals(btnVND2USD)){

try {

ConvertWSStub stub=new ConvertWSStub();

//tắt chế độ chunked của SOAP message nếu không sẽ nhận được 1 lỗi “The input stream for an incoming message is null.”

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);

ConvertWSStub.VND2USD convert=new ConvertWSStub.VND2USD();

double dong=Double.parseDouble(tfMoney.getText());

convert.setDong(dong);

ConvertWSStub.VND2USDResponse response=stub.VND2USD(convert);

double result=response.getVND2USDResult();

tfDisplay.setText(result+“”);

} catch (Exception e1) {

e1.printStackTrace();

}

}

else if(o.equals(btnVND2EUR)){

try {

ConvertWSStub stub=new ConvertWSStub();

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);

ConvertWSStub.VND2EUR convert=new ConvertWSStub.VND2EUR();

double dong=Double.parseDouble(tfMoney.getText());

convert.setDong(dong);

ConvertWSStub.VND2EURResponse response=stub.VND2EUR(convert);

double result=response.getVND2EURResult();

tfDisplay.setText(result+“”);

} catch (Exception e1) {

e1.printStackTrace();

}

}

else if(o.equals(btnUSD2VND)){

try {

ConvertWSStub stub=new ConvertWSStub();

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);

ConvertWSStub.USD2VND convert=new ConvertWSStub.USD2VND();

double dong=Double.parseDouble(tfMoney.getText());

convert.setUsd(dong);

ConvertWSStub.USD2VNDResponse response=stub.USD2VND(convert);

double result=response.getUSD2VNDResult();

tfDisplay.setText(result+“”);

} catch (Exception e1) {

e1.printStackTrace();

}

}

else if(o.equals(btnEUR2VND)){

try {

ConvertWSStub stub=new ConvertWSStub();

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);

ConvertWSStub.EUR2VND convert=new ConvertWSStub.EUR2VND();

double dong=Double.parseDouble(tfMoney.getText());

convert.setEur(dong);

ConvertWSStub.EUR2VNDResponse response=stub.EUR2VND(convert);

double result=response.getEUR2VNDResult();

tfDisplay.setText(result+“”);

} catch (Exception e1) {

e1.printStackTrace();

}

}

}

public static void main(String[] args) {

new Client_NetWS().setVisible(true);

}

}

5. Thực thi client

Chúc các bạn thành công

6 Responses to “Consume .NET Web Service with Eclipse”

  1. HELP ME said

    can giup cho :
    minh can ban chi cach lam bai nay voi , minh hoc aptech nhung den phan nay thi bi ri luon —> phan cau hoi va cach lam cua minh ne ko biet co dung ko , mong ban chi dum , nhanh cho minh duoc ko ban vi minh con thi lai mon nay nua ma
    —————————————————-
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.*;

    //import com.sun.org.apache.xml.internal.serializer.utils.Messages;
    //import com.sun.xml.internal.ws.api.message.Message;
    class Item extends JFrame implements ActionListener {
    JLabel lblItemCode = new JLabel(“ItemCode”);
    JLabel lblItemDesc = new JLabel(“ItemDesc”);
    JLabel lblQoh = new JLabel(“Qoh”);
    JLabel lblReOrdLv1 = new JLabel(“ReOrdLv1”);
    JLabel lblPrice = new JLabel(“price”);
    JTextField txtItemCode = new JTextField(20);
    JTextField txtItemDesc = new JTextField(20);
    JTextField txtQoh = new JTextField(20);
    JTextField txtReOrdLv1 = new JTextField(20);
    JTextField txtPrice = new JTextField(20);
    JButton btnAdd = new JButton(“Add”);
    JButton btnExit = new JButton(“Exit”);
    Statement st;
    String strSql;
    JPanel pnlStart,pnlEnd;

    public Item(String title)
    {
    super (title);
    getContentPane().setLayout(new BorderLayout());
    pnlStart = new JPanel();
    pnlStart.setLayout(new GridLayout(5,5));
    pnlStart.add(lblItemCode);
    pnlStart.add(txtItemCode);
    pnlStart.add(lblItemDesc);
    pnlStart.add(txtItemDesc);
    pnlStart.add(lblQoh);
    pnlStart.add(txtQoh);
    pnlStart.add(lblReOrdLv1);
    pnlStart.add(txtReOrdLv1);
    pnlStart.add(lblPrice);
    pnlStart.add(txtPrice);

    pnlEnd = new JPanel();
    pnlEnd.add(btnAdd);
    pnlEnd.add(btnExit);

    btnAdd.addActionListener(this);
    btnExit.addActionListener(this);
    try
    {
    Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
    String url = “jdbc:odbc:TestWS”;
    Connection con = DriverManager.getConnection(url);
    st = con.createStatement();
    }
    catch(SQLException ce)
    {
    System.out.println(ce);
    }
    catch(ClassNotFoundException ce)
    {
    System.out.println(ce);
    }

    getContentPane().add(pnlStart,BorderLayout.PAGE_START);
    getContentPane().add(pnlEnd,BorderLayout.PAGE_END);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setSize(400,200);
    setVisible(true);

    }
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource().equals(btnAdd))
    {
    strSql = “Select nghia from TestWS where ItemCode='”+txtItemCode.getText()+”‘”;
    ResultSet rs;
    try
    {
    rs=st.executeQuery(strSql);
    if(rs.next())
    {
    //System.out.print(rs.getString(1));
    txtItemCode.setText(rs.getString(1).toString());
    }
    }
    catch (SQLException e1)
    {

    e1.printStackTrace();
    }
    }
    else if(e.getSource().equals(btnExit))
    System.exit(0);
    }
    public static void main(String args[])
    {
    Item objtu = new Item(“Item”);
    }
    }
    ================================================================
    create a wedservice to insert a new record into the above item table
    create a client application that consumes above web service.the output of the application is shown

    when Add button is clicker , a proper message is show
    when exit~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.

  2. vovanhai said

    Bạn viết gì thực sự tôi không hiểu bởi bạn viết ngắn quá. Tôi đoán như sau: Tạo 1 WS để insert 1 mẫu tin vào bảng Item nào đó sau đó tạo 1 client gọi webservice này. Mỗi khi lưu thành công thì thông báo. Nếu như tôi đáon là đúng thì bạn làm như vầy chắc 0 điểm quá!
    Ở đây trước hết bạn tạo 1 webservice với 1 phương thức dùng để insert 1 mẫu tin vào 1 bảng sau đó bạn mới viết client triệu gọi. Viết như bạn có nghĩa là bạn tạo 1 chương trình java application nối đến csdl rồi insert mẫu tin vào. Hỏng hết!

  3. HELP said

    bạn có thể chỉ cách làm cho mình được không vậy , bởi vì mình dốt phần này lắm lắm , bạn có thể chình sửa lại đoạn mã trên được không , đội ơn trươc hix

  4. Rất cảm ơn bạn ! Dựa vào 2 bài viết của bạn mà tôi đã interact được java và c# webservices. Rất đúng với yêu cầu công việc mình đang làm. Mong có thể được tham khảo nhiều bài viết hay hơn . Bài viết mạch lạc và khá dễ hiểu ! Thank >…

  5. Enzo281 said

    Em chào Thầy, project của em yêu cầu tìm hiểu java call .net ws. Nhưng rắc rối hơn ví dụ của Thầy ở chỗ .net ws trả về dataset. Dĩ nhiên em biết thì đó cũng chỉ là xml mà thôi. Nhưng cái quan trọng ở đây là gói convert dataset ra kiểu đối tượng khác có thể sử dụng trọng java. Em muốn hỏi theo kinh nghiệm của Thầy, Thầy sẽ build như thế nào?

    Em cám ơn Thầy.

  6. vovanhai said

    Thực tế thì trong java không có kiểu dữ liệu nào tương thích Dataset cả. Bạn có thể làm viêc bằng 1 trong 3 cách sau:
    1. Sử dụng strongly-typed-dataset thay vì DataSet .
    2. Ánh xạ DataSet thành jagged array ( e.g. object[][] )
    3. Ánh xạ DataSet thành đối tượng System.Xml.XmlNode . For e.g.

    DataSet ds;
    //… fill in dataset
    XmlNode xmlnode = new XmlDataDocument( ds );

    Chúc thành công!

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.