delphi7调用java服务器端webservice示例
首先取得java-webservice服务器端地址。我的是:http://localhost:8080/mywebservice/services/mywebservice?wsdl
然后打开delphi7,file-new-other:选择WebService选项卡,在选择WSDLImporter
,在弹出的界面中输入java-webservice地址。点击Next-finish.会生成一个.pas的webservice文件,
生成的代码如下:
// ************************************************************************ //// The types declared in this file were generated from data read from the// WSDL File described below:// WSDL : http://localhost:8080/mywebservice/services/mywebservice?wsdl// Encoding : UTF-8// Version : 1.0// (2011-7-21 10:17:02 - 1.33.2.5)// ************************************************************************ //unit mywebservice;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type // ************************************************************************ // // The following types, referred to in the WSDL document are not being represented // in this file. They are either aliases[@] of other types represented or were referred // to but never[!] declared in the document. The types from the latter category // typically map to predefined/known XML or Borland types; however, they could also // indicate incorrect WSDL documents that failed to declare or import a schema type. // ************************************************************************ // // !:int - "http://www.w3.org/2001/XMLSchema" // !:string - "http://www.w3.org/2001/XMLSchema" // ************************************************************************ // // Namespace : http://server // transport : http://schemas.xmlsoap.org/soap/http // style : document // binding : mywebserviceHttpBinding // service : mywebservice // port : mywebserviceHttpPort // URL : http://localhost:8080/mywebservice/services/mywebservice // ************************************************************************ // mywebservicePortType = interface(IInvokable) ['{56F18980-71B1-FAC0-BFF5-569F621A8591}'] function add(const a: Integer; const b: Integer): Integer; stdcall; function sayHello(const name: WideString): WideString; stdcall; end;function GetmywebservicePortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): mywebservicePortType;implementationfunction GetmywebservicePortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): mywebservicePortType;const defWSDL = 'http://localhost:8080/mywebservice/services/mywebservice?wsdl'; defURL = 'http://localhost:8080/mywebservice/services/mywebservice'; defSvc = 'mywebservice'; defPrt = 'mywebserviceHttpPort';var RIO: THTTPRIO;begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try Result := (RIO as mywebservicePortType); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end;end;initialization InvRegistry.RegisterInterface(TypeInfo(mywebservicePortType), 'http://server', 'UTF-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(mywebservicePortType), ''); InvRegistry.RegisterInvokeOptions(TypeInfo(mywebservicePortType), ioDocument); InvRegistry.RegisterExternalParamName(TypeInfo(mywebservicePortType), 'add', 'out_', 'out'); InvRegistry.RegisterExternalParamName(TypeInfo(mywebservicePortType), 'sayHello', 'out_', 'out');end.
procedure TForm1.Button1Click(Sender: TObject);varserver:mywebservicePortType;//此处为delphi生成的java-webservice的方法名。aa:string;begin server:=GetmywebservicePortType(true,'',nil);//delphi生成的方法 showmessage(server.sayHello(Edit1.Text));//调用java-webservice的sayHello()方法。end;