WebServices:Delphi中如何使用Java服务器端的Collection或Vector类型的数据?

dvictor 2004-11-02 11:48:07
写了一个web services
服务器端用java写的 ,通过EJB中从数据库取数据,返回一个Collection,Collection里是对象的集合。
客户端用delphi6写的,但是接收下载的Collection 后不知道怎么处理了。

下面是由wsdl生成的代码:
unit Bean11;

interface

uses InvokeRegistry, Types, XSBuiltIns;

type

Collection = array of Variant; { "java:language_builtins.util" }

Bean1Port = interface(IInvokable)
['{F5223121-92AE-36AF-418C-B1FBC19F89DF}']
function getZxm(const integer: Integer): Collection; stdcall;
function sPrint: String; stdcall;
end;

function GetBean1Port(UseWSDL: Boolean=System.False; Addr: string=''): Bean1Port;


implementation
uses SOAPHTTPClient;

function GetBean1Port(UseWSDL: Boolean; Addr: string): Bean1Port;
const
defWSDL = 'C:\Documents and Settings\df\桌面\新建文件夹\pWebServices\GeneratedWebServiceClients\Bean1_client\pwebservices\generated\Bean1.wsdl';
defURL = 'http://localhost:7001/web-services/Bean1';
defSvc = 'Bean1';
defPrt = 'Bean1Port';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
RIO := THTTPRIO.Create(nil);
try
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
Result := (RIO as Bean1Port);
finally
if Result = nil then
RIO.Free;
end;
end;


initialization
InvRegistry.RegisterInterface(TypeInfo(Bean1Port), 'http://pwebservices', 'UTF-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(Bean1Port), '');
RemClassRegistry.RegisterXSInfo(TypeInfo(Collection), 'java:language_builtins.util', 'Collection');

end.
...全文
279 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyondtkl 2004-11-05
  • 打赏
  • 举报
回复
vector... 向量。。类似动态数组 功能很强大。。。
可以参考 TList的实现。。。
dvictor 2004-11-05
  • 打赏
  • 举报
回复
up
dvictor 2004-11-03
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
用delphi7倒入看看
vicenly 2004-11-03
  • 打赏
  • 举报
回复
关注
dvictor 2004-11-02
  • 打赏
  • 举报
回复
服务器端取数据的方法:
public Collection getZxm(Integer gsxh){
Collection result=new Vector();
try{
Context ctx = new InitialContext();
Object ref = ctx.lookup("XtglSession");

XtglSessionHome xtglSessionHome = (XtglSessionHome)PortableRemoteObject.narrow(ref,XtglSessionHome.class);
XtglSession xtglSession = xtglSessionHome.create();

Iterator loValue = xtglSession.getAllZxm(gsxh).iterator();
ZxmObject zo = null;
for(;loValue.hasNext();){
zo = (ZxmObject)loValue.next();
result.add(zo);
}
}catch(Exception ex){
ex.printStackTrace();
}
return result;
}
pdw2009 2004-11-02
  • 打赏
  • 举报
回复
最好用数组...............在delphi里没有向量这个类型,如果你要实现的话需要自已写一个vector的类!!!!!!!!!!!!!
zwb666 2004-11-02
  • 打赏
  • 举报
回复
ding

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧