package org.jacorb.test.bugs.bug927; import java.util.HashMap; import org.omg.CORBA.Any; import org.omg.CORBA.LocalObject; import org.omg.CORBA.OBJECT_NOT_EXIST; import org.omg.PortableServer.POA; import org.omg.PortableServer.Servant; import org.omg.PortableServer.ServantLocator; import org.omg.CORBA.INTERNAL; class ServantLocatorImpl extends LocalObject implements ServantLocator { private POA poa; private org.omg.PortableInterceptor.Current piCurrent; private HashMap<String,Servant> m_activateObjectMap = new HashMap<String,Servant>(); ServantLocatorImpl(POA poa, org.omg.PortableInterceptor.Current piCurrent) { this.poa = poa; this.piCurrent = piCurrent; } void addStringToSlotId(String methodName) { try { Any slotDataAsAny = piCurrent.get_slot( MyInitializer.slot_id); // Get the slot data as a string String s = null; String slotDataAsStr = "<no_slot_data>"; if( slotDataAsAny.type().kind().value() != org.omg.CORBA.TCKind._tk_null && null != (s = slotDataAsAny.extract_string())) { slotDataAsStr = s; } slotDataAsStr += ":" + methodName; slotDataAsAny.insert_string(slotDataAsStr); piCurrent.set_slot( MyInitializer.slot_id, slotDataAsAny); } catch (Exception e) { throw new INTERNAL ("Caught " + e); } } public Servant preinvoke(byte[] oid, POA adapter, String operation , org.omg.PortableServer.ServantLocatorPackage.CookieHolder the_cookie) throws org.omg.PortableServer.ForwardRequest { String strOid = new String(oid); addStringToSlotId("preinvoke"); // Search for the servant that handles this strOid Servant servant = m_activateObjectMap.get(strOid); if (null == servant) { throw new OBJECT_NOT_EXIST(); } return servant; } public void postinvoke(byte[] oid, POA adapter, String operation , java.lang.Object the_cookie, Servant the_servant) { addStringToSlotId("postinvoke"); } public org.omg.CORBA.Object registerObject(String strOid, String typeId, Servant servant) throws org.omg.PortableServer.POAPackage.WrongPolicy { byte[] oidAsBytes = strOid.getBytes(); org.omg.CORBA.Object obj = poa.create_reference_with_id(oidAsBytes, typeId); // save in aom m_activateObjectMap.put(strOid, servant); return obj; } }