Web Service學習日記-11月29日-建立客戶端訪問Web Service
Posted on 2006-11-29 22:15 Zou Ang 閱讀(820) 評論(4) 編輯 收藏 所屬分類:
昨天把Web服務架好了,那今天自然要想怎么來遠程調用了.
于是寫了如下代碼:

/**?*//**
?*?org.zsu.zouang
?*?2006-11-29
?*/
package?org.zsu.zouang;

import?java.net.MalformedURLException;
import?java.net.URL;
import?java.rmi.RemoteException;

import?javax.xml.namespace.QName;
import?javax.xml.rpc.ServiceException;

import?org.apache.axis.client.Call;
import?org.apache.axis.client.Service;


/**?*//**
?*?2006-11-29
?*?@author?Zou?Ang
?*?Contact?<a?href?="mailto:richardeee@gmail.com">Zou?Ang</a>
?*/

public?class?MyBookServiceClient?
{
????private?static?final?String?endPoint?=?"http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws?wsdl";

????public?static?void?main(String?args[])
{
????????Service?service?=?new?Service();

????????try?
{
????????????Call?call?=?(Call)service.createCall();
????????????call.setTargetEndpointAddress(new?URL(endPoint));
????????????call.setOperationName(new?QName("getBookTitle"));

????????????String?result?=?(String)call.invoke(new?Object[]
{"0130895601"});
????????????System.out.println(result);

????????}?catch?(ServiceException?e)?
{
????????????//?TODO?Auto-generated?catch?block
????????????e.printStackTrace();

????????}?catch?(MalformedURLException?e)?
{
????????????//?TODO?Auto-generated?catch?block
????????????e.printStackTrace();

????????}catch(RemoteException?e)
{
????????????e.printStackTrace();
????????}
????}
}
控制臺輸出:
-?Unable?to?find?required?classes?(javax.activation.DataHandler?and?javax.mail.internet.MimeMultipart).?Attachment?support?is?disabled.
Advanced?Java?2?Platform?How?to?Program成功啦!
在代碼中加上這一句:
System.out.println(call.getResponseMessage().getSOAPPartAsString());會看到控制臺輸出:
<?xml?version="1.0"?encoding="utf-8"?>
<soapenv:Envelope?xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"?xmlns:xsd="http://www.w3.org/2001/XMLSchema"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

????<soapenv:Body>
????<getBookTitleResponse?soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
????????<getBookTitleReturn?xsi:type="xsd:string">
????????????Advanced?Java?2?Platform?How?to?Program
????????</getBookTitleReturn>
????</getBookTitleResponse>
????</soapenv:Body>
</soapenv:Envelope>
改進了一下,使用Swing建立一個圖形化界面:

/**?*//**
?*?2006-11-29
?*?@author?Zou?Ang
?*?Contact?<a?href?="mailto:richardeee@gmail.com">Zou?Ang</a>
?*/

public?class?MyBookClient?extends?JFrame?
{

????private?final?static?int?FRAME_WIDTH?=?500;
????private?final?static?int?FRAME_HEIGHT?=?100;
????

????public?MyBookClient(String?title)?
{
????????super(title);
????????getContentPane().setLayout(new?GridLayout(2?,?2));
????????final?String?endPoint?=?"http://localhost:8080/axis/org/zsu/zouang/BookTitleService.jws?wsdl";
????????final?JLabel?resultLabel?=?new?JLabel();
????????final?JComboBox?bookISDNBox?=?new?JComboBox();
????????bookISDNBox.addItem("0130895601");
????????bookISDNBox.addItem("0430895717");
????????bookISDNBox.addItem("0430293636");
????????bookISDNBox.addItem("0130923613");
????????
????????this.setSize(FRAME_WIDTH,?FRAME_HEIGHT);
????????JButton?serviceButton?=?new?JButton("Get?Book?Title");

????????serviceButton.addActionListener(new?ActionListener()
{


????????????public?void?actionPerformed(ActionEvent?e)?
{
????????????????//?TODO?Auto-generated?method?stub

????????????????try?
{
????????????????????Service?service?=?new?Service();
????????????????????Call?call?=?(Call)service.createCall();
????????????????????call.setTargetEndpointAddress(new?URL(endPoint));
????????????????????call.setOperationName(new?QName("getBookTitle"));
????????????????????String?result?=?(String)call.invoke(bookISDNBox.getSelectedObjects());
????????????????????resultLabel.setText(result);

????????????????}?catch?(AxisFault?e1)?
{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e1.printStackTrace();

????????????????}?catch?(MalformedURLException?e1)?
{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e1.printStackTrace();

????????????????}?catch?(RemoteException?e1)?
{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e1.printStackTrace();

????????????????}?catch?(ServiceException?e1)?
{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e1.printStackTrace();
????????????????}
????????????}
????????});
????????
????????getContentPane().add(new?JLabel("Please?ISDN?number"));
????????getContentPane().add(bookISDNBox);
????????getContentPane().add(resultLabel);
????????getContentPane().add(serviceButton);
????}
????

????public?static?void?main(String?args[])
{
????????MyBookClient?client?=?new?MyBookClient("Book?Title?Service");
????????client.setDefaultCloseOperation(EXIT_ON_CLOSE);
????????client.setVisible(true);
????}
}
于是寫了如下代碼:


























































控制臺輸出:


在代碼中加上這一句:












改進了一下,使用Swing建立一個圖形化界面:


















































































