an350901450
发贴: 4
积分: 0
|
于 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)
谁能帮我解决下,谢谢了
an350901450 edited on 2008-12-30 14:50
|