4 #define protected public
5 #include <omniORB4/CORBA.h>
6 #include <omniORB4/internal/typecode.h>
15 #include "YacsTrace.hxx"
17 int main(int argc, char** argv)
21 CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
22 CORBA::Object_var obj = orb->string_to_object("corbaname:rir:#test.my_context/Echo.Object");
23 eo::Echo_var echoref = eo::Echo::_narrow(obj);
24 if( CORBA::is_nil(echoref) )
26 std::cerr << "Can't narrow reference to type Echo (or it was nil)." << std::endl;
30 CORBA::String_var src = (const char*) "Hello!";
31 CORBA::String_var dest = echoref->echoString(src);
32 std::cerr << "I said, \"" << (char*)src << "\"." << std::endl
33 << "The Echo object replied, \"" << (char*)dest <<"\"." << std::endl;
35 CORBA::Object_var ob = orb->string_to_object("corbaname:rir:#test.my_context/D.Object");
36 eo::D_var Dref = eo::D::_narrow(ob);
37 if( CORBA::is_nil(Dref) ) {
38 std::cerr << "Can't narrow reference to type D (or it was nil)." << std::endl;
44 echoref->echoD(Dref,dout);
45 std::cerr << dout->echoLong2(10) << std::endl;
48 echoref->echoD(dout,ddout);
49 std::cerr << dout->echoLong2(10) << std::endl;
51 CORBA::Object_var oob = orb->string_to_object("corbaname:rir:#test.my_context/Obj.Object");
52 eo::Obj_var Objref = eo::Obj::_narrow(oob);
55 echoref->echoObj2(Objref,Objout);
56 std::cerr << Objout->echoLong(10) << std::endl;
58 CORBA::Object_var cob = orb->string_to_object("corbaname:rir:#test.my_context/C.Object");
59 eo::C_var Cref = eo::C::_narrow(cob);
61 echoref->echoC(Cref,Cout);
63 echoref->echoObj2(Cref,Objout);
64 //echoref->echoC(Cref,Objout); compilation impossible
65 //echoref->echoObj2(Cref,Cout); compilation impossible
66 //echoref->echoC(Objref,Cout); compilation impossible
68 CORBA::Object_var dobj = orb->resolve_initial_references("DynAnyFactory");
69 DynamicAny::DynAnyFactory_var dynFactory = DynamicAny::DynAnyFactory::_narrow(dobj);
71 CORBA::TypeCode_var content_type=orb->create_interface_tc("IDL:eo/Obj:1.0","Obj");
73 std::vector<CORBA::Any*> v;
74 std::vector<CORBA::Any*>::const_iterator iter;
76 CORBA::Any *any = new CORBA::Any();
81 CORBA::Any *any2 = new CORBA::Any();
85 std::cerr << "refcount: " << oob->_PR_getobj()->pd_refCount << std::endl;
88 CORBA::Any *any3 = new CORBA::Any();
92 std::cerr << "refcount: " << oob->_PR_getobj()->pd_refCount << std::endl;
98 std::cerr << "refcount: " << xobj->_PR_getobj()->pd_refCount << std::endl;
103 std::cerr << "refcount: " << yobj->_PR_getobj()->pd_refCount << std::endl;
106 CORBA::Object_var zobj ;
107 *any2 >>= CORBA::Any::to_object(zobj) ;
109 std::cerr << "refcount: " << zobj->_PR_getobj()->pd_refCount << std::endl;
112 // Build an Any from vector v
114 CORBA::TypeCode_var tc;
118 // Check if it's an homogeneous vector : all TypeCodes must be equivalent
119 CORBA::TypeCode_var any_tc=v[0]->type();
120 tc=orb->create_sequence_tc(0,any_tc);
122 for(iter=v.begin();iter!=v.end();iter++)
125 CORBA::TypeCode_var tc2=a->type();
126 if(!tc2->equivalent(any_tc))
128 // It's a non homogeneous vector : create a sequence of any
129 tc=orb->create_sequence_tc(0,CORBA::_tc_any);
134 // It's a homogeneous vector : create a sequence of the homogeneous type
138 // It's an empty vector : create a sequence of any
139 tc=orb->create_sequence_tc(0,CORBA::_tc_any);
143 DynamicAny::DynAny_var dynany = dynFactory->create_dyn_any_from_type_code(tc);
144 DynamicAny::DynSequence_var ds = DynamicAny::DynSequence::_narrow(dynany);
146 ds->set_length(v.size());
147 for(iter=v.begin();iter!=v.end();iter++)
149 DynamicAny::DynAny_var temp=ds->current_component();
155 //delete intermediate any
159 CORBA::Any_var seqany=ds->to_any();
163 std::map<std::string,CORBA::Any*> m;
164 CORBA::Any *any4 = new CORBA::Any();
168 CORBA::Any *any5 = new CORBA::Any();
171 CORBA::Any *any6 = new CORBA::Any();
174 CORBA::Any *any7 = new CORBA::Any();
175 *any7 <<= (const char*)"coucou";
177 CORBA::Any *any8 = new CORBA::Any();
178 *any8 <<= CORBA::Any::from_boolean(1);
193 CORBA::StructMemberSeq mseq;
194 mseq.length(nMember);
195 mseq[0].name=CORBA::string_dup("x");
196 mseq[0].type=CORBA::TypeCode::_duplicate(CORBA::_tc_double);
197 mseq[1].name=CORBA::string_dup("y");
198 mseq[1].type=CORBA::TypeCode::_duplicate(CORBA::_tc_long);
199 mseq[2].name=CORBA::string_dup("s");
200 mseq[2].type=CORBA::TypeCode::_duplicate(CORBA::_tc_string);
201 mseq[3].name=CORBA::string_dup("b");
202 mseq[3].type=CORBA::TypeCode::_duplicate(CORBA::_tc_boolean);
203 mseq[4].name=CORBA::string_dup("ob");
204 mseq[4].type=content_type;
205 for(int i=0;i<nMember;i++)
207 const char* name=mseq[i].name;
208 std::cerr << mseq[i].name << std::endl;
209 if(m.count(name) !=0)
211 std::cerr << "member: " << mseq[i].name << std::endl;
212 mseq[i].type=m[name]->type();
215 CORBA::TypeCode_var ts= orb->create_struct_tc("","",mseq);
216 //CORBA::TypeCode_var ts= orb->create_struct_tc("IDL:eo/S3:1.0","S3",mseq);
217 dynany = dynFactory->create_dyn_any_from_type_code(ts);
218 DynamicAny::DynStruct_var dst = DynamicAny::DynStruct::_narrow(dynany);
220 for(int i=0;i<nMember;i++)
222 DynamicAny::DynAny_var temp=dst->current_component();
223 const char* name=mseq[i].name;
224 std::cerr << name << std::endl;
225 CORBA::Any* a=m[name];
227 //delete intermediate any
231 CORBA::Any_var structany=dst->to_any();
235 for(int i=0;i<nMember;i++)
237 const char * name=tst->memberName(i);
238 //TypeCode* tm=tst->memberType(i);
239 //do not test member presence : test has been done in ToYacs convertor
240 CORBA::Any* a=m[name];
241 members[i].id=CORBA::string_dup(name);
243 //delete intermediate any
250 CORBA::TypeCode_var tcout=orb->create_sequence_tc(0,content_type);
252 CORBA::Request_var req = echoref->_request("echoStruct2");
253 //CORBA::Request_var req = echoref->_request("echoObjectVec");
254 CORBA::NVList_ptr arguments = req->arguments() ;
256 arguments->add_value( "s1" , structany , CORBA::ARG_IN ) ;
257 //arguments->add_value( "s1" , seqany , CORBA::ARG_IN ) ;
260 out.replace(ts, (void*) 0);
261 //out.replace(tcout, (void*) 0);
262 arguments->add_value( "s2" , out , CORBA::ARG_OUT );
264 req->set_return_type(CORBA::_tc_void);
266 //req->exceptions()->add(eo::_tc_SALOME_Exception);
269 CORBA::Exception *exc =req->env()->exception();
272 std::cerr << "The raised exception is of Type:" << exc->_name() << std::endl;
273 if(strcmp(exc->_name(),"MARSHAL") == 0)
275 const char* ms = ((CORBA::MARSHAL*)exc)->NP_minorString();
277 std::cerr << "(CORBA::MARSHAL: minor = " << ms << ")" << std::endl;
282 std::cerr << "Before request" << std::endl;
283 req = echoref->_request("echoObj2");
284 std::cerr << "After request" << std::endl;
285 req->add_in_arg() <<= Objref;
286 std::cerr << "After add_in_arg" << std::endl;
287 req->add_out_arg() <<= Objout;
288 std::cerr << "After add_out_arg" << std::endl;
289 req->set_return_type(CORBA::_tc_void);
290 std::cerr << "After set_return_type" << std::endl;
292 std::cerr << "After invoke" << std::endl;
293 exc =req->env()->exception();
296 std::cerr << "The raised exception is of Type:" << exc->_name() << std::endl;
298 //end of DII on echoObj2
301 req = echoref->_request("echoObjVec");
302 CORBA::Any *aAny = new CORBA::Any();
305 CORBA::TypeCode_var any_tc2=aAny->type();
306 CORBA::TypeCode_var tc2=orb->create_sequence_tc(0,any_tc2);
307 DynamicAny::DynAny_var dynany2 = dynFactory->create_dyn_any_from_type_code(tc2);
308 DynamicAny::DynSequence_var ds2 = DynamicAny::DynSequence::_narrow(dynany2);
310 DynamicAny::DynAny_var temp=ds2->current_component();
311 temp->from_any(*aAny);
313 temp=ds2->current_component();
314 CORBA::Any *aAny2 = new CORBA::Any();
316 CORBA::Object_var zzobj ;
317 *aAny2 >>= CORBA::Any::to_object(zzobj) ;
318 temp->insert_reference(zzobj);
321 CORBA::Any_var seqany2=ds2->to_any();
324 arguments = req->arguments() ;
325 arguments->add_value( "s1" , seqany2 , CORBA::ARG_IN ) ;
328 out2.replace(tc2, (void*) 0);
329 arguments->add_value( "s2" , out2 , CORBA::ARG_OUT );
330 req->set_return_type(CORBA::_tc_void);
333 CORBA::Exception *exc2 =req->env()->exception();
336 std::cerr << "The raised exception is of Type:" << exc2->_name() << std::endl;
337 if(strcmp(exc2->_name(),"MARSHAL") == 0)
339 const char* ms = ((CORBA::MARSHAL*)exc2)->NP_minorString();
341 std::cerr << "(CORBA::MARSHAL: minor = " << ms << ")" << std::endl;
346 CORBA::Any *ob=arguments->item(1)->value();
347 DynamicAny::DynAny_var dynany= dynFactory->create_dyn_any(*ob);
348 DynamicAny::DynSequence_ptr ds=DynamicAny::DynSequence::_narrow(dynany);
349 DynamicAny::AnySeq_var as=ds->get_elements();
350 int length=as->length();
352 for(int i=0;i<length; i++)
354 CORBA::TypeCode_var t=as[i].type();
358 DEBTRACE(xobj->_PD_repoId);
363 //end of DII on echoObjVec
365 // Delete allocated objects to remove memory leaks (valgrind tests)
369 catch(DynamicAny::DynAny::TypeMismatch& ex)
371 std::cerr << "Caught a DynamicAny::DynAny::TypeMismatch exception" << std::endl;
373 catch(DynamicAny::DynAny::InvalidValue& ex)
375 std::cerr << "Caught a DynamicAny::DynAny::InvalidValue exception" << std::endl;
377 catch(CORBA::COMM_FAILURE& ex)
379 std::cerr << "Caught system exception COMM_FAILURE -- unable to contact the object." << std::endl;
381 catch(CORBA::SystemException&)
383 std::cerr << "Caught a CORBA::SystemException." << std::endl;
385 catch(CORBA::Exception&)
387 std::cerr << "Caught CORBA::Exception." << std::endl;
389 catch(omniORB::fatalException& fe)
391 std::cerr << "Caught omniORB::fatalException:" << std::endl;
392 std::cerr << " file: " << fe.file() << std::endl;
393 std::cerr << " line: " << fe.line() << std::endl;
394 std::cerr << " mesg: " << fe.errmsg() << std::endl;
398 std::cerr << "Caught unknown exception." << std::endl;