先用JAVA写一个WebService
ServiceHello.java
package com.hyan.service;
import java.sql.SQLException;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class ServiceHello {
......
Endpoint.publish("http://localhost:9001/Service/ServiceHello", new ServiceHello());
System.out.println("Service Success!");
}
public String getValue(String name){
return "我叫:"+name;
}
}
......编译,出现如下信息表示WebService成功:
信息: Dynamically creating request wrapper Class com.hyan.service.jaxws.GetValue
2016-3-18 9:09:47 com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
信息: Dynamically creating response wrapper bean Class com.hyan.service.jaxws.GetValueResponse
Service Success!
--------------------------------------------------------------------------------------------------
产生的文件
ServiceHello1.pas
...
ServiceHello = interface(IInvokable)
['{42FB9557-480A-8744-60B3-05D97B2682E2}']
function getValue(const arg0: WideString): WideString; stdcall;
end;
function GetServiceHello(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ServiceHello;
implementation
uses SysUtils;
function GetServiceHello(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ServiceHello;
const
defWSDL = 'http://localhost:9001/Service/ServiceHello?wsdl';
defURL = 'http://localhost:9001/Service/ServiceHello';
defSvc = 'ServiceHelloService';
defPrt = 'ServiceHelloPort';
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 ServiceHello);
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(ServiceHello), 'http://service.hyan.com/', 'UTF-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceHello), '');
//注意:下面系统自动生成,如果不注释掉,传人的参数将全部为null,不清楚什么原因,请大侠指教!
//InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceHello), ioDocument);
end.
...
--------------------------------------------------------------------------------------------------
Delphi 调用JAVA WebService
Unit1.pas
var
ServiceHello1: ServiceHello;
procedure TForm1.btn5Click(Sender: TObject);
var
wsdl1:string;
begin
wsdl1 := 'http://localhost:9001/Service/ServiceHello?wsdl';
//连中间层(JAVA)
ServiceHello1:=GetServiceHello(true,wsdl1,nil);
edt3.Text:=ServiceHello1.getValue('欢迎Delphi来JAVA WebService');
end;