Delphi 调用 Java WebService

Delphi和Java实现webservice架构

Webservice现在已经不是什么新技术了,用java建立webservice是快捷的,但是用java在制作客户端的感觉上总是不如 Delphi的(个人感觉,java高手们不要笑话我),那我们就用java实现webservice的服务端程序,delphi制作客户端。
   
    一.环境搭建
    
    jdk和tomcat的安装和配置我在这里不进行行介绍了。说明一点我的tomcat是安装在D:\tomcat,设定端口是8099。

 


    安装Axis
     1.可以从http://ws.apache.org/axis/下载axis的最新版本,我使用的是axis1.2。
     2.解压缩axis-bin-1_2beta.zip,将axis-1_2beta目录中webapps下的axis目录全部拷贝到tomcat的安装目录中webapps下。
     3.将axis\lib中的所有jar文件都添加到classpath系统变量中。

     注(用户需根据自己的安装路径进行更改):
     
      .;
      d:\tomcat\webapps\axis\WEBINF\lib\axis.jar;
      d:\tomcat\webapps\axis\WEB-INF\lib\saaj.jar;
      d:\tomcat\webapps\axis\WEB-INF\lib\commons-logging.jar;
      d:\tomcat\webapps\axis\WEB-INF\lib\commons-discovery.jar;
      d:\tomcat\webapps\axis\WEB-INF\lib\wsdl4j.jar;
      d:\tomcat\webapps\axis\WEBINF\lib\jaxrpc.jar;
   

     4.启动tomcat访问http://cbf107:8099/axis/index.html(这里使用的主机名和端口号和使用的tomcat所配置一致)。
    可以见到如下页面:

      

    二.Web Service服务端开发
  
    写一个java小程序:

    
     public class Test{
       public int add(int p1, int p2) {
         return p1 + p2;
       }
       public int subtract(int p1, int p2) {
         return p1 - p2;
       }
     }
    

    在D:\Tomcat\webapps\axis 目录下新建一个test文件夹,将它保存在里面,注意:后缀名改为jws,也就是Test.jws 。
  
    在浏览器里访问:http://cbf107:8099/axis/test/Test.jws可以看到

     

    点击“Click to see the WSDL”出现

    
 
    将这页另存为xml文档(我们在使用delphi制作客户端的时候会使用)

     

    三.delphi实现Web Service客户端开发

    打开delphi新建工程,在form上放置两个edit和两个button,button的name命名为
btnadd和btnsubtract,caption命名为add和subtract。

    再file->new->other,选择webservice里的WSDL importer

    

    在search UDDI..里选择前面我们保存的那个xml文件,点击next最后finish

        

     
    
    全部保存,我们发现delphi的工程中多了test1.pas
   
     

    打开发现有这样一段接口申明:
      Test = interface(IInvokable)
        ['{52882FF0-46E2-6644-A77B-CE714D4CBFD5}']
        function  add(const p1: Integer; const p2: Integer): Integer; stdcall;
        function  subtract(const p1: Integer; const p2: Integer): Integer; stdcall;
      end;
    
    那我们可以直接调用这个接口了,这时候我们回到界面,从delphi的webservices面版中托放一个soap到form上。

     

设置属性如图:

     

最后我们可以完成我们的代码了:
    1.在uses里添加test1因为我们要引用这个单元。
    2.添加全局变量t1:test;(t1是一个test接口)
    3.为两个button添加click事件

    procedure TForm1.btnaddClick(Sender: TObject);
    var
      i,j,z:integer;
    begin
      i:=strtoint(edit1.Text);
      j:=strtoint(edit2.Text);
      t1:=(HttPRIO1 as test);
      z:=t1.add(i,j);
      t1._Release;
      showmessage(inttostr(z));
    end; 


    procedure TForm1.btnsubstractClick(Sender: TObject);
    var
      i,j,z:integer;
    begin
      i:=strtoint(edit1.Text);
      j:=strtoint(edit2.Text);
      t1:=(HttPRIO1 as test);
      z:=t1.subtract(i,j);
      t1._Release;
      showmessage(inttostr(z));
    end;

    4.F9运行程序进行测试
    
     

     

    看我们有用delphi实现了java写的那段程序,不是吗。

    5.也许到这里你认为应该已经完成了,没错!不过对webservice还不够了解的
  朋友你再修改一下那个java程序,也就是将Test.jws里的这个方法 

      public int add(int p1, int p2) {
        return p1 + p2;
      }

      改为

      public int add(int p1, int p2) {
        return p1 + p2+10;
      }

    再运行一下你的客户端程序看看。

    四.注:unit1的所有代码

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Rio, SOAPHTTPClient,Test1;

    type
      TForm1 = class(TForm)
        HTTPRIO1: THTTPRIO;
        Edit1: TEdit;
        Edit2: TEdit;
        btnadd: TButton;
        btnsubstract: TButton;
        procedure Edit2KeyPress(Sender: TObject; var Key: Char);
        procedure btnaddClick(Sender: TObject);
        procedure btnsubstractClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;
      t1:test;

    implementation

    {$R *.dfm}


    //这里是为了让 两个edit只能输入数字,edit1的onkeypress直接调用这个就可以了。
    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); 
    begin
      if key in ['0'..'9']=false then
        key:=#0;
    end;

    procedure TForm1.btnaddClick(Sender: TObject);
    var
      i,j,z:integer;
    begin
      i:=strtoint(edit1.Text);
      j:=strtoint(edit2.Text);
      t1:=(HttPRIO1 as test);
      z:=t1.add(i,j);
      t1._Release;
      showmessage(inttostr(z));
    end;

    procedure TForm1.btnsubstractClick(Sender: TObject);
    var
      i,j,z:integer;
    begin
      i:=strtoint(edit1.Text);
      j:=strtoint(edit2.Text);
      t1:=(HttPRIO1 as test);
      z:=t1.subtract(i,j);
      t1._Release;
      showmessage(inttostr(z));
    end;

    end.

 

    对使用axis搭建webservice有兴趣的朋友还有可以访问这里:
       http://www-900.ibm.com/developerWorks/cn/webservices/ws-startaxis/

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页