Fri, 24 Sep 2010 22:42:14 -0700
6891766: Vulnerabilities in use of reflection in CORBA
Reviewed-by: hawtin
1 /*
2 * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package com.sun.corba.se.impl.orbutil;
28 import com.sun.corba.se.impl.util.SUNVMCID ;
30 public class ORBConstants {
31 private ORBConstants() {}
33 public static final String STRINGIFY_PREFIX = "IOR:" ;
35 /* TAGS
36 tag-request@omg.org
37 FAQ on tags and tag allocation: http://doc.omg.org/ptc/99-02-01.
38 http://doc.omg.org/standard-tags
39 http://doc.omg.org/vendor-tags
41 Last update: 19th August 2003 (ptc/03-08-14)
43 // Legacy
44 1 profile tag 0x4f4e4300 ("ONC\x00")
45 1 profile tag 0x4e454f00 ("NEO\x00")
46 1 profile tag 0x434f4f4c ("COOL")
47 16 service tags 0x4e454f00 - 0x4e454f0f ("NEO\x00" - "NEO\x0f")
49 // Current
50 16 VMCID 0x5355xxxx ("SU\x00\x00" - "SU\xff\xff")
51 16 profile tags 0x53554e00 - 0x53554e0f ("SUN\x00" - "SUN\x0f")
52 16 ORB Type IDs 0x53554e00 - 0x53554e0f ("SUN\x00" - "SUN\x0f")
53 64 service tags 0x53554e00 - 0x53554e3f ("SUN\x00" - "SUN\x3f")
54 64 component tags 0x53554e00 - 0x53554e3f ("SUN\x00" - "SUN\x3f")
55 */
57 // All NEO service contexts must be in the range
58 // NEO_FIRST_SERVICE_CONTEXT to
59 // NEO_FIRST_SERVICE_CONTEXT + NUM_NEO_SERVICE_CONTEXTS - 1
60 public static final int NEO_FIRST_SERVICE_CONTEXT = 0x4e454f00 ;
61 public static final int NUM_NEO_SERVICE_CONTEXTS = 15 ;
62 public static final int TAG_ORB_VERSION = NEO_FIRST_SERVICE_CONTEXT ;
64 public static final int SUN_TAGGED_COMPONENT_ID_BASE = 0x53554e00;
65 public static final int SUN_SERVICE_CONTEXT_ID_BASE = 0x53554e00;
67 //
68 // Tagged Components Ids
69 //
71 // Used by AS 7 for IIOP failover.
72 public static final int TAG_CONTAINER_ID =
73 SUN_TAGGED_COMPONENT_ID_BASE + 0;
74 // Used by AS 8.1 for Request Partioning
75 public static final int TAG_REQUEST_PARTITIONING_ID =
76 SUN_TAGGED_COMPONENT_ID_BASE + 1;
77 // TaggedComponentId for Java serialization tagged component.
78 public static final int TAG_JAVA_SERIALIZATION_ID =
79 SUN_TAGGED_COMPONENT_ID_BASE + 2;
81 //
82 // Service Context Ids
83 //
85 // Used by AS 7 for IIOP failover.
86 public static final int CONTAINER_ID_SERVICE_CONTEXT =
87 SUN_SERVICE_CONTEXT_ID_BASE + 0;
89 // All Sun policies are allocated using the SUNVMCID, which is also
90 // used for minor codes. This allows 12 bits of offset, so
91 // the largest legal Sun policy is SUNVMCID.value + 4095.
92 public static final int SERVANT_CACHING_POLICY = SUNVMCID.value + 0 ;
93 public static final int ZERO_PORT_POLICY = SUNVMCID.value + 1 ;
94 public static final int COPY_OBJECT_POLICY = SUNVMCID.value + 2 ;
95 public static final int REQUEST_PARTITIONING_POLICY = SUNVMCID.value + 3 ;
97 // These are the subcontract IDs for various qualities of
98 // service/implementation.
99 // Persistent SCIDs have the second bit as 1.
100 // SCIDs less than FIRST_POA_SCID are JavaIDL SCIDs.
101 public static final int TOA_SCID = 2 ;
103 public static final int DEFAULT_SCID = TOA_SCID ;
105 public static final int FIRST_POA_SCID = 32;
106 public static final int MAX_POA_SCID = 63;
107 public static final int TRANSIENT_SCID = FIRST_POA_SCID ;
108 public static final int PERSISTENT_SCID = makePersistent( TRANSIENT_SCID ) ;
109 public static final int SC_TRANSIENT_SCID = FIRST_POA_SCID + 4 ;
110 public static final int SC_PERSISTENT_SCID = makePersistent( SC_TRANSIENT_SCID ) ;
111 public static final int IISC_TRANSIENT_SCID = FIRST_POA_SCID + 8 ;
112 public static final int IISC_PERSISTENT_SCID = makePersistent( IISC_TRANSIENT_SCID ) ;
113 public static final int MINSC_TRANSIENT_SCID = FIRST_POA_SCID + 12 ;
114 public static final int MINSC_PERSISTENT_SCID = makePersistent( MINSC_TRANSIENT_SCID ) ;
116 public static boolean isTransient( int scid )
117 {
118 return (scid & 2) == 0 ;
119 }
121 public static int makePersistent( int scid )
122 {
123 return scid | 2 ;
124 }
126 // Constants for ORB properties **************************************************************
128 // All ORB properties must follow the following rules:
129 // 1. Property names must start with either
130 // ORG_OMG_CORBA_PREFIX or SUN_PREFIX.
131 // 2. Property names must have unique suffixes after the last ".".
132 // 3. Property names must have "ORB" as the first 3 letters
133 // in their suffix.
134 // 4. proprietary property names should have a subsystem
135 // where appropriate after the prefix.
137 // org.omg.CORBA properties must be defined by OMG standards
138 // The well known org.omg.CORBA.ORBClass and
139 // org.omg.CORBA.ORBSingletonClass are not included here
140 // since they occur in org.omg.CORBA.ORB.
142 public static final String ORG_OMG_PREFIX = "org.omg." ;
143 public static final String ORG_OMG_CORBA_PREFIX = "org.omg.CORBA." ;
145 public static final String INITIAL_HOST_PROPERTY =
146 ORG_OMG_CORBA_PREFIX + "ORBInitialHost" ;
147 public static final String INITIAL_PORT_PROPERTY =
148 ORG_OMG_CORBA_PREFIX + "ORBInitialPort" ;
149 public static final String INITIAL_SERVICES_PROPERTY =
150 ORG_OMG_CORBA_PREFIX + "ORBInitialServices" ;
151 public static final String DEFAULT_INIT_REF_PROPERTY =
152 ORG_OMG_CORBA_PREFIX + "ORBDefaultInitRef" ;
153 public static final String ORB_INIT_REF_PROPERTY =
154 ORG_OMG_CORBA_PREFIX + "ORBInitRef" ;
156 // All of our proprietary properties must start with com.sun.CORBA
157 public static final String SUN_PREFIX = "com.sun.CORBA." ;
159 // general properties
160 public static final String ALLOW_LOCAL_OPTIMIZATION = SUN_PREFIX + "ORBAllowLocalOptimization" ;
161 public static final String SERVER_PORT_PROPERTY = SUN_PREFIX + "ORBServerPort" ;
162 public static final String SERVER_HOST_PROPERTY = SUN_PREFIX + "ORBServerHost" ;
163 public static final String ORB_ID_PROPERTY = ORG_OMG_CORBA_PREFIX + "ORBId" ;
164 // This property is provided for backward compatibility reasons
165 public static final String OLD_ORB_ID_PROPERTY = SUN_PREFIX + "ORBid" ;
166 public static final String ORB_SERVER_ID_PROPERTY = ORG_OMG_CORBA_PREFIX + "ORBServerId" ;
167 public static final String DEBUG_PROPERTY = SUN_PREFIX + "ORBDebug" ;
168 // Property for setting use of repository Ids during serialization.
169 public static final String USE_REP_ID = SUN_PREFIX + "ORBUseRepId";
171 // NOTE: This is an internal property. It should never be set by
172 // a user. That is the reason it has spaces in its name - to make it
173 // harder to use.
174 public static final String LISTEN_ON_ALL_INTERFACES = SUN_PREFIX + "INTERNAL USE ONLY: listen on all interfaces";
176 // giop related properties - default settings in decimal form
177 public static final String GIOP_VERSION = SUN_PREFIX + "giop.ORBGIOPVersion" ;
178 public static final String GIOP_FRAGMENT_SIZE = SUN_PREFIX + "giop.ORBFragmentSize" ;
179 public static final String GIOP_BUFFER_SIZE = SUN_PREFIX + "giop.ORBBufferSize" ;
180 public static final String GIOP_11_BUFFMGR = SUN_PREFIX + "giop.ORBGIOP11BuffMgr";
181 public static final String GIOP_12_BUFFMGR = SUN_PREFIX + "giop.ORBGIOP12BuffMgr";
182 public static final String GIOP_TARGET_ADDRESSING = SUN_PREFIX + "giop.ORBTargetAddressing";
183 public static final int GIOP_DEFAULT_FRAGMENT_SIZE = 1024;
184 public static final int GIOP_DEFAULT_BUFFER_SIZE = 1024;
185 public static final int DEFAULT_GIOP_11_BUFFMGR = 0; //Growing
186 public static final int DEFAULT_GIOP_12_BUFFMGR = 2; //Streaming
187 public static final short ADDR_DISP_OBJKEY = 0; // object key used for target addressing
188 public static final short ADDR_DISP_PROFILE = 1; // iop profile used for target addressing
189 public static final short ADDR_DISP_IOR = 2; // ior used for target addressing
190 public static final short ADDR_DISP_HANDLE_ALL = 3; // accept all target addressing dispositions (default)
192 // CORBA formal 00-11-03 sections 15.4.2.2, 15.4.3.2, 15.4.6.2
193 // state that the GIOP 1.2 RequestMessage, ReplyMessage, and
194 // LocateReply message bodies must begin on 8 byte boundaries.
195 public static final int GIOP_12_MSG_BODY_ALIGNMENT = 8;
197 // The GIOP 1.2 fragments must be divisible by 8. We generalize this
198 // to GIOP 1.1 fragments, as well.
199 public static final int GIOP_FRAGMENT_DIVISOR = 8;
200 public static final int GIOP_FRAGMENT_MINIMUM_SIZE = 32;
202 // connection management properties
203 public static final String HIGH_WATER_MARK_PROPERTY =
204 SUN_PREFIX + "connection.ORBHighWaterMark" ;
205 public static final String LOW_WATER_MARK_PROPERTY =
206 SUN_PREFIX + "connection.ORBLowWaterMark" ;
207 public static final String NUMBER_TO_RECLAIM_PROPERTY =
208 SUN_PREFIX + "connection.ORBNumberToReclaim" ;
210 public static final String ACCEPTOR_CLASS_PREFIX_PROPERTY =
211 SUN_PREFIX + "transport.ORBAcceptor";
213 public static final String CONTACT_INFO_LIST_FACTORY_CLASS_PROPERTY =
214 SUN_PREFIX + "transport.ORBContactInfoList";
216 // Legacy:
217 public static final String LEGACY_SOCKET_FACTORY_CLASS_PROPERTY =
218 SUN_PREFIX + "legacy.connection.ORBSocketFactoryClass" ;
221 public static final String SOCKET_FACTORY_CLASS_PROPERTY =
222 SUN_PREFIX + "transport.ORBSocketFactoryClass" ;
223 public static final String LISTEN_SOCKET_PROPERTY =
224 SUN_PREFIX + "transport.ORBListenSocket";
225 public static final String IOR_TO_SOCKET_INFO_CLASS_PROPERTY =
226 SUN_PREFIX + "transport.ORBIORToSocketInfoClass";
227 public static final String IIOP_PRIMARY_TO_CONTACT_INFO_CLASS_PROPERTY =
228 SUN_PREFIX + "transport.ORBIIOPPrimaryToContactInfoClass";
230 // Request partitioning maximum and minimum thread pool id constants.
231 public static final int REQUEST_PARTITIONING_MIN_THREAD_POOL_ID = 0;
232 public static final int REQUEST_PARTITIONING_MAX_THREAD_POOL_ID = 63;
234 // transport read tcp timeout property, colon separated property
235 // with syntax <initial time to wait:max read giop header time to
236 // wait: max read message time to wait:backoff factor>
237 public static final String TRANSPORT_TCP_READ_TIMEOUTS_PROPERTY =
238 SUN_PREFIX + "transport.ORBTCPReadTimeouts";
240 // initial time to wait in milliseconds if a transport
241 // tcp read returns 0 bytes
242 public static final int TRANSPORT_TCP_INITIAL_TIME_TO_WAIT = 100;
244 // max time to spend in cumulative waits in milliseconds
245 // if a transport tcp read returns 0 bytes
246 public static final int TRANSPORT_TCP_MAX_TIME_TO_WAIT = 3000;
248 // max time to spend in cumulative waits in milliseconds
249 // if a transport tcp read of GIOP header returns 0 bytes
250 public static final int TRANSPORT_TCP_GIOP_HEADER_MAX_TIME_TO_WAIT = 300;
252 // A backoff percentage used to compute the next amount of time to
253 // wait on a subsequent transport tcp read of 0 bytes
254 public static final int TRANSPORT_TCP_TIME_TO_WAIT_BACKOFF_FACTOR = 20;
256 public static final String USE_NIO_SELECT_TO_WAIT_PROPERTY =
257 SUN_PREFIX + "transport.ORBUseNIOSelectToWait";
259 // "Socket" | "SocketChannel"
260 // Note: Connections accepted by SocketChannel will be SocketChannel.
261 public static final String ACCEPTOR_SOCKET_TYPE_PROPERTY =
262 SUN_PREFIX + "transport.ORBAcceptorSocketType";
264 // Applicable if using SocketChannel and using select thread.
265 public static final String ACCEPTOR_SOCKET_USE_WORKER_THREAD_FOR_EVENT_PROPERTY =
266 SUN_PREFIX + "transport.ORBAcceptorSocketUseWorkerThreadForEvent";
268 // Applicable on client-side. "Socket" | "SocketChannel"
269 public static final String CONNECTION_SOCKET_TYPE_PROPERTY =
270 SUN_PREFIX + "transport.ORBConnectionSocketType";
272 // Applicable if using SocketChannel and using select thread
273 public static final String CONNECTION_SOCKET_USE_WORKER_THREAD_FOR_EVENT_PROPERTY =
274 SUN_PREFIX + "transport.ORBConnectionSocketUseWorkerThreadForEvent";
276 // Used to disable the use of direct byte buffers. This enables much easier
277 // debugging, because the contents of a direct byte buffer cannot be
278 // viewed in most (all?) debuggers.
279 public static final String DISABLE_DIRECT_BYTE_BUFFER_USE_PROPERTY =
280 SUN_PREFIX + "transport.ORBDisableDirectByteBufferUse" ;
282 public static final String SOCKET = "Socket";
283 public static final String SOCKETCHANNEL = "SocketChannel";
285 // POA related policies
286 public static final String PERSISTENT_SERVER_PORT_PROPERTY = SUN_PREFIX + "POA.ORBPersistentServerPort" ;
287 public static final String SERVER_ID_PROPERTY = SUN_PREFIX + "POA.ORBServerId" ;
288 public static final String BAD_SERVER_ID_HANDLER_CLASS_PROPERTY
289 = SUN_PREFIX + "POA.ORBBadServerIdHandlerClass" ;
290 public static final String ACTIVATED_PROPERTY = SUN_PREFIX + "POA.ORBActivated" ;
291 public static final String SERVER_NAME_PROPERTY = SUN_PREFIX + "POA.ORBServerName" ;
293 // Server Properties; e.g. when properties passed to ORB activated
294 // servers
296 public static final String SERVER_DEF_VERIFY_PROPERTY = SUN_PREFIX + "activation.ORBServerVerify" ;
298 // This one is an exception, but it may be externally visible
299 public static final String SUN_LC_PREFIX = "com.sun.corba." ;
301 // Necessary for package renaming to work correctly
302 public static final String SUN_LC_VERSION_PREFIX = "com.sun.corba.se.";
304 public static final String JTS_CLASS_PROPERTY = SUN_LC_VERSION_PREFIX + "CosTransactions.ORBJTSClass" ;
306 // Property for enabling ORB's use of Java serialization.
307 public static final String ENABLE_JAVA_SERIALIZATION_PROPERTY =
308 SUN_PREFIX + "encoding.ORBEnableJavaSerialization";
310 // Constants for ORB prefixes **************************************************************
312 public static final String PI_ORB_INITIALIZER_CLASS_PREFIX =
313 "org.omg.PortableInterceptor.ORBInitializerClass.";
315 public static final String USE_DYNAMIC_STUB_PROPERTY = SUN_PREFIX + "ORBUseDynamicStub" ;
317 public static final String DYNAMIC_STUB_FACTORY_FACTORY_CLASS =
318 SUN_PREFIX + "ORBDynamicStubFactoryFactoryClass" ;
320 // Constants for NameService properties ************************************
322 public static final int DEFAULT_INITIAL_PORT = 900;
324 public static final String DEFAULT_INS_HOST = "localhost";
326 public static final int DEFAULT_INS_PORT = 2089;
328 public static final int DEFAULT_INS_GIOP_MAJOR_VERSION = 1;
330 // http://www.omg.org/cgi-bin/doc?ptc/00-08-07 [ Section 13.6.7.3 ]
331 // defines the default GIOP minor version to be 0.
332 public static final int DEFAULT_INS_GIOP_MINOR_VERSION = 0;
335 // Constants for INS properties ********************************************
337 // GIOP Version number for validation of INS URL format addresses
338 public static final int MAJORNUMBER_SUPPORTED = 1;
339 public static final int MINORNUMBERMAX = 2;
341 // Subcontract's differentiation using the TRANSIENT and PERSISTENT
342 // Name Service Property.
343 public static final int TRANSIENT = 1;
344 public static final int PERSISTENT = 2;
346 // Constants for ORBD properties ****************************************************************
348 // These properties are never passed on ORB init: they are only passed to ORBD.
350 public static final String DB_DIR_PROPERTY = SUN_PREFIX + "activation.DbDir" ;
351 public static final String DB_PROPERTY = SUN_PREFIX + "activation.db" ;
352 public static final String ORBD_PORT_PROPERTY = SUN_PREFIX + "activation.Port" ;
353 public static final String SERVER_POLLING_TIME = SUN_PREFIX + "activation.ServerPollingTime";
354 public static final String SERVER_STARTUP_DELAY = SUN_PREFIX + "activation.ServerStartupDelay";
356 public static final int DEFAULT_ACTIVATION_PORT = 1049 ;
358 // If RI is starting the NameService then they would indicate that by
359 // passing the RI flag. That would start a Persistent Port to listen to
360 // INS request.
361 public static final int RI_NAMESERVICE_PORT = 1050;
363 public static final int DEFAULT_SERVER_POLLING_TIME = 1000;
365 public static final int DEFAULT_SERVER_STARTUP_DELAY = 1000;
368 //***************** Constants for Logging ****************
370 public static final String LOG_LEVEL_PROPERTY = SUN_PREFIX + "ORBLogLevel";
372 public static final String LOG_RESOURCE_FILE =
373 "com.sun.corba.se.impl.logging.LogStrings";
375 // Constants for initial references *************************************************************
377 public static final String TRANSIENT_NAME_SERVICE_NAME = "TNameService" ;
378 public static final String PERSISTENT_NAME_SERVICE_NAME = "NameService" ;
380 // A large Number to make sure that other ServerIds doesn't collide
381 // with NameServer Persistent Server Id
382 public static final String NAME_SERVICE_SERVER_ID = "1000000" ;
384 public static final String ROOT_POA_NAME = "RootPOA" ;
385 public static final String POA_CURRENT_NAME = "POACurrent" ;
386 public static final String SERVER_ACTIVATOR_NAME = "ServerActivator" ;
387 public static final String SERVER_LOCATOR_NAME = "ServerLocator" ;
388 public static final String SERVER_REPOSITORY_NAME = "ServerRepository" ;
389 public static final String INITIAL_NAME_SERVICE_NAME= "InitialNameService" ;
390 public static final String TRANSACTION_CURRENT_NAME = "TransactionCurrent" ;
391 public static final String DYN_ANY_FACTORY_NAME = "DynAnyFactory" ;
393 // New for Portable Interceptors
394 public static final String PI_CURRENT_NAME = "PICurrent" ;
395 public static final String CODEC_FACTORY_NAME = "CodecFactory" ;
397 // Constants for ORBD DB ***********************************************************************
399 public static final String DEFAULT_DB_DIR = "orb.db" ;
400 public static final String DEFAULT_DB_NAME = "db" ;
401 public static final String INITIAL_ORB_DB = "initial.db" ;
402 public static final String SERVER_LOG_DIR = "logs" ;
403 public static final String ORBID_DIR_BASE = "orbids" ;
404 public static final String ORBID_DB_FILE_NAME = "orbids.db" ;
406 // Constants for ThreadPool ********************************************************************
408 // Default value for when inactive threads in the pool can stop running (ms)
409 public static final int DEFAULT_INACTIVITY_TIMEOUT = 120000;
410 // Default name of the threadpool
411 public static final String THREADPOOL_DEFAULT_NAME = "default-threadpool";
412 // Default name of the workqueue
413 public static final String WORKQUEUE_DEFAULT_NAME = "default-workqueue";
415 // Constants for minor code bases **************************************************************
416 // This is the value that pre-Merlin Sun ORBs incorrectly used. We preserve this
417 // here for backwards compatibility, but note that the current ORB must never
418 // create a BAD_PARAM system exception with this minor code.
419 public static final int LEGACY_SUN_NOT_SERIALIZABLE = SUNVMCID.value + 1 ;
421 // Code Set related *******************************************************
423 // If we don't always send the code set context, there's a possibility
424 // of failure when fragments of a smaller request are interleved with
425 // those of a first request with other large service contexts.
426 //
427 public static final boolean DEFAULT_ALWAYS_SEND_CODESET_CTX = true;
428 public static final String ALWAYS_SEND_CODESET_CTX_PROPERTY
429 = SUN_PREFIX + "codeset.AlwaysSendCodeSetCtx";
431 // Use byte order markers in streams when applicable? This won't apply to
432 // GIOP 1.1 due to limitations in the CDR encoding.
433 public static final boolean DEFAULT_USE_BYTE_ORDER_MARKERS = true;
434 public static final String USE_BOMS = SUN_PREFIX + "codeset.UseByteOrderMarkers";
436 // Use byte order markers in encapsulations when applicable?
437 public static final boolean DEFAULT_USE_BYTE_ORDER_MARKERS_IN_ENCAPS = false;
438 public static final String USE_BOMS_IN_ENCAPS = SUN_PREFIX + "codeset.UseByteOrderMarkersInEncaps";
440 // The CHAR_CODESETS and WCHAR_CODESETS allow the user to override the default
441 // connection code sets. The value should be a comma separated list of OSF
442 // registry numbers. The first number in the list will be the native code
443 // set.
444 //
445 // Number can be specified as hex if preceded by 0x, otherwise they are
446 // interpreted as decimal.
447 //
448 // Code sets that we accept currently (see core/OSFCodeSetRegistry):
449 //
450 // char/string:
451 //
452 // ISO8859-1 (Latin-1) 0x00010001
453 // ISO646 (ASCII) 0x00010020
454 // UTF-8 0x05010001
455 //
456 // wchar/string:
457 //
458 // UTF-16 0x00010109
459 // UCS-2 0x00010100
460 // UTF-8 0x05010001
461 //
462 // Note: The ORB will let you assign any of the above values to
463 // either of the following properties, but the above assignments
464 // are the only ones that won't get you into trouble.
465 public static final String CHAR_CODESETS = SUN_PREFIX + "codeset.charsets";
466 public static final String WCHAR_CODESETS = SUN_PREFIX + "codeset.wcharsets";
468 // Constants to make stream format version code easier to read
469 public static final byte STREAM_FORMAT_VERSION_1 = (byte)1;
470 public static final byte STREAM_FORMAT_VERSION_2 = (byte)2;
471 }