package org.jacorb.test.bugs.bugjac192b; import org.jacorb.orb.portableInterceptor.ClientRequestInfoImpl; import org.omg.CORBA.INTERNAL; import org.omg.CORBA.ORB; import org.omg.CORBA.ORBPackage.InvalidName; import org.omg.IOP.TAG_INTERNET_IOP; import org.omg.IOP.TaggedProfile; import org.omg.PortableInterceptor.ClientRequestInfo; import org.omg.PortableInterceptor.ClientRequestInterceptor; import org.omg.PortableInterceptor.ForwardRequest; import org.omg.RTCORBA.RTORBHelper; /** * <code>AInterceptor</code> is a client request interceptor to test * that interceptors are still called on local objects after a * system exception has been thrown. * * @author Nick Cross */ public class AInterceptor extends org.omg.CORBA.LocalObject implements ClientRequestInterceptor { /** * <code>once</code> is used a toggle to determine whether to throw * an exception. */ private static boolean once; /** * <code>send_request</code> will throw an exception upon the first call * and return normally upon the second. * * @param ri a <code>ClientRequestInfo</code> value * @exception ForwardRequest if an error occurs */ public void send_request( ClientRequestInfo ri ) throws ForwardRequest { TaggedProfile effProfile = ri.effective_profile(); if ( ! once && effProfile.tag == TAG_INTERNET_IOP.value && ri.forward_reference() == null) { try { ORB orb = ((ClientRequestInfoImpl)ri).orb(); // This will throw an exception RTORBHelper.narrow (orb.resolve_initial_references("A_DUMMY_RESULE")); } catch (InvalidName e) { once = true; throw new INTERNAL ("Caught invalid name " + e); } } else if (once) { BugJac192bTest.interceptorCalled = true; } } /** * <code>name</code> (default impl). * * @return a <code>String</code> value */ public String name() { return "AInterceptor"; } /** * <code>destroy</code> (default impl). */ public void destroy() { } /** * <code>send_poll</code> (default impl). * * @param ri a <code>ClientRequestInfo</code> value */ public void send_poll( ClientRequestInfo ri ) { } /** * <code>receive_reply</code> (default impl). * * @param ri a <code>ClientRequestInfo</code> value */ public void receive_reply( ClientRequestInfo ri ) { } /** * <code>receive_exception</code> (default impl). * * @param ri a <code>ClientRequestInfo</code> value * @exception ForwardRequest if an error occurs */ public void receive_exception( ClientRequestInfo ri ) throws ForwardRequest { } /** * <code>receive_other</code> (default impl). * * @param ri a <code>ClientRequestInfo</code> value * @exception ForwardRequest if an error occurs */ public void receive_other( ClientRequestInfo ri ) throws ForwardRequest { } }