/* * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * Licensed Materials - Property of IBM * RMI-IIOP v1.0 * Copyright IBM Corp. 1998 1999 All Rights Reserved * */ package com.sun.corba.se.impl.orbutil; import javax.rmi.CORBA.Util; import javax.rmi.PortableRemoteObject; import java.util.Hashtable; import java.util.Stack; import java.io.IOException; import java.util.EmptyStackException; import com.sun.corba.se.impl.util.Utility; import com.sun.corba.se.impl.io.IIOPInputStream; import com.sun.corba.se.impl.io.IIOPOutputStream; import com.sun.corba.se.impl.util.RepositoryId; import com.sun.corba.se.impl.util.Utility; import org.omg.CORBA.TCKind; import org.omg.CORBA.MARSHAL; import org.omg.CORBA.CompletionStatus; import org.omg.CORBA.portable.IndirectionException; import com.sun.org.omg.SendingContext.CodeBase; import java.security.AccessController; import java.security.PrivilegedAction; /** * This class overrides behavior of our current ValueHandlerImpl to * provide backwards compatibility with JDK 1.3.0. */ public class ValueHandlerImpl_1_3 extends com.sun.corba.se.impl.io.ValueHandlerImpl { public ValueHandlerImpl_1_3(){ super(); } public ValueHandlerImpl_1_3(boolean isInputStream) { super(isInputStream); } /** * Writes the value to the stream using java semantics. * @param out The stream to write the value to * @param value The value to be written to the stream **/ public void writeValue(org.omg.CORBA.portable.OutputStream _out, java.io.Serializable value) { super.writeValue(_out, value); } /** * Reads a value from the stream using java semantics. * @param in The stream to read the value from * @param clazz The type of the value to be read in * @param sender The sending context runtime **/ public java.io.Serializable readValue(org.omg.CORBA.portable.InputStream _in, int offset, java.lang.Class clazz, String repositoryID, org.omg.SendingContext.RunTime _sender) { return super.readValue(_in, offset, clazz, repositoryID, _sender); } /** * Returns the repository ID for the given RMI value Class. * @param clz The class to return a repository ID for. * @return the repository ID of the Class. **/ public java.lang.String getRMIRepositoryID(java.lang.Class clz) { return RepositoryId_1_3.createForJavaType(clz); } /** * Indicates whether the given Class performs custom or * default marshaling. * @param clz The class to test for custom marshaling. * @return True if the class performs custom marshaling, false * if it does not. **/ public boolean isCustomMarshaled(java.lang.Class clz) { return super.isCustomMarshaled(clz); } /** * Returns the CodeBase for this ValueHandler. This is used by * the ORB runtime. The server sends the service context containing * the IOR for this CodeBase on the first GIOP reply. The clients * do the same on the first GIOP request. * @return the SendingContext.CodeBase of this ValueHandler. **/ public org.omg.SendingContext.RunTime getRunTimeCodeBase() { return super.getRunTimeCodeBase(); } /** * If the value contains a writeReplace method then the result * is returned. Otherwise, the value itself is returned. * @return the true value to marshal on the wire. **/ public java.io.Serializable writeReplace(java.io.Serializable value) { return super.writeReplace(value); } // methods supported for backward compatability so that the appropriate // Rep-id calculations take place based on the ORB version /** * Returns a boolean of whether or not RepositoryId indicates * FullValueDescriptor. * used for backward compatability */ public boolean useFullValueDescription(Class clazz, String repositoryID) throws IOException { return RepositoryId_1_3.useFullValueDescription(clazz, repositoryID); } public String getClassName(String id) { RepositoryId_1_3 repID = RepositoryId_1_3.cache.getId(id); return repID.getClassName(); } public Class getClassFromType(String id) throws ClassNotFoundException { RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); return repId.getClassFromType(); } public Class getAnyClassFromType(String id) throws ClassNotFoundException { RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); return repId.getAnyClassFromType(); } public String createForAnyType(Class cl) { return RepositoryId_1_3.createForAnyType(cl); } public String getDefinedInId(String id) { RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); return repId.getDefinedInId(); } public String getUnqualifiedName(String id) { RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); return repId.getUnqualifiedName(); } public String getSerialVersionUID(String id) { RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); return repId.getSerialVersionUID(); } public boolean isAbstractBase(Class clazz) { return RepositoryId_1_3.isAbstractBase(clazz); } public boolean isSequence(String id) { RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); return repId.isSequence(); } /** * Preserves the incorrect 1.3 behavior which truncates Java chars in * arrays to 8-bit CORBA chars. Bug 4367783. This enables us to * continue interoperating with our legacy ORBs. If this goes into * Ladybird, then Ladybird and Kestrel will interoperate as long as * people don't use chars greater than 8-bits. */ protected void writeCharArray(org.omg.CORBA_2_3.portable.OutputStream out, char[] array, int offset, int length) { out.write_char_array(array, offset, length); } /** * Preserves the incorrect 1.3 behavior which truncates Java chars in * arrays to 8-bit CORBA chars. Bug 4367783. This enables us to * continue interoperating with our legacy ORBs. If this goes into * Ladybird, then Ladybird and Kestrel will interoperate as long as * people don't use chars greater than 8-bits. */ protected void readCharArray(org.omg.CORBA_2_3.portable.InputStream in, char[] array, int offset, int length) { in.read_char_array(array, offset, length); } protected final String getOutputStreamClassName() { return "com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3"; } protected final String getInputStreamClassName() { return "com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3"; } /** * Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this. * The correct behavior is for a Java char to map to a CORBA wchar, * but our older code mapped it to a CORBA char. */ protected TCKind getJavaCharTCKind() { return TCKind.tk_char; } }