# HG changeset patch # User chegar # Date 1376598799 -3600 # Node ID 6b5db99e194c8d41cd08fd59d63dea55098d0ab7 # Parent 0717fc6f2960e3b49390412e264c2df0f8c689d6# Parent d411c60a8c2fe8fdc572af907775e90f7eefd513 Merge diff -r 0717fc6f2960 -r 6b5db99e194c .hgtags --- a/.hgtags Fri Aug 09 14:24:17 2013 +0100 +++ b/.hgtags Thu Aug 15 21:33:19 2013 +0100 @@ -224,3 +224,4 @@ 8d492f1dfd1b131a4c7886ee6b59528609f7e4fe jdk8-b100 a013024b07475782f1fa8e196e950b34b4077663 jdk8-b101 528c7e76eaeee022817ee085668459bc97cf5665 jdk8-b102 +49c4a777fdfd648d4c3fffc940fdb97a23108ca8 jdk8-b103 diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/copyobject/JavaInputStream.sjava --- a/src/share/classes/com/sun/corba/se/impl/copyobject/JavaInputStream.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,528 +0,0 @@ -/* - * Copyright (c) 2004, 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. - */ -package com.sun.corba.se.impl.encoding; - -import java.io.IOException; -import java.io.Serializable; -import java.math.BigDecimal; -import java.nio.ByteBuffer; - -import org.omg.CORBA.TypeCode; -import org.omg.CORBA.Principal; -import org.omg.CORBA.Any; - -import com.sun.org.omg.SendingContext.CodeBase; - -import com.sun.corba.se.pept.protocol.MessageMediator; - -import com.sun.corba.se.spi.logging.CORBALogDomains; -import com.sun.corba.se.spi.orb.ORB; -import com.sun.corba.se.spi.ior.iiop.GIOPVersion; -import com.sun.corba.se.spi.protocol.CorbaMessageMediator; - -import com.sun.corba.se.impl.logging.ORBUtilSystemException; -import com.sun.corba.se.impl.encoding.CodeSetConversion; -import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry; - -/** - * This is delegates to the real implementation. - * - * NOTE: - * - * Before using the stream for valuetype unmarshaling, one must call - * performORBVersionSpecificInit(). - */ -public abstract class CDRInputStream - extends org.omg.CORBA_2_3.portable.InputStream - implements com.sun.corba.se.impl.encoding.MarshalInputStream, - org.omg.CORBA.DataInputStream, org.omg.CORBA.portable.ValueInputStream -{ - protected CorbaMessageMediator messageMediator; - private CDRInputStreamBase impl; - - // We can move this out somewhere later. For now, it serves its purpose - // to create a concrete CDR delegate based on the GIOP version. - private static class InputStreamFactory { - - public static CDRInputStreamBase newInputStream(ORB orb, GIOPVersion version) - { - switch(version.intValue()) { - case GIOPVersion.VERSION_1_0: - return new CDRInputStream_1_0(); - case GIOPVersion.VERSION_1_1: - return new CDRInputStream_1_1(); - case GIOPVersion.VERSION_1_2: - return new CDRInputStream_1_2(); - default: - ORBUtilSystemException wrapper = ORBUtilSystemException.get( orb, - CORBALogDomains.RPC_ENCODING ) ; - throw wrapper.unsupportedGiopVersion( version ) ; - } - } - } - - // Required for the case when a ClientResponseImpl is - // created with a SystemException due to a dead server/closed - // connection with no warning. Note that the stream will - // not be initialized in this case. - // - // Probably also required by ServerRequestImpl. - // - // REVISIT. - public CDRInputStream() { - } - - public CDRInputStream(CDRInputStream is) { - impl = is.impl.dup(); - impl.setParent(this); - } - - public CDRInputStream(org.omg.CORBA.ORB orb, - ByteBuffer byteBuffer, - int size, - boolean littleEndian, - GIOPVersion version, - BufferManagerRead bufMgr) - { - impl = InputStreamFactory.newInputStream( (ORB)orb, version); - - impl.init(orb, byteBuffer, size, littleEndian, bufMgr); - - impl.setParent(this); - } - - // org.omg.CORBA.portable.InputStream - public final boolean read_boolean() { - return impl.read_boolean(); - } - - public final char read_char() { - return impl.read_char(); - } - - public final char read_wchar() { - return impl.read_wchar(); - } - - public final byte read_octet() { - return impl.read_octet(); - } - - public final short read_short() { - return impl.read_short(); - } - - public final short read_ushort() { - return impl.read_ushort(); - } - - public final int read_long() { - return impl.read_long(); - } - - public final int read_ulong() { - return impl.read_ulong(); - } - - public final long read_longlong() { - return impl.read_longlong(); - } - - public final long read_ulonglong() { - return impl.read_ulonglong(); - } - - public final float read_float() { - return impl.read_float(); - } - - public final double read_double() { - return impl.read_double(); - } - - public final String read_string() { - return impl.read_string(); - } - - public final String read_wstring() { - return impl.read_wstring(); - } - - public final void read_boolean_array(boolean[] value, int offset, int length) { - impl.read_boolean_array(value, offset, length); - } - - public final void read_char_array(char[] value, int offset, int length) { - impl.read_char_array(value, offset, length); - } - - public final void read_wchar_array(char[] value, int offset, int length) { - impl.read_wchar_array(value, offset, length); - } - - public final void read_octet_array(byte[] value, int offset, int length) { - impl.read_octet_array(value, offset, length); - } - - public final void read_short_array(short[] value, int offset, int length) { - impl.read_short_array(value, offset, length); - } - - public final void read_ushort_array(short[] value, int offset, int length) { - impl.read_ushort_array(value, offset, length); - } - - public final void read_long_array(int[] value, int offset, int length) { - impl.read_long_array(value, offset, length); - } - - public final void read_ulong_array(int[] value, int offset, int length) { - impl.read_ulong_array(value, offset, length); - } - - public final void read_longlong_array(long[] value, int offset, int length) { - impl.read_longlong_array(value, offset, length); - } - - public final void read_ulonglong_array(long[] value, int offset, int length) { - impl.read_ulonglong_array(value, offset, length); - } - - public final void read_float_array(float[] value, int offset, int length) { - impl.read_float_array(value, offset, length); - } - - public final void read_double_array(double[] value, int offset, int length) { - impl.read_double_array(value, offset, length); - } - - public final org.omg.CORBA.Object read_Object() { - return impl.read_Object(); - } - - public final TypeCode read_TypeCode() { - return impl.read_TypeCode(); - } - public final Any read_any() { - return impl.read_any(); - } - - public final Principal read_Principal() { - return impl.read_Principal(); - } - - public final int read() throws java.io.IOException { - return impl.read(); - } - - public final java.math.BigDecimal read_fixed() { - return impl.read_fixed(); - } - - public final org.omg.CORBA.Context read_Context() { - return impl.read_Context(); - } - - public final org.omg.CORBA.Object read_Object(java.lang.Class clz) { - return impl.read_Object(clz); - } - - public final org.omg.CORBA.ORB orb() { - return impl.orb(); - } - - // org.omg.CORBA_2_3.portable.InputStream - public final java.io.Serializable read_value() { - return impl.read_value(); - } - - public final java.io.Serializable read_value(java.lang.Class clz) { - return impl.read_value(clz); - } - - public final java.io.Serializable read_value(org.omg.CORBA.portable.BoxedValueHelper factory) { - return impl.read_value(factory); - } - - public final java.io.Serializable read_value(java.lang.String rep_id) { - return impl.read_value(rep_id); - } - - public final java.io.Serializable read_value(java.io.Serializable value) { - return impl.read_value(value); - } - - public final java.lang.Object read_abstract_interface() { - return impl.read_abstract_interface(); - } - - public final java.lang.Object read_abstract_interface(java.lang.Class clz) { - return impl.read_abstract_interface(clz); - } - // com.sun.corba.se.impl.encoding.MarshalInputStream - - public final void consumeEndian() { - impl.consumeEndian(); - } - - public final int getPosition() { - return impl.getPosition(); - } - - // org.omg.CORBA.DataInputStream - - public final java.lang.Object read_Abstract () { - return impl.read_Abstract(); - } - - public final java.io.Serializable read_Value () { - return impl.read_Value(); - } - - public final void read_any_array (org.omg.CORBA.AnySeqHolder seq, int offset, int length) { - impl.read_any_array(seq, offset, length); - } - - public final void read_boolean_array (org.omg.CORBA.BooleanSeqHolder seq, int offset, int length) { - impl.read_boolean_array(seq, offset, length); - } - - public final void read_char_array (org.omg.CORBA.CharSeqHolder seq, int offset, int length) { - impl.read_char_array(seq, offset, length); - } - - public final void read_wchar_array (org.omg.CORBA.WCharSeqHolder seq, int offset, int length) { - impl.read_wchar_array(seq, offset, length); - } - - public final void read_octet_array (org.omg.CORBA.OctetSeqHolder seq, int offset, int length) { - impl.read_octet_array(seq, offset, length); - } - - public final void read_short_array (org.omg.CORBA.ShortSeqHolder seq, int offset, int length) { - impl.read_short_array(seq, offset, length); - } - - public final void read_ushort_array (org.omg.CORBA.UShortSeqHolder seq, int offset, int length) { - impl.read_ushort_array(seq, offset, length); - } - - public final void read_long_array (org.omg.CORBA.LongSeqHolder seq, int offset, int length) { - impl.read_long_array(seq, offset, length); - } - - public final void read_ulong_array (org.omg.CORBA.ULongSeqHolder seq, int offset, int length) { - impl.read_ulong_array(seq, offset, length); - } - - public final void read_ulonglong_array (org.omg.CORBA.ULongLongSeqHolder seq, int offset, int length) { - impl.read_ulonglong_array(seq, offset, length); - } - - public final void read_longlong_array (org.omg.CORBA.LongLongSeqHolder seq, int offset, int length) { - impl.read_longlong_array(seq, offset, length); - } - - public final void read_float_array (org.omg.CORBA.FloatSeqHolder seq, int offset, int length) { - impl.read_float_array(seq, offset, length); - } - - public final void read_double_array (org.omg.CORBA.DoubleSeqHolder seq, int offset, int length) { - impl.read_double_array(seq, offset, length); - } - - // org.omg.CORBA.portable.ValueBase - public final String[] _truncatable_ids() { - return impl._truncatable_ids(); - } - - // java.io.InputStream - public final int read(byte b[]) throws IOException { - return impl.read(b); - } - - public final int read(byte b[], int off, int len) throws IOException { - return impl.read(b, off, len); - } - - public final long skip(long n) throws IOException { - return impl.skip(n); - } - - public final int available() throws IOException { - return impl.available(); - } - - public final void close() throws IOException { - impl.close(); - } - - public final void mark(int readlimit) { - impl.mark(readlimit); - } - - public final void reset() { - impl.reset(); - } - - public final boolean markSupported() { - return impl.markSupported(); - } - - public abstract CDRInputStream dup(); - - // Needed by TCUtility - public final java.math.BigDecimal read_fixed(short digits, short scale) { - return impl.read_fixed(digits, scale); - } - - public final boolean isLittleEndian() { - return impl.isLittleEndian(); - } - - protected final ByteBuffer getByteBuffer() { - return impl.getByteBuffer(); - } - - protected final void setByteBuffer(ByteBuffer byteBuffer) { - impl.setByteBuffer(byteBuffer); - } - - protected final void setByteBufferWithInfo(ByteBufferWithInfo bbwi) { - impl.setByteBufferWithInfo(bbwi); - } - - public final int getBufferLength() { - return impl.getBufferLength(); - } - - protected final void setBufferLength(int value) { - impl.setBufferLength(value); - } - - protected final int getIndex() { - return impl.getIndex(); - } - - protected final void setIndex(int value) { - impl.setIndex(value); - } - - public final void orb(org.omg.CORBA.ORB orb) { - impl.orb(orb); - } - - public final GIOPVersion getGIOPVersion() { - return impl.getGIOPVersion(); - } - - public final BufferManagerRead getBufferManager() { - return impl.getBufferManager(); - } - - // This should be overridden by any stream (ex: IIOPInputStream) - // which wants to read values. Thus, TypeCodeInputStream doesn't - // have to do this. - public CodeBase getCodeBase() { - return null; - } - - // Use Latin-1 for GIOP 1.0 or when code set negotiation was not - // performed. - protected CodeSetConversion.BTCConverter createCharBTCConverter() { - return CodeSetConversion.impl().getBTCConverter(OSFCodeSetRegistry.ISO_8859_1, - impl.isLittleEndian()); - } - - // Subclasses must decide what to do here. It's inconvenient to - // make the class and this method abstract because of dup(). - protected abstract CodeSetConversion.BTCConverter createWCharBTCConverter(); - - // Prints the current buffer in a human readable form - void printBuffer() { - impl.printBuffer(); - } - - /** - * Aligns the current position on the given octet boundary - * if there are enough bytes available to do so. Otherwise, - * it just returns. This is used for some (but not all) - * GIOP 1.2 message headers. - */ - public void alignOnBoundary(int octetBoundary) { - impl.alignOnBoundary(octetBoundary); - } - - // Needed by request and reply messages for GIOP versions >= 1.2 only. - public void setHeaderPadding(boolean headerPadding) { - impl.setHeaderPadding(headerPadding); - } - - /** - * This must be called after determining the proper ORB version, - * and setting it on the stream's ORB instance. It can be called - * after reading the service contexts, since that is the only place - * we can get the ORB version info. - * - * Trying to unmarshal things requiring repository IDs before calling - * this will result in NullPtrExceptions. - */ - public void performORBVersionSpecificInit() { - // In the case of SystemExceptions, a stream is created - // with its default constructor (and thus no impl is set). - if (impl != null) - impl.performORBVersionSpecificInit(); - } - - /** - * Resets any internal references to code set converters. - * This is useful for forcing the CDR stream to reacquire - * converters (probably from its subclasses) when state - * has changed. - */ - public void resetCodeSetConverters() { - impl.resetCodeSetConverters(); - } - - public void setMessageMediator(MessageMediator messageMediator) - { - this.messageMediator = (CorbaMessageMediator) messageMediator; - } - - public MessageMediator getMessageMediator() - { - return messageMediator; - } - - // ValueInputStream ----------------------------- - - public void start_value() { - impl.start_value(); - } - - public void end_value() { - impl.end_value(); - } -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/copyobject/JavaOutputStream.sjava --- a/src/share/classes/com/sun/corba/se/impl/copyobject/JavaOutputStream.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,435 +0,0 @@ -/* - * Copyright (c) 2004, 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. - */ -package com.sun.corba.se.impl.encoding; - -import java.io.IOException; -import java.io.Serializable; -import java.math.BigDecimal; -import java.nio.ByteBuffer; - -import org.omg.CORBA.TypeCode; -import org.omg.CORBA.Principal; -import org.omg.CORBA.Any; - -import com.sun.corba.se.pept.protocol.MessageMediator; - -import com.sun.corba.se.spi.orb.ORB; -import com.sun.corba.se.spi.logging.CORBALogDomains; -import com.sun.corba.se.spi.ior.iiop.GIOPVersion; -import com.sun.corba.se.spi.protocol.CorbaMessageMediator; - -import com.sun.corba.se.impl.encoding.CodeSetConversion; -import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry; -import com.sun.corba.se.impl.orbutil.ORBConstants; -import com.sun.corba.se.impl.logging.ORBUtilSystemException; - -/** - * This is delegates to the real implementation. - */ -public abstract class CDROutputStream - extends org.omg.CORBA_2_3.portable.OutputStream - implements com.sun.corba.se.impl.encoding.MarshalOutputStream, - org.omg.CORBA.DataOutputStream, org.omg.CORBA.portable.ValueOutputStream -{ -/* - private CDROutputStreamBase impl; - protected ORB orb ; - protected ORBUtilSystemException wrapper ; - protected CorbaMessageMediator corbaMessageMediator; - - - // We can move this out somewhere later. For now, it serves its purpose - // to create a concrete CDR delegate based on the GIOP version. - private static class OutputStreamFactory { - - public static CDROutputStreamBase newOutputStream(ORB orb, GIOPVersion version) - { - switch(version.intValue()) { - case GIOPVersion.VERSION_1_0: - return new CDROutputStream_1_0(); - case GIOPVersion.VERSION_1_1: - return new CDROutputStream_1_1(); - case GIOPVersion.VERSION_1_2: - return new CDROutputStream_1_2(); - default: - ORBUtilSystemException wrapper = ORBUtilSystemException.get( orb, - CORBALogDomains.RPC_ENCODING ) ; - // REVISIT - what is appropriate? INTERNAL exceptions - // are really hard to track later. - throw wrapper.unsupportedGiopVersion( version ) ; - } - } - } - - // REVISIT - These two constructors should be re-factored to better hide - // the fact that someone extending this class 'can' construct a CDROutputStream - // that does not use pooled ByteBuffers. Right now, only EncapsOutputStream - // does _not_ use pooled ByteBuffers, see EncapsOutputStream. - - // NOTE: When a stream is constructed for non-channel-backed sockets - // it notifies the constructor not to use pooled (i.e, direct) - // ByteBuffers. - - public CDROutputStream(ORB orb, - GIOPVersion version, - boolean littleEndian, - BufferManagerWrite bufferManager, - byte streamFormatVersion, - boolean usePooledByteBuffers) - { - impl = OutputStreamFactory.newOutputStream(orb, version); - impl.init(orb, littleEndian, bufferManager, streamFormatVersion, usePooledByteBuffers); - - impl.setParent(this); - this.orb = orb ; - this.wrapper = ORBUtilSystemException.get( orb, - CORBALogDomains.RPC_ENCODING ) ; - } - - public CDROutputStream(ORB orb, - GIOPVersion version, - boolean littleEndian, - BufferManagerWrite bufferManager, - byte streamFormatVersion) - { - this(orb, version, littleEndian, bufferManager, streamFormatVersion, true); - } -*/ - - private ByteArrayOutputStream bos ; - private ObjectOutputStream oos ; - - public JavaOutputStream() - { - bos = new ByteArrayOutputStream() ; - oos = new ObjectOutputStream( bos ) ; - } - - // Provided by IIOPOutputStream and EncapsOutputStream - public org.omg.CORBA.portable.InputStream create_input_stream() - { - ObjectInputStream ois = new ByteArrayInputStream( bos.toByteArray() ) ; - - return new JavaInputStream( ois ) ; - } - - public final void write_boolean(boolean value) { - impl.write_boolean(value); - } - public final void write_char(char value) { - impl.write_char(value); - } - public final void write_wchar(char value) { - impl.write_wchar(value); - } - public final void write_octet(byte value) { - impl.write_octet(value); - } - public final void write_short(short value) { - impl.write_short(value); - } - public final void write_ushort(short value) { - impl.write_ushort(value); - } - public final void write_long(int value) { - impl.write_long(value); - } - public final void write_ulong(int value) { - impl.write_ulong(value); - } - public final void write_longlong(long value) { - impl.write_longlong(value); - } - public final void write_ulonglong(long value) { - impl.write_ulonglong(value); - } - public final void write_float(float value) { - impl.write_float(value); - } - public final void write_double(double value) { - impl.write_double(value); - } - public final void write_string(String value) { - impl.write_string(value); - } - public final void write_wstring(String value) { - impl.write_wstring(value); - } - - public final void write_boolean_array(boolean[] value, int offset, int length) { - impl.write_boolean_array(value, offset, length); - } - public final void write_char_array(char[] value, int offset, int length) { - impl.write_char_array(value, offset, length); - } - public final void write_wchar_array(char[] value, int offset, int length) { - impl.write_wchar_array(value, offset, length); - } - public final void write_octet_array(byte[] value, int offset, int length) { - impl.write_octet_array(value, offset, length); - } - public final void write_short_array(short[] value, int offset, int length) { - impl.write_short_array(value, offset, length); - } - public final void write_ushort_array(short[] value, int offset, int length){ - impl.write_ushort_array(value, offset, length); - } - public final void write_long_array(int[] value, int offset, int length) { - impl.write_long_array(value, offset, length); - } - public final void write_ulong_array(int[] value, int offset, int length) { - impl.write_ulong_array(value, offset, length); - } - public final void write_longlong_array(long[] value, int offset, int length) { - impl.write_longlong_array(value, offset, length); - } - public final void write_ulonglong_array(long[] value, int offset,int length) { - impl.write_ulonglong_array(value, offset, length); - } - public final void write_float_array(float[] value, int offset, int length) { - impl.write_float_array(value, offset, length); - } - public final void write_double_array(double[] value, int offset, int length) { - impl.write_double_array(value, offset, length); - } - public final void write_Object(org.omg.CORBA.Object value) { - impl.write_Object(value); - } - public final void write_TypeCode(TypeCode value) { - impl.write_TypeCode(value); - } - public final void write_any(Any value) { - impl.write_any(value); - } - - public final void write_Principal(Principal value) { - impl.write_Principal(value); - } - - public final void write(int b) throws java.io.IOException { - impl.write(b); - } - - public final void write_fixed(java.math.BigDecimal value) { - impl.write_fixed(value); - } - - public final void write_Context(org.omg.CORBA.Context ctx, - org.omg.CORBA.ContextList contexts) { - impl.write_Context(ctx, contexts); - } - - public final org.omg.CORBA.ORB orb() { - return impl.orb(); - } - - // org.omg.CORBA_2_3.portable.OutputStream - public final void write_value(java.io.Serializable value) { - impl.write_value(value); - } - - public final void write_value(java.io.Serializable value, java.lang.Class clz) { - impl.write_value(value, clz); - } - - public final void write_value(java.io.Serializable value, String repository_id) { - impl.write_value(value, repository_id); - } - - public final void write_value(java.io.Serializable value, - org.omg.CORBA.portable.BoxedValueHelper factory) { - impl.write_value(value, factory); - } - - public final void write_abstract_interface(java.lang.Object obj) { - impl.write_abstract_interface(obj); - } - - // java.io.OutputStream - public final void write(byte b[]) throws IOException { - impl.write(b); - } - - public final void write(byte b[], int off, int len) throws IOException { - impl.write(b, off, len); - } - - public final void flush() throws IOException { - impl.flush(); - } - - public final void close() throws IOException { - impl.close(); - } - - // com.sun.corba.se.impl.encoding.MarshalOutputStream - public final void start_block() { - impl.start_block(); - } - - public final void end_block() { - impl.end_block(); - } - - public final void putEndian() { - impl.putEndian(); - } - - public void writeTo(java.io.OutputStream s) - throws IOException - { - impl.writeTo(s); - } - - public final byte[] toByteArray() { - return impl.toByteArray(); - } - - // org.omg.CORBA.DataOutputStream - public final void write_Abstract (java.lang.Object value) { - impl.write_Abstract(value); - } - - public final void write_Value (java.io.Serializable value) { - impl.write_Value(value); - } - - public final void write_any_array(org.omg.CORBA.Any[] seq, int offset, int length) { - impl.write_any_array(seq, offset, length); - } - - public void setMessageMediator(MessageMediator messageMediator) - { - this.corbaMessageMediator = (CorbaMessageMediator) messageMediator; - } - - public MessageMediator getMessageMediator() - { - return corbaMessageMediator; - } - - // org.omg.CORBA.portable.ValueBase - public final String[] _truncatable_ids() { - return impl._truncatable_ids(); - } - - // Other - protected final int getSize() { - return impl.getSize(); - } - - protected final int getIndex() { - return impl.getIndex(); - } - - protected int getRealIndex(int index) { - // Used in indirections. Overridden by TypeCodeOutputStream. - return index; - } - - protected final void setIndex(int value) { - impl.setIndex(value); - } - - protected final ByteBuffer getByteBuffer() { - return impl.getByteBuffer(); - } - - protected final void setByteBuffer(ByteBuffer byteBuffer) { - impl.setByteBuffer(byteBuffer); - } - - public final boolean isLittleEndian() { - return impl.isLittleEndian(); - } - - // XREVISIT - return to final if possible - // REVISIT - was protected - need access from msgtypes test. - public ByteBufferWithInfo getByteBufferWithInfo() { - return impl.getByteBufferWithInfo(); - } - - protected void setByteBufferWithInfo(ByteBufferWithInfo bbwi) { - impl.setByteBufferWithInfo(bbwi); - } - - // REVISIT: was protected - but need to access from xgiop. - public final BufferManagerWrite getBufferManager() { - return impl.getBufferManager(); - } - - public final void write_fixed(java.math.BigDecimal bigDecimal, short digits, short scale) { - impl.write_fixed(bigDecimal, digits, scale); - } - - public final void writeOctetSequenceTo(org.omg.CORBA.portable.OutputStream s) { - impl.writeOctetSequenceTo(s); - } - - public final GIOPVersion getGIOPVersion() { - return impl.getGIOPVersion(); - } - - public final void writeIndirection(int tag, int posIndirectedTo) { - impl.writeIndirection(tag, posIndirectedTo); - } - - // Use Latin-1 for GIOP 1.0 or when code set negotiation was not - // performed. - protected CodeSetConversion.CTBConverter createCharCTBConverter() { - return CodeSetConversion.impl().getCTBConverter(OSFCodeSetRegistry.ISO_8859_1); - } - - // Subclasses must decide what to do here. It's inconvenient to - // make the class and this method abstract because of dup(). - protected abstract CodeSetConversion.CTBConverter createWCharCTBConverter(); - - protected final void freeInternalCaches() { - impl.freeInternalCaches(); - } - - void printBuffer() { - impl.printBuffer(); - } - - public void alignOnBoundary(int octetBoundary) { - impl.alignOnBoundary(octetBoundary); - } - - // Needed by request and reply messages for GIOP versions >= 1.2 only. - public void setHeaderPadding(boolean headerPadding) { - impl.setHeaderPadding(headerPadding); - } - - // ValueOutputStream ----------------------------- - - public void start_value(String rep_id) { - impl.start_value(rep_id); - } - - public void end_value() { - impl.end_value(); - } -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/interceptors/ThreadCurrentStack.sjava --- a/src/share/classes/com/sun/corba/se/impl/interceptors/ThreadCurrentStack.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2000, 2002, 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. - */ - -package com.sun.corba.se.impl.interceptors; - -import com.sun.corba.se.impl.corba.AnyImpl; -import org.omg.PortableInterceptor.Current; -import org.omg.PortableInterceptor.InvalidSlot; - -import com.sun.corba.se.impl.util.MinorCodes; -import com.sun.corba.se.impl.core.ORB; - -/** - * ThreadCurrentStack is the container of PICurrent instances for each thread - */ -public class ThreadCurrentStack -{ - // PICurrentPool is the container for reusable PICurrents - private class PICurrentPool { - - // Contains a list of reusable PICurrents - private java.util.ArrayList pool; - - // High water mark for the pool - // If the pool size reaches this limit then putPICurrent will - // not put PICurrent to the pool. - private static final int HIGH_WATER_MARK = 5; - - // currentIndex points to the last PICurrent in the list - private int currentIndex; - - PICurrentPool( ) { - pool = new java.util.ArrayList( HIGH_WATER_MARK ); - currentIndex = 0; - } - - /** - * Puts PICurrent to the re-usable pool. - */ - void putPICurrent( PICurrent current ) { - // If there are enough PICurrents in the pool, then don't add - // this current to the pool. - if( currentIndex >= HIGH_WATER_MARK ) { - return; - } - pool.add(currentIndex , current); - currentIndex++; - } - - /** - * Gets PICurrent from the re-usable pool. - */ - PICurrent getPICurrent( ) { - // If there are no entries in the pool then return null - if( currentIndex == 0 ) { - return null; - } - // Works like a stack, Gets the last one added first - currentIndex--; - return (PICurrent) pool.get(currentIndex); - } - } - - // Contains all the active PICurrents for each thread. - // The ArrayList is made to behave like a stack. - private java.util.ArrayList currentContainer; - - // Keeps track of number of PICurrents in the stack. - private int currentIndex; - - // For Every Thread there will be a pool of re-usable ThreadCurrent's - // stored in PICurrentPool - private PICurrentPool currentPool; - - // The orb associated with this ThreadCurrentStack - private ORB piOrb; - - /** - * Constructs the stack and and PICurrentPool - */ - ThreadCurrentStack( ORB piOrb, PICurrent current ) { - this.piOrb = piOrb; - currentIndex = 0; - currentContainer = new java.util.ArrayList( ); - currentPool = new PICurrentPool( ); - currentContainer.add( currentIndex, current ); - currentIndex++; - } - - - /** - * pushPICurrent goes through the following steps - * 1: Checks to see if there is any PICurrent in PICurrentPool - * If present then use that instance to push into the ThreadCurrentStack - * - * 2:If there is no PICurrent in the pool, then creates a new one and pushes - * that into the ThreadCurrentStack - */ - void pushPICurrent( ) { - PICurrent current = currentPool.getPICurrent( ); - if( current == null ) { - // get an existing PICurrent to get the slotSize - PICurrent currentTemp = peekPICurrent(); - current = new PICurrent( piOrb, currentTemp.getSlotSize( )); - } - currentContainer.add( currentIndex, current ); - currentIndex++; - } - - /** - * popPICurrent does the following - * 1: pops the top PICurrent in the ThreadCurrentStack - * - * 2: resets the slots in the PICurrent which resets the slotvalues to - * null if there are any previous sets. - * - * 3: pushes the reset PICurrent into the PICurrentPool to reuse - */ - void popPICurrent( ) { - // Do not pop the PICurrent, If there is only one. - // This should not happen, But an extra check for safety. - if( currentIndex <= 1 ) { - throw new org.omg.CORBA.INTERNAL( - "Cannot pop the only PICurrent in the stack", - MinorCodes.CANT_POP_ONLY_CURRENT_2, - CompletionStatus.COMPLETED_NO ); - } - currentIndex--; - PICurrent current = (PICurrent)currentContainer.get( currentIndex ); - current.resetSlots( ); - currentPool.putPICurrent( current ); - } - - /** - * peekPICurrent gets the top PICurrent in the ThreadCurrentStack without - * popping. - */ - PICurrent peekPICurrent( ) { - return (PICurrent) currentContainer.get( currentIndex - 1); - } - -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/orbutil/DefineWrapper.sjava --- a/src/share/classes/com/sun/corba/se/impl/orbutil/DefineWrapper.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2001, 2012, 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. - */ - -package com.sun.corba.se.impl.orbutil ; - -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; - -/** This class provides just a main method. Its purpose is to allow -D arguments to -* set up the system properties when starting programs with tools like OptimizeIt that -* make this difficult or impossible. -* -* Invocation: {java launcher of some kind} DefineClass -Dxxx=yyy -Dxxx=yyy ... {class name} arg0, arg1, ... -* Result: updates system properties with -D args, then uses reflection to invoke {class name}.main with the args -*/ - -class DefineWrapper { - public static void main( String[] args ) - { - int numberDefines = args.length ; - String className = null ; - - for (int ctr=0; ctr and get methods. - - - // - // Perform case sensitivity test first. This applies to all - // method names AND attributes. Compare each method name and - // attribute to all other method names and attributes. If names - // differ only in case, apply mangling as defined in section 1.3.2.7 - // of Java2IDL spec. Note that we compare using the original names. - // - for(Iterator outerIter=allMethodInfo.values().iterator(); - outerIter.hasNext();) { - IDLMethodInfo outer = (IDLMethodInfo) outerIter.next(); - for(Iterator innerIter = allMethodInfo.values().iterator(); - innerIter.hasNext();) { - IDLMethodInfo inner = (IDLMethodInfo) innerIter.next(); - - if( (outer != inner) && - (!outer.originalName.equals(inner.originalName)) && - outer.originalName.equalsIgnoreCase(inner.originalName) ) { - outer.mangledName = - mangleCaseSensitiveCollision(outer.originalName); - break; - } - - } - } - - for(Iterator iter = allMethodInfo.values().iterator(); - iter.hasNext();) { - IDLMethodInfo next = (IDLMethodcurrentInfo) iter.next(); - next.mangledName = - mangleIdentifier(next.mangledName, - next.propertyType != null); - } - - // - // Now check for overloaded method names and apply 1.3.2.6. - // - for(Iterator outerIter=allMethodInfo.values().iterator(); - outerIter.hasNext();) { - IDLMethodInfo outer = (IDLMethodInfo) outerIter.next(); - if (outer.propertyType != null) { - continue; - } - for(Iterator innerIter = allMethodInfo.values().iterator(); - innerIter.hasNext();) { - IDLMethodInfo inner = (IDLMethodInfo) innerIter.next(); - - if( (outer != inner) && - (inner.propertyType == null) && - outer.originalName.equals(inner.originalName) ) { - outer.mangledName = mangleOverloadedMethod - (outer.mangledName, outer.method); - break; - } - } - } - - // - // Now mangle any properties that clash with method names. - // - for(Iterator outerIter=allMethodInfo.values().iterator(); - outerIter.hasNext();) { - IDLMethodInfo outer = (IDLMethodInfo) outerIter.next(); - if(outer.propertyType == null) { - continue; - } - for(Iterator innerIter = allMethodInfo.values().iterator(); - innerIter.hasNext();) { - IDLMethodInfo inner = (IDLMethodInfo) innerIter.next(); - if( (outer != inner) && - (inner.propertyType == null) && - outer.mangledName.equals(inner.mangledName) ) { - outer.mangledName = outer.mangledName + - ATTRIBUTE_METHOD_CLASH_MANGLE_CHARS; - break; - } - } - } - - // - // Ensure that no mapped method names clash with mapped name - // of container(1.3.2.9). This is a case insensitive comparison. - // - for (int ctr=0; ctr and get, - // map only is to an attribute, and leave the - // get method alone. - if( IDLNameToMethodMap_.containsKey(idlName) ) { - // @@@ I18N - Method clash = (Method) IDLNameToMethodMap_.get(idlName); - MethodInfo clashMethodInfo = - (MethodInfo)allMethodInfo.get( clash ) ; - if (clashMethodInfo.isBooleanProperty() && - next.isReadProperty()) { - // fix idlName - } else if (clashMethodInfo.isReadProperty() && - next.isBooleanProperty()) { - // Remove entry under idlName - // put entry into table under correct name - } else { - throw new IllegalStateException("Error : methods " + - clash + " and " + next.method + - " both result in IDL name '" + idlName + "'"); - } - } - - IDLNameToMethodMap_.put(idlName, next.method); - } - - return; - - } - - - /** - * Perform all necessary stand-alone identifier mangling operations - * on a java identifier that is being transformed into an IDL name. - * That is, mangling operations that don't require looking at anything - * else but the identifier itself. This covers sections 1.3.2.2, 1.3.2.3, - * and 1.3.2.4 of the Java2IDL spec. Method overloading and - * case-sensitivity checks are handled elsewhere. - */ - - private static String mangleIdentifier(String identifier) { - return mangleIdentifier(identifier, false); - } - - private static String mangleIdentifier(String identifier, boolean attribute) { - - String mangledName = identifier; - - // - // Apply leading underscore test (1.3.2.3) - // This should be done before IDL Keyword clash test, since clashing - // IDL keywords are mangled by adding a leading underscore. - // - if( hasLeadingUnderscore(mangledName) ) { - mangledName = mangleLeadingUnderscore(mangledName); - } - - // - // Apply IDL keyword clash test (1.3.2.2). - // This is not needed for attributes since when the full property - // name is composed it cannot clash with an IDL keyword. - // (Also, rmic doesn't do it.) - // - - if( !attribute && isIDLKeyword(mangledName) ) { - mangledName = mangleIDLKeywordClash(mangledName); - } - - // - // Replace illegal IDL identifier characters (1.3.2.4) - // for all method names and attributes. - // - if( !isIDLIdentifier(mangledName) ) { - mangledName = mangleUnicodeChars(mangledName); - } - - return mangledName; - } - - /** - * Checks whether a java identifier clashes with an - * IDL keyword. Note that this is a case-insensitive - * comparison. - * - * Used to implement section 1.3.2.2 of Java2IDL spec. - */ - private static boolean isIDLKeyword(String identifier) { - - String identifierAllCaps = identifier.toUpperCase(); - - return idlKeywords_.contains(identifierAllCaps); - } - - private static String mangleIDLKeywordClash(String identifier) { - return UNDERSCORE + identifier; - } - - private static String mangleLeadingUnderscore(String identifier) { - return LEADING_UNDERSCORE_CHAR + identifier; - } - - /** - * Checks whether a java identifier starts with an underscore. - * Used to implement section 1.3.2.3 of Java2IDL spec. - */ - private static boolean hasLeadingUnderscore(String identifier) { - return identifier.startsWith(UNDERSCORE); - } - - /** - * Implements Section 1.3.2.4 of Java2IDL Mapping. - * All non-IDL identifier characters must be replaced - * with their Unicode representation. - */ - static String mangleUnicodeChars(String identifier) { - StringBuffer mangledIdentifier = new StringBuffer(); - - for(int i = 0; i < identifier.length(); i++) { - char nextChar = identifier.charAt(i); - if( isIDLIdentifierChar(nextChar) ) { - mangledIdentifier.append(nextChar); - } else { - String unicode = charToUnicodeRepresentation(nextChar); - mangledIdentifier.append(unicode); - } - } - - return mangledIdentifier.toString(); - } - - /** - * Implements mangling portion of Section 1.3.2.7 of Java2IDL spec. - * This method only deals with the actual mangling. Decision about - * whether case-sensitive collision mangling is required is made - * elsewhere. - * - * - * "...a mangled name is generated consisting of the original name - * followed by an underscore separated list of decimal indices - * into the string, where the indices identify all the upper case - * characters in the original string. Indices are zero based." - * - */ - String mangleCaseSensitiveCollision(String identifier) { - - StringBuffer mangledIdentifier = new StringBuffer(identifier); - - // There is always at least one trailing underscore, whether or - // not the identifier has uppercase letters. - mangledIdentifier.append(UNDERSCORE); - - boolean needUnderscore = false; - for(int i = 0; i < identifier.length(); i++) { - char next = identifier.charAt(i); - if( Character.isUpperCase(next) ) { - // This bit of logic is needed to ensure that we have - // an underscore separated list of indices but no - // trailing underscores. Basically, after we have at least - // one uppercase letter, we always put an undercore before - // printing the next one. - if( needUnderscore ) { - mangledIdentifier.append(UNDERSCORE); - } - mangledIdentifier.append(i); - needUnderscore = true; - } - } - - return mangledIdentifier.toString(); - } - - private static String mangleContainerClash(String identifier) { - return identifier + ID_CONTAINER_CLASH_CHAR; - } - - /** - * Implements Section 1.3.2.9 of Java2IDL Mapping. Container in this - * context means the name of the java Class(excluding package) in which - * the identifier is defined. Comparison is case-insensitive. - */ - private static boolean identifierClashesWithContainer - (String mappedContainerName, String identifier) { - - return identifier.equalsIgnoreCase(mappedContainerName); - } - - /** - * Returns Unicode mangling as defined in Section 1.3.2.4 of - * Java2IDL spec. - * - * "For Java identifiers that contain illegal OMG IDL identifier - * characters such as '$' or Unicode characters outside of ISO Latin 1, - * any such illegal characters are replaced by "U" followed by the - * 4 hexadecimal characters(in upper case) representing the Unicode - * value. So, the Java name a$b is mapped to aU0024b and - * x\u03bCy is mapped to xU03BCy." - */ - public static String charToUnicodeRepresentation(char c) { - - int orig = (int) c; - StringBuffer hexString = new StringBuffer(); - - int value = orig; - - while( value > 0 ) { - int div = value / 16; - int mod = value % 16; - hexString.insert(0, HEX_DIGITS[mod]); - value = div; - } - - int numZerosToAdd = 4 - hexString.length(); - for(int i = 0; i < numZerosToAdd; i++) { - hexString.insert(0, "0"); - } - - hexString.insert(0, "U"); - return hexString.toString(); - } - - private static boolean isIDLIdentifier(String identifier) { - - boolean isIdentifier = true; - - for(int i = 0; i < identifier.length(); i++) { - char nextChar = identifier.charAt(i); - // 1st char must be alphbetic. - isIdentifier = (i == 0) ? - isIDLAlphabeticChar(nextChar) : - isIDLIdentifierChar(nextChar); - if( !isIdentifier ) { - break; - } - } - - return isIdentifier; - - } - - private static boolean isIDLIdentifierChar(char c) { - return (isIDLAlphabeticChar(c) || - isIDLDecimalDigit(c) || - isUnderscore(c)); - } - - /** - * True if character is one of 114 Alphabetic characters as - * specified in Table 2 of Chapter 3 in CORBA spec. - */ - private static boolean isIDLAlphabeticChar(char c) { - - // NOTE that we can't use the java.lang.Character - // isUpperCase, isLowerCase, etc. methods since they - // include many characters other than the Alphabetic list in - // the CORBA spec. Instead, we test for inclusion in the - // Unicode value ranges for the corresponding legal characters. - - boolean alphaChar = - ( - // A - Z - ((c >= 0x0041) && (c <= 0x005A)) - - || - - // a - z - ((c >= 0x0061) && (c <= 0x007A)) - - || - - // other letter uppercase, other letter lowercase, which is - // the entire upper half of C1 Controls except X and / - ((c >= 0x00C0) && (c <= 0x00FF) - && (c != 0x00D7) && (c != 0x00F7))); - - return alphaChar; - } - - /** - * True if character is one of 10 Decimal Digits - * specified in Table 3 of Chapter 3 in CORBA spec. - */ - private static boolean isIDLDecimalDigit(char c) { - return ( (c >= 0x0030) && (c <= 0x0039) ); - } - - private static boolean isUnderscore(char c) { - return ( c == 0x005F ); - } - - /** - * Mangle an overloaded method name as defined in Section 1.3.2.6 of - * Java2IDL spec. Current value of method name is passed in as argument. - * We can't start from original method name since the name might have - * been partially mangled as a result of the other rules. - */ - private static String mangleOverloadedMethod(String mangledName, Method m) { - - IDLTypesUtil idlTypesUtil = new IDLTypesUtil(); - - // Start by appending the separator string - String newMangledName = mangledName + OVERLOADED_TYPE_SEPARATOR; - - Class[] parameterTypes = m.getParameterTypes(); - - for(int i = 0; i < parameterTypes.length; i++) { - Class nextParamType = parameterTypes[i]; - - if( i > 0 ) { - newMangledName = newMangledName + OVERLOADED_TYPE_SEPARATOR; - } - IDLType idlType = classToIDLType(nextParamType); - - String moduleName = idlType.getModuleName(); - String memberName = idlType.getMemberName(); - - String typeName = (moduleName.length() > 0) ? - moduleName + UNDERSCORE + memberName : memberName; - - if( !idlTypesUtil.isPrimitive(nextParamType) && - (idlTypesUtil.getSpecialCaseIDLTypeMapping(nextParamType) - == null) && - isIDLKeyword(typeName) ) { - typeName = mangleIDLKeywordClash(typeName); - } - - typeName = mangleUnicodeChars(typeName); - - newMangledName = newMangledName + typeName; - } - - return newMangledName; - } - - - private static IDLType classToIDLType(Class c) { - - IDLType idlType = null; - IDLTypesUtil idlTypesUtil = new IDLTypesUtil(); - - if( idlTypesUtil.isPrimitive(c) ) { - - idlType = idlTypesUtil.getPrimitiveIDLTypeMapping(c); - - } else if( c.isArray() ) { - - // Calculate array depth, as well as base element type. - Class componentType = c.getComponentType(); - int numArrayDimensions = 1; - while(componentType.isArray()) { - componentType = componentType.getComponentType(); - numArrayDimensions++; - } - IDLType componentIdlType = classToIDLType(componentType); - - String[] modules = BASE_IDL_ARRAY_MODULE_TYPE; - if( componentIdlType.hasModule() ) { - modules = (String[])ObjectUtility.concatenateArrays( modules, - componentIdlType.getModules() ) ; - } - - String memberName = BASE_IDL_ARRAY_ELEMENT_TYPE + - numArrayDimensions + UNDERSCORE + - componentIdlType.getMemberName(); - - idlType = new IDLType(c, modules, memberName); - - } else { - idlType = idlTypesUtil.getSpecialCaseIDLTypeMapping(c); - - if (idlType == null) { - // Section 1.3.2.5 of Java2IDL spec defines mangling rules for - // inner classes. - String memberName = getUnmappedContainerName(c); - - // replace inner class separator with double underscore - memberName = memberName.replaceAll("\\$", - INNER_CLASS_SEPARATOR); - - if( hasLeadingUnderscore(memberName) ) { - memberName = mangleLeadingUnderscore(memberName); - } - - // Get raw package name. If there is a package, it - // will still have the "." separators and none of the - // mangling rules will have been applied. - String packageName = getPackageName(c); - - if (packageName == null) { - idlType = new IDLType( c, memberName ) ; - } else { - // If this is a generated IDL Entity Type we need to - // prepend org_omg_boxedIDL per sections 1.3.5 and 1.3.9 - if (idlTypesUtil.isEntity(c)) { - packageName = "org.omg.boxedIDL." + packageName ; - } - - // Section 1.3.2.1 and 1.3.2.6 of Java2IDL spec defines - // rules for mapping java packages to IDL modules and for - // mangling module name portion of type name. NOTE that - // of the individual identifier mangling rules, - // only the leading underscore test is done here. - // The other two(IDL Keyword, Illegal Unicode chars) are - // done in mangleOverloadedMethodName. - StringTokenizer tokenizer = - new StringTokenizer(packageName, "."); - - String[] modules = new String[ tokenizer.countTokens() ] ; - int index = 0 ; - while (tokenizer.hasMoreElements()) { - String next = tokenizer.nextToken(); - String nextMangled = hasLeadingUnderscore(next) ? - mangleLeadingUnderscore(next) : next; - - modules[index++] = nextMangled ; - } - - idlType = new IDLType(c, modules, memberName); - } - } - } - - return idlType; - } - - /** - * Return Class' package name or null if there is no package. - */ - private static String getPackageName(Class c) { - Package thePackage = c.getPackage(); - String packageName = null; - - // Try to get package name by introspection. Some classloaders might - // not provide this information, so check for null. - if( thePackage != null ) { - packageName = thePackage.getName(); - } else { - // brute force method - String fullyQualifiedClassName = c.getName(); - int lastDot = fullyQualifiedClassName.indexOf('.'); - packageName = (lastDot == -1) ? null : - fullyQualifiedClassName.substring(0, lastDot); - } - return packageName; - } - - private static String getMappedContainerName(Class c) { - String unmappedName = getUnmappedContainerName(c); - - return mangleIdentifier(unmappedName); - } - - /** - * Return portion of class name excluding package name. - */ - private static String getUnmappedContainerName(Class c) { - - String memberName = null; - String packageName = getPackageName(c); - - String fullyQualifiedClassName = c.getName(); - - if( packageName != null ) { - int packageLength = packageName.length(); - memberName = fullyQualifiedClassName.substring(packageLength + 1); - } else { - memberName = fullyQualifiedClassName; - - } - - return memberName; - } - - /** - * Internal helper class for tracking information related to each - * interface method while we're building the name translation table. - */ - private static class IDLMethodInfo - { - public Method method; - public String propertyType; - - // If this is a property, originalName holds the original - // attribute name. Otherwise, it holds the original method name. - public String originalName; - - // If this is a property, mangledName holds the mangled attribute - // name. Otherwise, it holds the mangled method name. - public String mangledName; - - } - - public String toString() { - - StringBuffer contents = new StringBuffer(); - contents.append("IDLNameTranslator[" ); - for( int ctr=0; ctr 0 ) { - String className = args[0]; - try { - remoteInterface = Class.forName(className); - } catch(Exception e) { - e.printStackTrace(); - System.exit(-1); - } - } - - System.out.println("Building name translation for " + remoteInterface); - try { - IDLNameTranslator nameTranslator = - IDLNameTranslatorImpl.get(remoteInterface); - System.out.println(nameTranslator); - } catch(IllegalStateException ise) { - ise.printStackTrace(); - } - } -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil_save.sjava --- a/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil_save.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,544 +0,0 @@ -/* - * Copyright (c) 2004, 2012, 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. - */ - -package com.sun.corba.se.impl.presentation.rmi ; - -import java.lang.reflect.Method; -import java.lang.reflect.Field; -import java.util.Set; -import java.util.HashSet; -import java.util.Iterator; - -/** - * Utility class for testing RMI/IDL Types as defined in - * Section 1.2 of The Java Language to IDL Mapping. Note that - * these are static checks only. Runtime checks, such as those - * described in Section 1.2.3, #3, are not covered. - */ -public class IDLTypesUtil { - - public static final String JAVA_GET_PROPERTY_PREFIX = "get"; - public static final String JAVA_SET_PROPERTY_PREFIX = "set"; - public static final String JAVA_IS_PROPERTY_PREFIX = "is"; - - public static final int VALID_TYPE = 0; - public static final int INVALID_TYPE = 1; - - /** - * Validate a class to ensure it conforms to the rules for a - * Java RMI/IIOP interface. - * - * @throws IDLTypeException if not a valid RMI/IIOP interface. - */ - public void validateRemoteInterface(Class c) throws IDLTypeException - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - if( !c.isInterface() ) { - String msg = "Class " + c + " must be a java interface."; - throw new IDLTypeException(msg); - } - - if( !java.rmi.Remote.class.isAssignableFrom(c) ) { - String msg = "Class " + c + " must extend java.rmi.Remote, " + - "either directly or indirectly."; - throw new IDLTypeException(msg); - } - - // Get all methods, including super-interface methods. - Method[] methods = c.getMethods(); - - for(int i = 0; i < methods.length; i++) { - Method next = methods[i]; - validateExceptions(next); - } - - // Removed because of bug 4989053 - // validateDirectInterfaces(c); - validateConstants(c); - - return; - } - - public boolean isRemoteInterface(Class c) - { - boolean remoteInterface = true; - try { - validateRemoteInterface(c); - } catch(IDLTypeException ite) { - remoteInterface = false; - } - - return remoteInterface; - } - - /** - * Section 1.2.2 Primitive Types - */ - public boolean isPrimitive(Class c) - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - return c.isPrimitive(); - } - - /** - * Section 1.2.4 - */ - public boolean isValue(Class c) - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - return - (!c.isInterface() && - java.io.Serializable.class.isAssignableFrom(c) && - !java.rmi.Remote.class.isAssignableFrom(c)); - } - - /** - * Section 1.2.5 - */ - public boolean isArray(Class c) - { - boolean arrayType = false; - - if( c == null ) { - throw new IllegalArgumentException(); - } - - if( c.isArray() ) { - Class componentType = c.getComponentType(); - arrayType = - (isPrimitive(componentType) || isRemoteInterface(componentType) || - isEntity(componentType) || isException(componentType) || - isValue(componentType) || isObjectReference(componentType) ); - } - - return arrayType; - } - - /** - * Section 1.2.6 - */ - public boolean isException(Class c) - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - // Must be a checked exception, not including RemoteException or - // its subclasses. - return isCheckedException(c) && !isRemoteException(c) && isValue(c); - } - - public boolean isRemoteException(Class c) - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - return java.rmi.RemoteException.class.isAssignableFrom(c) ; - } - - public boolean isCheckedException(Class c) - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - return Throwable.class.isAssignableFrom(c) && - !RuntimeException.class.isAssignableFrom(c) && - !Error.class.isAssignableFrom(c) ; - } - - /** - * Section 1.2.7 - */ - public boolean isObjectReference(Class c) - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - return (c.isInterface() && - org.omg.CORBA.Object.class.isAssignableFrom(c)); - } - - /** - * Section 1.2.8 - */ - public boolean isEntity(Class c) - { - if( c == null ) { - throw new IllegalArgumentException(); - } - - Class superClass = c.getSuperclass(); - return (!c.isInterface() && - (superClass != null) && - (org.omg.CORBA.portable.IDLEntity.class.isAssignableFrom(c))); - } - - public String javaPropertyPrefixToIDL( String javaPrefix ) - { - return "_" + javaPrefix + "_" ; - } - - /** - * Return the property type if given method is legal property accessor as defined in - * Section 1.3.4.3 of Java2IDL spec. Result is one of: JAVA_GET_PROPERTY_PREFIX, - * JAVA_SET_PROPERTY_PREFIX, JAVA_IS_PROPERTY_PREFIX. - */ - public String propertyAccessorMethodType(Method m, Class c) { - - String methodName = m.getName(); - Class returnType = m.getReturnType(); - Class[] parameters = m.getParameterTypes(); - Class[] exceptionTypes = m.getExceptionTypes(); - String propertyType = null; - - if( methodName.startsWith(JAVA_GET_PROPERTY_PREFIX) ) { - - if((parameters.length == 0) && (returnType != Void.TYPE) && - !hasCorrespondingReadProperty(m, c, JAVA_IS_PROPERTY_PREFIX) { - propertyType = JAVA_GET_PROPERTY_PREFIX; - } - - } else if( methodName.startsWith(JAVA_SET_PROPERTY_PREFIX) ) { - - if((returnType == Void.TYPE) && (parameters.length == 1)) { - if (hasCorrespondingReadProperty(m, c, JAVA_GET_PROPERTY_PREFIX) || - hasCorrespondingReadProperty(m, c, JAVA_IS_PROPERTY_PREFIX)) { - propertyType = JAVA_SET_PROPERTY_PREFIX; - } - } - - } else if( methodName.startsWith(JAVA_IS_PROPERTY_PREFIX) ) { - if((parameters.length == 0) && (returnType == Boolean.TYPE)) { - propertyType = JAVA_IS_PROPERTY_PREFIX; - } - } - - // Some final checks that apply to all properties. - if( propertyType != null ) { - if(!validPropertyExceptions(m) || - (methodName.length() <= propertyType.length())) { - propertyType = null; - } - } - - return propertyType ; - } - - private boolean hasCorrespondingReadProperty - (Method writeProperty, Class c, String readPropertyPrefix) { - - String writePropertyMethodName = writeProperty.getName(); - Class[] writePropertyParameters = writeProperty.getParameterTypes(); - boolean foundReadProperty = false; - - try { - // Look for a valid corresponding Read property - String readPropertyMethodName = - writePropertyMethodName.replaceFirst - (JAVA_SET_PROPERTY_PREFIX, readPropertyPrefix); - Method readPropertyMethod = c.getMethod(readPropertyMethodName, - new Class[] {}); - foundReadProperty = - ((propertyAccessorMethodType(readPropertyMethod, c) != null) && - (readPropertyMethod.getReturnType() == - writePropertyParameters[0])); - } catch(Exception e) { - // ignore. this means we didn't find a corresponding get property. - } - - return foundReadProperty; - } - - public String getAttributeNameForProperty(String propertyName) { - String attributeName = null; - String prefix = null; - - if( propertyName.startsWith(JAVA_GET_PROPERTY_PREFIX) ) { - prefix = JAVA_GET_PROPERTY_PREFIX; - } else if( propertyName.startsWith(JAVA_SET_PROPERTY_PREFIX) ) { - prefix = JAVA_SET_PROPERTY_PREFIX; - } else if( propertyName.startsWith(JAVA_IS_PROPERTY_PREFIX) ) { - prefix = JAVA_IS_PROPERTY_PREFIX; - } - - if( (prefix != null) && (prefix.length() < propertyName.length()) ) { - String remainder = propertyName.substring(prefix.length()); - if( (remainder.length() >= 2) && - Character.isUpperCase(remainder.charAt(0)) && - Character.isUpperCase(remainder.charAt(1)) ) { - // don't set the first letter to lower-case if the - // first two are upper-case - attributeName = remainder; - } else { - attributeName = Character.toLowerCase(remainder.charAt(0)) + - remainder.substring(1); - } - } - - return attributeName; - } - - /** - * Return IDL Type name for primitive types as defined in - * Section 1.3.3 of Java2IDL spec or null if not a primitive type. - */ - public IDLType getPrimitiveIDLTypeMapping(Class c) { - - if( c == null ) { - throw new IllegalArgumentException(); - } - - if( c.isPrimitive() ) { - if( c == Void.TYPE ) { - return new IDLType( c, "void" ) ; - } else if( c == Boolean.TYPE ) { - return new IDLType( c, "boolean" ) ; - } else if( c == Character.TYPE ) { - return new IDLType( c, "wchar" ) ; - } else if( c == Byte.TYPE ) { - return new IDLType( c, "octet" ) ; - } else if( c == Short.TYPE ) { - return new IDLType( c, "short" ) ; - } else if( c == Integer.TYPE ) { - return new IDLType( c, "long" ) ; - } else if( c == Long.TYPE ) { - return new IDLType( c, "long_long" ) ; - } else if( c == Float.TYPE ) { - return new IDLType( c, "float" ) ; - } else if( c == Double.TYPE ) { - return new IDLType( c, "double" ) ; - } - } - - return null; - } - - /** - * Return IDL Type name for special case type mappings as defined in - * Table 1-1 of Java2IDL spec or null if given class is not a special - * type. - */ - public IDLType getSpecialCaseIDLTypeMapping(Class c) { - - if( c == null ) { - throw new IllegalArgumentException(); - } - - if( c == java.lang.Object.class ) { - return new IDLType( c, new String[] { "java", "lang" }, - "Object" ) ; - } else if( c == java.lang.String.class ) { - return new IDLType( c, new String[] { "CORBA" }, - "WStringValue" ) ; - } else if( c == java.lang.Class.class ) { - return new IDLType( c, new String[] { "javax", "rmi", "CORBA" }, - "ClassDesc" ) ; - } else if( c == java.io.Serializable.class ) { - return new IDLType( c, new String[] { "java", "io" }, - "Serializable" ) ; - } else if( c == java.io.Externalizable.class ) { - return new IDLType( c, new String[] { "java", "io" }, - "Externalizable" ) ; - } else if( c == java.rmi.Remote.class ) { - return new IDLType( c, new String[] { "java", "rmi" }, - "Remote" ) ; - } else if( c == org.omg.CORBA.Object.class ) { - return new IDLType( c, "Object" ) ; - } else { - return null; - } - } - - /** - * Implements 1.2.3 #2 and #4 - */ - private void validateExceptions(Method method) throws IDLTypeException { - - Class[] exceptions = method.getExceptionTypes(); - - boolean declaresRemoteExceptionOrSuperClass = false; - - // Section 1.2.3, #2 - for(int eIndex = 0; eIndex < exceptions.length; eIndex++) { - Class exception = exceptions[eIndex]; - if( isRemoteExceptionOrSuperClass(exception) ) { - declaresRemoteExceptionOrSuperClass = true; - break; - } - } - - if( !declaresRemoteExceptionOrSuperClass ) { - String msg = "Method '" + method + "' must throw at least one " + - "exception of type java.rmi.RemoteException or one of its " + - "super-classes"; - throw new IDLTypeException(msg); - } - - // Section 1.2.3, #4 - // See also bug 4972402 - // For all exceptions E in exceptions, - // (isCheckedException(E) => (isValue(E) || RemoteException.isAssignableFrom( E ) ) - for(int eIndex = 0; eIndex < exceptions.length; eIndex++) { - Class exception = exceptions[eIndex]; - - if (isCheckedException(exception) && !isValue(exception) && - !isRemoteException(exception)) - { - String msg = "Exception '" + exception + "' on method '" + - method + "' is not a allowed RMI/IIOP exception type"; - throw new IDLTypeException(msg); - } - } - - return; - } - - /** - * Returns true if the method's throw clause conforms to the exception - * restrictions for properties as defined in Section 1.3.4.3 of - * Java2IDL spec. This means that for all exceptions E declared on the - * method, E isChecked => RemoteException.isAssignableFrom( E ). - */ - private boolean validPropertyExceptions(Method method) - { - Class[] exceptions = method.getExceptionTypes(); - - for(int eIndex = 0; eIndex < exceptions.length; eIndex++) { - Class exception = exceptions[eIndex]; - - if (isCheckedException(exception) && !isRemoteException(exception)) - return false ; - } - - return true; - } - - /** - * Implements Section 1.2.3, #2. - */ - private boolean isRemoteExceptionOrSuperClass(Class c) { - return - ((c == java.rmi.RemoteException.class) || - (c == java.io.IOException.class) || - (c == java.lang.Exception.class) || - (c == java.lang.Throwable.class)); - } - - /** - * Implements Section 1.2.3, #5. - */ - private void validateDirectInterfaces(Class c) throws IDLTypeException { - - Class[] directInterfaces = c.getInterfaces(); - - if( directInterfaces.length < 2 ) { - return; - } - - Set allMethodNames = new HashSet(); - Set currentMethodNames = new HashSet(); - - for(int i = 0; i < directInterfaces.length; i++) { - Class next = directInterfaces[i]; - Method[] methods = next.getMethods(); - - // Comparison is based on method names only. First collect - // all methods from current interface, eliminating duplicate - // names. - currentMethodNames.clear(); - for(int m = 0; m < methods.length; m++) { - currentMethodNames.add(methods[m].getName()); - } - - // Now check each method against list of all unique method - // names processed so far. - for(Iterator iter=currentMethodNames.iterator(); iter.hasNext();) { - String methodName = (String) iter.next(); - if( allMethodNames.contains(methodName) ) { - String msg = "Class " + c + " inherits method " + - methodName + " from multiple direct interfaces."; - throw new IDLTypeException(msg); - } else { - allMethodNames.add(methodName); - } - } - } - - return; - } - - /** - * Implements 1.2.3 #6 - */ - private void validateConstants(final Class c) - throws IDLTypeException { - - Field[] fields = null; - - try { - fields = (Field[]) - java.security.AccessController.doPrivileged - (new java.security.PrivilegedExceptionAction() { - public java.lang.Object run() throws Exception { - return c.getFields(); - } - }); - } catch(java.security.PrivilegedActionException pae) { - IDLTypeException ite = new IDLTypeException(); - ite.initCause(pae); - throw ite; - } - - for(int i = 0; i < fields.length; i++) { - Field next = fields[i]; - Class fieldType = next.getType(); - if( (fieldType != java.lang.String.class) && - !isPrimitive(fieldType) ) { - String msg = "Constant field '" + next.getName() + - "' in class '" + next.getDeclaringClass().getName() + - "' has invalid type' " + next.getType() + "'. Constants" + - " in RMI/IIOP interfaces can only have primitive" + - " types and java.lang.String types."; - throw new IDLTypeException(msg); - } - } - - - return; - } - -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientRequestImpl.sjava --- a/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientRequestImpl.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* - * Copyright (c) 1999, 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. - */ - -package com.sun.corba.se.impl.iiop; - -import com.sun.corba.se.impl.protocol.Request; -import com.sun.corba.se.impl.core.ClientRequest; -import com.sun.corba.se.impl.core.ServiceContext; -import com.sun.corba.se.impl.core.ServiceContexts; -import com.sun.corba.se.impl.core.ClientResponse; -import com.sun.corba.se.impl.core.ServerRequest; -import com.sun.corba.se.impl.core.ServerResponse; -import com.sun.corba.se.impl.corba.IOR; -import com.sun.corba.se.impl.corba.GIOPVersion; -import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase; -import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage; -import com.sun.corba.se.impl.orbutil.ORBConstants; -import com.sun.corba.se.impl.core.ORBVersion; -import com.sun.corba.se.impl.core.ORB; -import com.sun.corba.se.impl.orbutil.ORBUtility; -import com.sun.corba.se.impl.ior.ObjectKeyFactory ; -import com.sun.corba.se.impl.ior.ObjectKey ; -import com.sun.corba.se.impl.ior.ObjectKeyTemplate ; -import com.sun.corba.se.impl.ior.IIOPProfile; - -public class LocalClientRequestImpl extends IIOPOutputStream - implements ClientRequest -{ - public LocalClientRequestImpl( GIOPVersion gv, - ORB orb, IOR ior, short addrDisposition, - String operationName, boolean oneway, ServiceContexts svc, - int requestId, byte streamFormatVersion) - { - super(gv, - orb, - null, - BufferManagerFactory.newBufferManagerWrite(BufferManagerFactory.GROW), - streamFormatVersion); - - this.isOneway = oneway; - boolean responseExpected = !isOneway; - - IIOPProfile iop = ior.getProfile(); - ObjectKey okey = iop.getObjectKey(); - ObjectKeyTemplate oktemp = okey.getTemplate() ; - ORBVersion version = oktemp.getORBVersion() ; - orb.setORBVersion( version ) ; - - this.request = MessageBase.createRequest(orb, gv, requestId, - responseExpected, ior, addrDisposition, operationName, svc, null); - setMessage(request); - request.write(this); - - // mark beginning of msg body for possible later use - bodyBegin = getSize(); - } - - public int getRequestId() { - return request.getRequestId(); - } - - public boolean isOneWay() { - return isOneway; - } - - public ServiceContexts getServiceContexts() { - return request.getServiceContexts(); - } - - public String getOperationName() { - return request.getOperation(); - } - - public ObjectKey getObjectKey() { - return request.getObjectKey(); - } - - public ServerRequest getServerRequest() - { - // Set the size of the marshalled data in the message header. - getMessage().setSize( getByteBuffer(), getSize() ) ; - - // Construct a new ServerRequest out of the buffer in this ClientRequest - LocalServerRequestImpl serverRequest = new LocalServerRequestImpl( - (ORB)orb(), toByteArray(), request ) ; - - // Skip over all of the GIOP header information. This positions - // the offset in the buffer so that the skeleton can correctly read - // the marshalled arguments. - serverRequest.setIndex( bodyBegin ) ; - - return serverRequest ; - } - - public ClientResponse invoke() - { - ORB myORB = (ORB)orb() ; - - ServerResponse serverResponse = myORB.process( getServerRequest() ) ; - - LocalServerResponseImpl lsr = (LocalServerResponseImpl)serverResponse ; - - return lsr.getClientResponse() ; - } - - /** - * Check to see if the request is local. - */ - public boolean isLocal(){ - return true; - } - - private RequestMessage request; - private int bodyBegin; - private boolean isOneway; -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientResponseImpl.sjava --- a/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientResponseImpl.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* - * Copyright (c) 1999, 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. - */ - -package com.sun.corba.se.impl.iiop; - -import java.io.IOException; - -import org.omg.CORBA.SystemException; -import org.omg.CORBA.CompletionStatus; - -import com.sun.corba.se.impl.core.Response; -import com.sun.corba.se.impl.core.ClientResponse; -import com.sun.corba.se.impl.corba.IOR; -import com.sun.corba.se.impl.core.ORB; -import com.sun.corba.se.impl.core.ServiceContext; -import com.sun.corba.se.impl.core.ServiceContexts; -import com.sun.corba.se.impl.protocol.giopmsgheaders.Message; -import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage; -import com.sun.corba.se.impl.orbutil.MinorCodes; - -class LocalClientResponseImpl extends IIOPInputStream implements ClientResponse -{ - LocalClientResponseImpl(ORB orb, byte[] buf, ReplyMessage header) - { - super(orb, buf, header.getSize(), header.isLittleEndian(), header, null); - - this.reply = header; - - // NOTE (Ram J) (06/02/2000) if we set result.setIndex(bodyBegin) - // in LocalServerResponse.getClientResponse(), then we do not need - // to read the headers (done below) anymore. - // This will be an optimisation which is can be done to speed up the - // local invocation by avoiding reading the headers in the local cases. - - // BUGFIX(Ram Jeyaraman) This has been moved from - // LocalServerResponse.getClientResponse() - // Skip over all of the GIOP header information. This positions - // the offset in the buffer so that the skeleton can correctly read - // the marshalled arguments. - this.setIndex(Message.GIOPMessageHeaderLength); - - // BUGFIX(Ram Jeyaraman) For local invocations, the reply mesg fields - // needs to be set, by reading the response buffer contents - // to correctly set the exception type and other info. - this.reply.read(this); - } - - LocalClientResponseImpl(SystemException ex) - { - this.systemException = ex; - } - - public boolean isSystemException() { - if ( reply != null ) - return reply.getReplyStatus() == ReplyMessage.SYSTEM_EXCEPTION; - else - return (systemException != null); - } - - public boolean isUserException() { - if ( reply != null ) - return reply.getReplyStatus() == ReplyMessage.USER_EXCEPTION; - else - return false; - } - - public boolean isLocationForward() { - if ( reply != null ) { - return ( (reply.getReplyStatus() == ReplyMessage.LOCATION_FORWARD) || - (reply.getReplyStatus() == ReplyMessage.LOCATION_FORWARD_PERM) ); - //return reply.getReplyStatus() == ReplyMessage.LOCATION_FORWARD; - } else { - return false; - } - } - - public boolean isDifferentAddrDispositionRequested() { - if (reply != null) { - return reply.getReplyStatus() == ReplyMessage.NEEDS_ADDRESSING_MODE; - } - - return false; - } - - public short getAddrDisposition() { - if (reply != null) { - return reply.getAddrDisposition(); - } - - throw new org.omg.CORBA.INTERNAL( - "Null reply in getAddrDisposition", - MinorCodes.NULL_REPLY_IN_GET_ADDR_DISPOSITION, - CompletionStatus.COMPLETED_MAYBE); - } - - public IOR getForwardedIOR() { - if ( reply != null ) - return reply.getIOR(); - else - return null; - } - - public int getRequestId() { - if ( reply != null ) - return reply.getRequestId(); - else - throw new org.omg.CORBA.INTERNAL("Error in getRequestId"); - } - - public ServiceContexts getServiceContexts() { - if ( reply != null ) - return reply.getServiceContexts(); - else - return null; - } - - public SystemException getSystemException() { - if ( reply != null ) - return reply.getSystemException(); - else - return systemException; - } - - public java.lang.String peekUserExceptionId() { - mark(Integer.MAX_VALUE); - String result = read_string(); - reset(); - return result; - } - - /** - * Check to see if the response is local. - */ - public boolean isLocal(){ - return true; - } - - private ReplyMessage reply; - private SystemException systemException; -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerRequestImpl.sjava --- a/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerRequestImpl.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ -/* - * Copyright (c) 1999, 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. - */ - -package com.sun.corba.se.impl.iiop; - -import org.omg.CORBA.SystemException; - -import com.sun.corba.se.impl.core.ServerRequest; -import com.sun.corba.se.impl.core.ServiceContext; -import com.sun.corba.se.impl.core.DuplicateServiceContext; -import com.sun.corba.se.impl.core.UEInfoServiceContext; -import com.sun.corba.se.impl.core.ServiceContexts; -import com.sun.corba.se.impl.core.ServerResponse; -import com.sun.corba.se.impl.corba.IOR; -import com.sun.corba.se.impl.core.ORB; -import com.sun.corba.se.impl.orbutil.ORBUtility; //d11638 -import org.omg.CORBA.portable.UnknownException; -import org.omg.CORBA.UNKNOWN; -import org.omg.CORBA.CompletionStatus; -import com.sun.corba.se.impl.ior.ObjectKey; -import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase; -import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage; -import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage; - -class LocalServerRequestImpl extends IIOPInputStream implements ServerRequest { - org.omg.CORBA.portable.OutputStream replyStream; - org.omg.CORBA.portable.OutputStream exceptionReplyStream; - - LocalServerRequestImpl(ORB orb, byte[] buf, RequestMessage header) - { - super(orb, buf, header.getSize(), header.isLittleEndian(), header, null ); - - this.request = header; - } - - public int getRequestId() { - return request.getRequestId(); - } - - public boolean isOneWay() { - return !request.isResponseExpected(); - } - - public ServiceContexts getServiceContexts() { - return request.getServiceContexts(); - } - - public String getOperationName() { - return request.getOperation(); - } - - public ObjectKey getObjectKey() { - return request.getObjectKey(); - } - - public ServerResponse createResponse(ServiceContexts svc) - { - return new LocalServerResponseImpl(this, svc); - } - - public org.omg.CORBA.portable.OutputStream createReply() { - if (replyStream == null) { - replyStream = (org.omg.CORBA.portable.OutputStream) - createResponse(null); - } - return replyStream; - } - - public org.omg.CORBA.portable.OutputStream createExceptionReply() { - if (exceptionReplyStream == null) { - exceptionReplyStream = (org.omg.CORBA.portable.OutputStream) - createUserExceptionResponse(null); - } - return exceptionReplyStream; - } - - public ServerResponse createUserExceptionResponse( - ServiceContexts svc) - { - return new LocalServerResponseImpl(this, svc, true); - } - - public ServerResponse createUnknownExceptionResponse( - UnknownException ex) { - ServiceContexts contexts = null; - SystemException sys = new UNKNOWN( 0, - CompletionStatus.COMPLETED_MAYBE); - - try { - contexts = new ServiceContexts( (ORB)orb() ); - UEInfoServiceContext uei = new UEInfoServiceContext(sys); - contexts.put(uei) ; - } catch (DuplicateServiceContext d) { - // can't happen - } - - return createSystemExceptionResponse(sys,contexts); - } - - public ServerResponse createSystemExceptionResponse( - SystemException ex, ServiceContexts svc) { - - // Only do this if interceptors have been initialized on this request - // and have not completed their lifecycle (otherwise the info stack - // may be empty or have a different request's entry on top). - if (executePIInResponseConstructor()) { - // Inform Portable Interceptors of the SystemException. This is - // required to be done here because the ending interception point - // is called in the ServerResponseImpl constructor called below - // but we do not currently write the SystemException into the - // response until after the ending point is called. - ORB orb = (ORB)orb(); - orb.getPIHandler().setServerPIInfo( ex ); - } - - if (orb() != null && ((ORB)orb()).subcontractDebugFlag && ex != null) - ORBUtility.dprint(this, "Sending SystemException:", ex); - - LocalServerResponseImpl response = - new LocalServerResponseImpl(this, svc, false); - ORBUtility.writeSystemException(ex, response); - return response; - } - - public ServerResponse createLocationForward( - IOR ior, ServiceContexts svc) { - ReplyMessage reply = MessageBase.createReply( (ORB)orb(), - request.getGIOPVersion(), request.getRequestId(), - ReplyMessage.LOCATION_FORWARD, svc, ior); - LocalServerResponseImpl response = - new LocalServerResponseImpl(this, reply, ior); - - return response; - } - - private RequestMessage request; - - /** - * Check to see if the request is local. - */ - public boolean isLocal(){ - return true; - } - - private boolean _executeReturnServantInResponseConstructor = false; - - public boolean executeReturnServantInResponseConstructor() - { - return _executeReturnServantInResponseConstructor; - } - - public void setExecuteReturnServantInResponseConstructor(boolean b) - { - _executeReturnServantInResponseConstructor = b; - } - - - private boolean _executeRemoveThreadInfoInResponseConstructor = false; - - public boolean executeRemoveThreadInfoInResponseConstructor() - { - return _executeRemoveThreadInfoInResponseConstructor; - } - - public void setExecuteRemoveThreadInfoInResponseConstructor(boolean b) - { - _executeRemoveThreadInfoInResponseConstructor = b; - } - - - private boolean _executePIInResponseConstructor = false; - - public boolean executePIInResponseConstructor() { - return _executePIInResponseConstructor; - } - - public void setExecutePIInResponseConstructor( boolean b ) { - _executePIInResponseConstructor = b; - } - - // We know that we're talking to the same ValueHandler, so - // use the maximum version it supports. - public byte getStreamFormatVersionForReply() { - return ORBUtility.getMaxStreamFormatVersion(); - } -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerResponseImpl.sjava --- a/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerResponseImpl.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -/* - * Copyright (c) 1999, 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. - */ - -package com.sun.corba.se.impl.iiop; - -import org.omg.CORBA.SystemException; - -import com.sun.corba.se.impl.core.ServerResponse; -import com.sun.corba.se.impl.core.ORB; -import com.sun.corba.se.impl.corba.IOR; -import com.sun.corba.se.impl.core.ServiceContext; -import com.sun.corba.se.impl.core.ServiceContexts; -import com.sun.corba.se.impl.core.ClientResponse; -import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase; -import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage; - -class LocalServerResponseImpl - extends IIOPOutputStream - implements ServerResponse -{ - LocalServerResponseImpl(LocalServerRequestImpl request, ServiceContexts svc) - { - this(request, - MessageBase.createReply( - (ORB)request.orb(), - request.getGIOPVersion(), - request.getRequestId(), ReplyMessage.NO_EXCEPTION, - svc, null), - null); - } - - LocalServerResponseImpl(LocalServerRequestImpl request, ServiceContexts svc, - boolean user) - { - this(request, - MessageBase.createReply( - (ORB)request.orb(), - request.getGIOPVersion(), request.getRequestId(), - user ? ReplyMessage.USER_EXCEPTION : - ReplyMessage.SYSTEM_EXCEPTION, - svc, null), - null); - } - - LocalServerResponseImpl( LocalServerRequestImpl request, ReplyMessage reply, - IOR ior) - { - super(request.getGIOPVersion(), - (ORB)request.orb(), - null, - BufferManagerFactory.newBufferManagerWrite(BufferManagerFactory.GROW), - request.getStreamFormatVersionForReply()); - - setMessage(reply); - - ORB orb = (ORB)request.orb(); - - ServerResponseImpl.runServantPostInvoke(orb, request); - - if( request.executePIInResponseConstructor() ) { - // Invoke server request ending interception points (send_*): - // Note: this may end up with a SystemException or an internal - // Runtime ForwardRequest. - orb.getPIHandler().invokeServerPIEndingPoint( reply ); - - // Note this will be executed even if a ForwardRequest or - // SystemException is thrown by a Portable Interceptors ending - // point since we end up in this constructor again anyway. - orb.getPIHandler().cleanupServerPIRequest(); - - // See (Local)ServerRequestImpl.createSystemExceptionResponse - // for why this is necesary. - request.setExecutePIInResponseConstructor(false); - } - - // Once you get here then the final reply is available (i.e., - // postinvoke and interceptors have completed. - if (request.executeRemoveThreadInfoInResponseConstructor()) { - ServerResponseImpl.removeThreadInfo(orb, request); - } - - reply.write(this); - if (reply.getIOR() != null) - reply.getIOR().write(this); - - this.reply = reply; - this.ior = reply.getIOR(); - } - - public boolean isSystemException() { - if (reply != null) - return reply.getReplyStatus() == ReplyMessage.SYSTEM_EXCEPTION; - return false; - } - - public boolean isUserException() { - if (reply != null) - return reply.getReplyStatus() == ReplyMessage.USER_EXCEPTION; - return false; - } - - public boolean isLocationForward() { - if (ior != null) - return true; - return false; - } - - public IOR getForwardedIOR() { - return ior; - } - - public int getRequestId() { - if (reply != null) - return reply.getRequestId(); - return -1; - } - - public ServiceContexts getServiceContexts() { - if (reply != null) - return reply.getServiceContexts(); - return null; - } - - public SystemException getSystemException() { - if (reply != null) - return reply.getSystemException(); - return null; - } - - public ReplyMessage getReply() - { - return reply ; - } - - public ClientResponse getClientResponse() - { - // set the size of the marshalled data in the message header - getMessage().setSize(getByteBuffer(), getSize()); - - // Construct a new ClientResponse out of the buffer in this ClientRequest - LocalClientResponseImpl result = - new LocalClientResponseImpl( (ORB)orb(), toByteArray(), reply); - - // NOTE (Ram J) (06/02/2000) if we set result.setIndex(bodyBegin) here - // then the LocalClientResponse does not need to read the headers anymore. - // This will be an optimisation which is can be done to speed up the - // local invocation by avoiding reading the headers in the local cases. - - // BUGFIX(Ram Jeyaraman) result.setOffset is now done in - // LocalClientResponseImpl constructor. - /* - // Skip over all of the GIOP header information. This positions - // the offset in the buffer so that the skeleton can correctly read - // the marshalled arguments. - result.setOffset( bodyBegin ) ; - */ - - return result ; - } - - /** - * Check to see if the response is local. - */ - public boolean isLocal(){ - return true; - } - - private ReplyMessage reply; - private IOR ior; // forwarded IOR -} diff -r 0717fc6f2960 -r 6b5db99e194c src/share/classes/com/sun/corba/se/impl/transport/BufferConnectionImpl.sjava --- a/src/share/classes/com/sun/corba/se/impl/transport/BufferConnectionImpl.sjava Fri Aug 09 14:24:17 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,710 +0,0 @@ -/* - * Copyright (c) 2004, 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. - */ - -package com.sun.corba.se.impl.transport; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.nio.ByteBuffer; -import java.nio.channels.SelectableChannel; -import java.nio.channels.SelectionKey; -import java.nio.channels.SocketChannel; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.Collections; -import java.util.Hashtable; -import java.util.HashMap; -import java.util.Map; - -import org.omg.CORBA.COMM_FAILURE; -import org.omg.CORBA.CompletionStatus; -import org.omg.CORBA.DATA_CONVERSION; -import org.omg.CORBA.INTERNAL; -import org.omg.CORBA.MARSHAL; -import org.omg.CORBA.OBJECT_NOT_EXIST; -import org.omg.CORBA.SystemException; - -import com.sun.org.omg.SendingContext.CodeBase; - -import com.sun.corba.se.pept.broker.Broker; -import com.sun.corba.se.pept.encoding.InputObject; -import com.sun.corba.se.pept.encoding.OutputObject; -import com.sun.corba.se.pept.protocol.MessageMediator; -import com.sun.corba.se.pept.transport.Acceptor; -import com.sun.corba.se.pept.transport.Connection; -import com.sun.corba.se.pept.transport.ConnectionCache; -import com.sun.corba.se.pept.transport.ContactInfo; -import com.sun.corba.se.pept.transport.EventHandler; -import com.sun.corba.se.pept.transport.InboundConnectionCache; -import com.sun.corba.se.pept.transport.OutboundConnectionCache; -import com.sun.corba.se.pept.transport.ResponseWaitingRoom; -import com.sun.corba.se.pept.transport.Selector; - -import com.sun.corba.se.spi.ior.IOR; -import com.sun.corba.se.spi.ior.iiop.GIOPVersion; -import com.sun.corba.se.spi.logging.CORBALogDomains; -import com.sun.corba.se.spi.orb.ORB ; -import com.sun.corba.se.spi.orbutil.threadpool.Work; -import com.sun.corba.se.spi.protocol.CorbaMessageMediator; -import com.sun.corba.se.spi.transport.CorbaContactInfo; -import com.sun.corba.se.spi.transport.CorbaConnection; -import com.sun.corba.se.spi.transport.CorbaResponseWaitingRoom; - -import com.sun.corba.se.impl.encoding.CachedCodeBase; -import com.sun.corba.se.impl.encoding.CDRInputStream_1_0; -import com.sun.corba.se.impl.encoding.CDROutputObject; -import com.sun.corba.se.impl.encoding.CDROutputStream_1_0; -import com.sun.corba.se.impl.encoding.CodeSetComponentInfo; -import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry; -import com.sun.corba.se.impl.logging.ORBUtilSystemException; -import com.sun.corba.se.impl.orbutil.ORBConstants; -import com.sun.corba.se.impl.orbutil.ORBUtility; -import com.sun.corba.se.impl.protocol.giopmsgheaders.Message; -import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase; -import com.sun.corba.se.impl.transport.CorbaResponseWaitingRoomImpl; - -/** - * @author Ken Cavanaugh - */ -public class BufferConnectionImpl - extends - EventHandlerBase - implements - CorbaConnection, - Work -{ - // - // New transport. - // - - protected long enqueueTime; - - public SocketChannel getSocketChannel() - { - return null; - } - - // REVISIT: - // protected for test: genericRPCMSGFramework.IIOPConnection constructor. - - // - // From iiop.Connection.java - // - - protected long timeStamp = 0; - protected boolean isServer = false; - - // Start at some value other than zero since this is a magic - // value in some protocols. - protected int requestId = 5; - protected CorbaResponseWaitingRoom responseWaitingRoom; - protected int state; - protected java.lang.Object stateEvent = new java.lang.Object(); - protected java.lang.Object writeEvent = new java.lang.Object(); - protected boolean writeLocked; - protected int serverRequestCount = 0; - - // Server request map: used on the server side of Connection - // Maps request ID to IIOPInputStream. - Map serverRequestMap = new HashMap() ; - - // This is a flag associated per connection telling us if the - // initial set of sending contexts were sent to the receiver - // already... - protected boolean postInitialContexts = false; - - // Remote reference to CodeBase server (supplies - // FullValueDescription, among other things) - protected IOR codeBaseServerIOR; - - // CodeBase cache for this connection. This will cache remote operations, - // handle connecting, and ensure we don't do any remote operations until - // necessary. - protected CachedCodeBase cachedCodeBase = new CachedCodeBase(this); - - protected ORBUtilSystemException wrapper ; - - List buffers ; - - public BufferConnectionImpl(ORB orb, byte[][] data ) - { - this.orb = orb; - wrapper = ORBUtilSystemException.get( orb, - CORBALogDomains.RPC_TRANSPORT ) ; - buffers = new ArrayList() ; - } - - //////////////////////////////////////////////////// - // - // framework.transport.Connection - // - - public boolean shouldRegisterReadEvent() - { - return false; - } - - public boolean shouldRegisterServerReadEvent() - { - return false; - } - - public boolean read() - { - return true ; - } - - protected CorbaMessageMediator readBits() - { - return null ; - } - - protected boolean dispatch(CorbaMessageMediator messageMediator) - { - } - - public boolean shouldUseDirectByteBuffers() - { - return false ; - } - - // Only called from readGIOPMessage with (12, 0, 12) as arguments - // size is size of buffer to create - // offset is offset from start of message in buffer - // length is length to read - public ByteBuffer read(int size, int offset, int length) - throws IOException - { - byte[] buf = new byte[size]; - readFully( buf, offset, length); - ByteBuffer byteBuffer = ByteBuffer.wrap(buf); - byteBuffer.limit(size); - return byteBuffer; - } - - // Only called as read( buf, 12, msgsize-12 ) in readGIOPMessage - // We can ignore the byteBuffer parameter - // offset is the starting position to place data in the result - // length is the length of the data to read - public ByteBuffer read(ByteBuffer byteBuffer, int offset, int length) - throws IOException - { - int size = offset + length; - byte[] buf = new byte[size]; - readFully(buf, offset, length); - return ByteBuffer.wrap(buf); - } - - // Read size bytes from buffer list and place the data - // starting at offset in buf. - public void readFully(byte[] buf, int offset, int size) - throws IOException - { - int remaining = size ; - int position = offset ; - while (remaining > 0) { - ByteBuffer buff = (ByteBuffer)buffers.get(0) ; - int dataSize = buff.remaining() ; - int xferSize = dataSize ; - if (dataSize >= remaining) : - xferSize = remaining ; - buffers.remove(0) ; - } - - buff.get( buf, offset, xferSize ) ; - - offset += xferSize ; - remaining -= xferSize ; - } - } - - public void write(ByteBuffer byteBuffer) - throws IOException - { - buffers.add( byteBuffer ) ; - } - - /** - * Note:it is possible for this to be called more than once - */ - public synchronized void close() - { - } - - public Acceptor getAcceptor() - { - return null; - } - - public ContactInfo getContactInfo() - { - return null; - } - - public EventHandler getEventHandler() - { - return this; - } - - public OutputObject createOutputObject(MessageMediator messageMediator) - { - // REVISIT - remove this method from Connection and all it subclasses. - throw new RuntimeException("*****SocketOrChannelConnectionImpl.createOutputObject - should not be called."); - } - - // This is used by the GIOPOutputObject in order to - // throw the correct error when handling code sets. - // Can we determine if we are on the server side by - // other means? XREVISIT - public boolean isServer() - { - return isServer; - } - - public boolean isBusy() - { - return false ; - } - - public long getTimeStamp() - { - return timeStamp; - } - - public void setTimeStamp(long time) - { - timeStamp = time; - } - - public void setState(String stateString) - { - synchronized (stateEvent) { - if (stateString.equals("ESTABLISHED")) { - state = ESTABLISHED; - stateEvent.notifyAll(); - } else { - // REVISIT: ASSERT - } - } - } - - public void writeLock() - { - } - - public void writeUnlock() - { - } - - public void sendWithoutLock(OutputObject outputObject) - { - } - - public void registerWaiter(MessageMediator messageMediator) - { - } - - public void unregisterWaiter(MessageMediator messageMediator) - { - } - - public InputObject waitForResponse(MessageMediator messageMediator) - { - return null ; - } - - public void setConnectionCache(ConnectionCache connectionCache) - { - } - - public ConnectionCache getConnectionCache() - { - return null; - } - - //////////////////////////////////////////////////// - // - // EventHandler methods - // - - public SelectableChannel getChannel() - { - return null; - } - - public int getInterestOps() - { - return null; - } - - // public Acceptor getAcceptor() - already defined above. - - public Connection getConnection() - { - return this; - } - - //////////////////////////////////////////////////// - // - // Work methods. - // - - public String getName() - { - return this.toString(); - } - - public void doWork() - { - } - - public void setEnqueueTime(long timeInMillis) - { - enqueueTime = timeInMillis; - } - - public long getEnqueueTime() - { - return enqueueTime; - } - - //////////////////////////////////////////////////// - // - // spi.transport.CorbaConnection. - // - - public ResponseWaitingRoom getResponseWaitingRoom() - { - return null ; - } - - // REVISIT - inteface defines isServer but already defined in - // higher interface. - - - public void serverRequestMapPut(int requestId, - CorbaMessageMediator messageMediator) - { - serverRequestMap.put(new Integer(requestId), messageMediator); - } - - public CorbaMessageMediator serverRequestMapGet(int requestId) - { - return (CorbaMessageMediator) - serverRequestMap.get(new Integer(requestId)); - } - - public void serverRequestMapRemove(int requestId) - { - serverRequestMap.remove(new Integer(requestId)); - } - - - // REVISIT: this is also defined in: - // com.sun.corba.se.spi.legacy.connection.Connection - public java.net.Socket getSocket() - { - return null; - } - - /** It is possible for a Close Connection to have been - ** sent here, but we will not check for this. A "lazy" - ** Exception will be thrown in the Worker thread after the - ** incoming request has been processed even though the connection - ** is closed before the request is processed. This is o.k because - ** it is a boundary condition. To prevent it we would have to add - ** more locks which would reduce performance in the normal case. - **/ - public synchronized void serverRequestProcessingBegins() - { - serverRequestCount++; - } - - public synchronized void serverRequestProcessingEnds() - { - serverRequestCount--; - } - - // - // - // - - public synchronized int getNextRequestId() - { - return requestId++; - } - - // Negotiated code sets for char and wchar data - protected CodeSetComponentInfo.CodeSetContext codeSetContext = null; - - public ORB getBroker() - { - return orb; - } - - public CodeSetComponentInfo.CodeSetContext getCodeSetContext() - { - // Needs to be synchronized for the following case when the client - // doesn't send the code set context twice, and we have two threads - // in ServerRequestDispatcher processCodeSetContext. - // - // Thread A checks to see if there is a context, there is none, so - // it calls setCodeSetContext, getting the synch lock. - // Thread B checks to see if there is a context. If we didn't synch, - // it might decide to outlaw wchar/wstring. - if (codeSetContext == null) { - synchronized(this) { - return codeSetContext; - } - } - - return codeSetContext; - } - - public synchronized void setCodeSetContext(CodeSetComponentInfo.CodeSetContext csc) { - // Double check whether or not we need to do this - if (codeSetContext == null) { - - if (OSFCodeSetRegistry.lookupEntry(csc.getCharCodeSet()) == null || - OSFCodeSetRegistry.lookupEntry(csc.getWCharCodeSet()) == null) { - // If the client says it's negotiated a code set that - // isn't a fallback and we never said we support, then - // it has a bug. - throw wrapper.badCodesetsFromClient() ; - } - - codeSetContext = csc; - } - } - - // - // from iiop.IIOPConnection.java - // - - // Map request ID to an InputObject. - // This is so the client thread can start unmarshaling - // the reply and remove it from the out_calls map while the - // ReaderThread can still obtain the input stream to give - // new fragments. Only the ReaderThread touches the clientReplyMap, - // so it doesn't incur synchronization overhead. - - public MessageMediator clientRequestMapGet(int requestId) - { - return null ; - } - - protected MessageMediator clientReply_1_1; - - public void clientReply_1_1_Put(MessageMediator x) - { - clientReply_1_1 = x; - } - - public MessageMediator clientReply_1_1_Get() - { - return clientReply_1_1; - } - - public void clientReply_1_1_Remove() - { - clientReply_1_1 = null; - } - - protected MessageMediator serverRequest_1_1; - - public void serverRequest_1_1_Put(MessageMediator x) - { - serverRequest_1_1 = x; - } - - public MessageMediator serverRequest_1_1_Get() - { - return serverRequest_1_1; - } - - public void serverRequest_1_1_Remove() - { - serverRequest_1_1 = null; - } - - protected String getStateString( int state ) - { - synchronized ( stateEvent ){ - switch (state) { - case OPENING : return "OPENING" ; - case ESTABLISHED : return "ESTABLISHED" ; - case CLOSE_SENT : return "CLOSE_SENT" ; - case CLOSE_RECVD : return "CLOSE_RECVD" ; - case ABORT : return "ABORT" ; - default : return "???" ; - } - } - } - - public synchronized boolean isPostInitialContexts() { - return postInitialContexts; - } - - // Can never be unset... - public synchronized void setPostInitialContexts(){ - postInitialContexts = true; - } - - /** - * Wake up the outstanding requests on the connection, and hand them - * COMM_FAILURE exception with a given minor code. - * - * Also, delete connection from connection table and - * stop the reader thread. - - * Note that this should only ever be called by the Reader thread for - * this connection. - * - * @param minor_code The minor code for the COMM_FAILURE major code. - * @param die Kill the reader thread (this thread) before exiting. - */ - public void purgeCalls(SystemException systemException, - boolean die, boolean lockHeld) - { - } - - /************************************************************************* - * The following methods are for dealing with Connection cleaning for - * better scalability of servers in high network load conditions. - **************************************************************************/ - - public void sendCloseConnection(GIOPVersion giopVersion) - throws IOException - { - Message msg = MessageBase.createCloseConnection(giopVersion); - sendHelper(giopVersion, msg); - } - - public void sendMessageError(GIOPVersion giopVersion) - throws IOException - { - Message msg = MessageBase.createMessageError(giopVersion); - sendHelper(giopVersion, msg); - } - - /** - * Send a CancelRequest message. This does not lock the connection, so the - * caller needs to ensure this method is called appropriately. - * @exception IOException - could be due to abortive connection closure. - */ - public void sendCancelRequest(GIOPVersion giopVersion, int requestId) - throws IOException - { - - Message msg = MessageBase.createCancelRequest(giopVersion, requestId); - sendHelper(giopVersion, msg); - } - - protected void sendHelper(GIOPVersion giopVersion, Message msg) - throws IOException - { - // REVISIT: See comments in CDROutputObject constructor. - CDROutputObject outputObject = - new CDROutputObject((ORB)orb, null, giopVersion, this, msg, - ORBConstants.STREAM_FORMAT_VERSION_1); - msg.write(outputObject); - - outputObject.writeTo(this); - } - - public void sendCancelRequestWithLock(GIOPVersion giopVersion, - int requestId) - throws IOException - { - writeLock(); - try { - sendCancelRequest(giopVersion, requestId); - } finally { - writeUnlock(); - } - } - - // Begin Code Base methods --------------------------------------- - // - // Set this connection's code base IOR. The IOR comes from the - // SendingContext. This is an optional service context, but all - // JavaSoft ORBs send it. - // - // The set and get methods don't need to be synchronized since the - // first possible get would occur during reading a valuetype, and - // that would be after the set. - - // Sets this connection's code base IOR. This is done after - // getting the IOR out of the SendingContext service context. - // Our ORBs always send this, but it's optional in CORBA. - - public final void setCodeBaseIOR(IOR ior) { - codeBaseServerIOR = ior; - } - - public final IOR getCodeBaseIOR() { - return codeBaseServerIOR; - } - - // Get a CodeBase stub to use in unmarshaling. The CachedCodeBase - // won't connect to the remote codebase unless it's necessary. - public final CodeBase getCodeBase() { - return cachedCodeBase; - } - - // End Code Base methods ----------------------------------------- - - // Can be overridden in subclass for different options. - protected void setSocketOptions(Socket socket) - { - } - - public String toString() - { - synchronized ( stateEvent ){ - return - "BufferConnectionImpl[" + " " - + getStateString( state ) + " " - + shouldUseSelectThreadToWait() + " " - + shouldUseWorkerThreadForEvent() - + "]" ; - } - } - - // Must be public - used in encoding. - public void dprint(String msg) - { - ORBUtility.dprint("SocketOrChannelConnectionImpl", msg); - } - - protected void dprint(String msg, Throwable t) - { - dprint(msg); - t.printStackTrace(System.out); - } -} - -// End of file.