CORBA::Any::to_object::to_object (CORBA::Object_out obj) : ref_ (obj.ptr ()) { }
int TAO_Object_Adapter::dispatch (TAO::ObjectKey &key, TAO_ServerRequest &request, CORBA::Object_out forward_to) { if (key.length() < TAO_Root_POA::TAO_OBJECTKEY_PREFIX_SIZE || ACE_OS::memcmp (key.get_buffer (), &TAO_Root_POA::objectkey_prefix[0], TAO_Root_POA::TAO_OBJECTKEY_PREFIX_SIZE) != 0) { return TAO_Adapter::DS_MISMATCHED_KEY; } int result = 0; #if TAO_HAS_INTERCEPTORS == 1 TAO::ServerRequestInterceptor_Adapter *sri_adapter = orb_core_.serverrequestinterceptor_adapter (); try { if (sri_adapter != 0) { #if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1 CORBA::OctetSeq_var ocs; sri_adapter->tao_ft_interception_point (request, 0, // args 0, // nargs 0, // servant_upcall 0, // exceptions 0, // nexceptions ocs.out ()); /// If we have a cached result, just go ahead and send the reply /// and let us return if (ocs.ptr () != 0) { // request.result_seq ( request.send_cached_reply (ocs.inout ()); return TAO_Adapter::DS_OK; } // If a PortableInterceptor::ForwardRequest exception was // thrown, then set the forward_to object reference and return // with the appropriate return status. forward_to.ptr () = request.forward_location (); if (request.is_forwarded ()) { return TAO_Adapter::DS_FORWARD; } #endif /*TAO_HAS_EXTENDED_FT_INTERCEPTORS*/ // The receive_request_service_contexts() interception point // must be invoked before the operation is dispatched to the // servant. sri_adapter->receive_request_service_contexts (request, 0, // args 0, // nargs 0, // servant_upcall 0, // exceptions 0); // nexceptions // If a PortableInterceptor::ForwardRequest exception was // thrown, then set the forward_to object reference and return // with the appropriate return status. forward_to.ptr () = request.forward_location (); if (request.is_forwarded ()) { return TAO_Adapter::DS_FORWARD; } } #endif /* TAO_HAS_INTERCEPTORS == 1 */ result = this->dispatch_servant (key, request, forward_to); #if TAO_HAS_INTERCEPTORS == 1 if (result == TAO_Adapter::DS_FORWARD) { request.reply_status (GIOP::LOCATION_FORWARD); request.pi_reply_status (PortableInterceptor::LOCATION_FORWARD); request.forward_location (forward_to.ptr ()); if (sri_adapter != 0) { sri_adapter->send_other (request, 0, // args 0, // nargs 0, // servant_upcall 0, // exceptions 0 // nexceptions ); } } } catch ( ::CORBA::Exception& ex) { // Just assume the current exception is a system exception, the // status can only change when the interceptor changes this // and this is only done when the sri_adapter is available. If we // don't have an sri_adapter we just rethrow the exception PortableInterceptor::ReplyStatus status = PortableInterceptor::SYSTEM_EXCEPTION; if (sri_adapter != 0) { request.caught_exception (&ex); sri_adapter->send_exception (request, 0, // args 0, // nargs 0, // servant_upcall 0, // exceptions 0); // nexceptions status = request.pi_reply_status (); } // Only re-throw the exception if it hasn't been transformed by // the send_exception() interception point (e.g. to a // LOCATION_FORWARD). if (status == PortableInterceptor::SYSTEM_EXCEPTION || status == PortableInterceptor::USER_EXCEPTION) { throw; } } #endif /* TAO_HAS_INTERCEPTORS == 1 */ return result; }