java有any类型吗_Java开发网 - 一个关于CORBA中any类型的问题

Posted by:an350901450

Posted on:2008-12-30 14:44

请教一个问题

我的IDL文件:

module anyM{

interface anyI{

any print();

};

};

module personS

{

struct person{

wstring name;

wstring sex;

};

};

我用的是java 与corba 编译

服务器实现端:

public class AnyIImpl extends anyIPOA {

public Any print() {

Any a = org.omg.CORBA.ORB.init().create_any();

person ps =new person();

ps.name="张三";

ps.sex="男";

personHelper.insert(a,ps);

return a;

}

}

服务端代码:

public class Server

{

public static void main( String[] args )

{

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);

try

{

org.omg.PortableServer.POA poa =

org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

poa.the_POAManager().activate();

org.omg.CORBA.Object o = poa.servant_to_reference(new AnyIImpl());

if( args.length == 1 )

{

// write the object reference to args[0]

PrintWriter ps = new PrintWriter(new FileOutputStream(new File( args[0] )));

ps.println( orb.object_to_string( o ) );

ps.close();

}

else

{

// register server with naming context

/*NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));*/

NamingContextExt nc = NamingContextExtHelper.narrow(orb

.string_to_object("corbaloc::192.168.0.151:5055/NameService"));

nc.bind( nc.to_name("AnyServer.service"), o);

}

}

catch ( Exception e )

{

e.printStackTrace();

}

orb.run();

}

}

我的客户端:

public class Client

{

public static void main( String[] args )

{

try

{

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);

// get hold of the naming service

/*NamingContextExt nc =

NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));*/

NamingContextExt nc = NamingContextExtHelper.narrow(orb

.string_to_object("corbaloc::192.168.0.151:5055/NameService"));

System.out.println("nc: "+nc);

anyI s =

anyIHelper.narrow(nc.resolve(nc.to_name("AnyServer.service")));

System.out.println(nc.resolve(nc.to_name("AnyServer.service")));

// create a new any

Any a = org.omg.CORBA.ORB.init().create_any();

System.out.print("Passing a Wstring...");

person pp=personHelper.extract(s.print());

System.out.println("name: "+pp.name);

System.out.println("sex: "+pp.sex);

// System.out.println(s.print().extract_wstring());

//System.out.println("Any.kind: " + a.type().kind().value() );

orb.shutdown(true);

}

catch ( Exception e)

{

e.printStackTrace();

}

}

}

如果我在我的配置文件中用

# are handled properly and cause no harm!

#ORBInitRef.NameService=corbaloc::160.45.110.41:38693/StandardNS/NameServer-POA/_root

#ORBInitRef.NameService=file:/c:/NS_Ref

ORBInitRef.NameService=file:/e:/workspace/any/NS_Ref

。。。。。。。。

上面这种方式 把IOR 写到文件NS_Ref 里面的,这种命名方式不会出错能正常运行

但当我使用

#ORBInitRef.NameService=corbaloc::160.45.110.41:38693/StandardNS/NameServer-POA/_root

#ORBInitRef.NameService=file:/c:/NS_Ref

ORBInitRef.NameService=corbaloc::192.168.0.151:5055/NameService

。。。。。。。

这中IP绑订 命名服务,在启动客户端的时候就报错了,报如下错误

Passing a Wstring...org.omg.CORBA.UNKNOWN: ----------BEGIN server-side stack trace----------

org.omg.CORBA.UNKNOWN: vmcid: SUN minor code: 202 completed: Maybe

at com.sun.corba.se.impl.logging.ORBUtilSystemException.runtimeexception(ORBUtilSystemException.java:8365)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.convertThrowableToSystemException(CorbaMessageMediatorImpl.java:1918)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleThrowableDuringServerDispatch(CorbaMessageMediatorImpl.java:1868)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleThrowableDuringServerDispatch(CorbaMessageMediatorImpl.java:1821)

at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:258)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1680)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1540)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:922)

at com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:181)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:694)

at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:451)

at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1187)

at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:417)

Caused by: java.lang.NullPointerException

at com.sun.corba.se.impl.corba.AnyImpl.write_value(AnyImpl.java:579)

at com.sun.corba.se.impl.encoding.CDROutputStream_1_0.write_any(CDROutputStream_1_0.java:585)

at com.sun.corba.se.impl.encoding.CDROutputStream.write_any(CDROutputStream.java:202)

at anyM.anyIPOA._invoke(anyIPOA.java:43)

at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:637)

at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:189)

... 8 more

----------END server-side stack trace---------- vmcid: SUN minor code: 202 completed: Maybe

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:494)

at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:902)

at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:99)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:572)

at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:430)

at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:326)

at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:129)

at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)

at anyM._anyIStub.print(_anyIStub.java:32)

at anyM.Client.main(Client.java:44)

谁能帮我解决下,谢谢了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值