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)
谁能帮我解决下,谢谢了