How to init sequence on server to return to client?
How do I initialize a sequence to be returned to a
client from a java server?
sample idl :
module someModule {
typedef sequence<octet> Data;
struct SomeStructure {
Data file;
string info;
};
typedef sequence<SomeStructure> results;
interface someObject {
get(in string infotoget, out results results_out, out unsigned long
numberOfItems);
};
};
on client :
.
.
.
String info = "filename";
someModule.resultsHolder rh = new someModule.resultsHolder();
org.omg.CORBA.IntHolder ih = new org.omg.CORBA.IntHolder();
someObject.get(info,rh,ih);
on server :
?
I implemented a server, but I get the following error :
org.omg.CORBA.UNKNOWN:vmcid: SUN minor code: 202 completed: Maybe
Test2 Client Error:
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:274)
at java.lang.Class.newInstance0(Class.java:308)
at java.lang.Class.newInstance(Class.java:261)
at com.sun.corba.se.internal.iiop.messages.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:90)
at com.sun.corba.se.internal.iiop.ClientResponseImpl.getSystemException(ClientResponseImpl.java:105)
at com.sun.corba.se.internal.corba.ClientDelegate.invoke(ClientDelegate.java:314)
at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
at someModule._someObjectStub.get(_someObjectStub.java:20)
at Test2Client.main(Test2Client.java:54)
I think the error is caused by incorrect implementation of the sequence on the server.
Here is the method implementation on the server side :
public void get(String toget, someModule.resultsHolder results_out, org.omg.CORBA.IntHolder numberOfItems)
{
System.out.println("inside get : " + toget);
someModule.SomeStructure[] srs_array = new someModule.SomeStructure[1];
srs_array[0].info = "EMPTY";
// create array for octet sequence
byte[] data_array = new byte[1];
data_array[0] = 0;
srs_array[0].file = data_array;
results_out = new someModule.resultsHolder(srs_array);
numberOfItems = new IntHolder(0);
}