Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_corba
提交
6690c1af
D
dragonwell8_corba
项目概览
openanolis
/
dragonwell8_corba
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_corba
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6690c1af
编写于
2月 25, 2013
作者:
E
ewendeli
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
0c7356ba
b13d6042
变更
27
隐藏空白更改
内联
并排
Showing
27 changed file
with
190 addition
and
3439 deletion
+190
-3439
make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk
.../com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk
+1
-13
src/share/classes/com/sun/corba/se/impl/activation/ServerMain.java
.../classes/com/sun/corba/se/impl/activation/ServerMain.java
+4
-4
src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java
src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java
+3
-3
src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java
...es/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java
+5
-56
src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java
...s/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java
+5
-15
src/share/classes/com/sun/corba/se/impl/io/FVDCodeBaseImpl.java
...are/classes/com/sun/corba/se/impl/io/FVDCodeBaseImpl.java
+4
-4
src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java
...e/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java
+41
-73
src/share/classes/com/sun/corba/se/impl/io/ValueHandlerImpl.java
...re/classes/com/sun/corba/se/impl/io/ValueHandlerImpl.java
+21
-64
src/share/classes/com/sun/corba/se/impl/io/ValueUtility.java
src/share/classes/com/sun/corba/se/impl/io/ValueUtility.java
+9
-1
src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java
...e/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java
+5
-1
src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java
src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java
+1
-1
src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java
...es/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java
+0
-57
src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java
...s/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java
+0
-68
src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java
...are/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java
+3
-35
src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java
...om/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java
+3
-3
src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java
...ses/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java
+0
-177
src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java
...s/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java
+0
-177
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java
.../com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java
+0
-108
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java
...om/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java
+0
-102
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java
...es/com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java
+1
-52
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java
...asses/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java
+0
-990
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java
...ses/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java
+0
-1065
src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java
...s/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java
+0
-251
src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java
...com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java
+0
-77
src/share/classes/com/sun/corba/se/spi/orb/ORB.java
src/share/classes/com/sun/corba/se/spi/orb/ORB.java
+19
-15
src/share/classes/sun/corba/JavaCorbaAccess.java
src/share/classes/sun/corba/JavaCorbaAccess.java
+5
-27
src/share/classes/sun/corba/SharedSecrets.java
src/share/classes/sun/corba/SharedSecrets.java
+60
-0
未找到文件。
make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk
浏览文件 @
6690c1af
#
# Copyright (c) 2000, 20
09
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2000, 20
12
, 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
...
...
@@ -29,10 +29,6 @@ com_sun_corba_se_impl_orbutil_java = \
com/sun/corba/se/impl/orbutil/DenseIntMapImpl.java \
com/sun/corba/se/impl/orbutil/GetPropertyAction.java \
com/sun/corba/se/impl/orbutil/HexOutputStream.java \
com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java \
com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java \
com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java \
com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3_1.java \
com/sun/corba/se/impl/orbutil/LegacyHookGetFields.java \
com/sun/corba/se/impl/orbutil/LegacyHookPutFields.java \
com/sun/corba/se/impl/orbutil/LogKeywords.java \
...
...
@@ -45,19 +41,11 @@ com_sun_corba_se_impl_orbutil_java = \
com/sun/corba/se/impl/orbutil/ORBUtility.java \
com/sun/corba/se/impl/orbutil/ORBClassLoader.java \
com/sun/corba/se/impl/orbutil/RepIdDelegator.java \
com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java \
com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java \
com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java \
com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java \
com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java \
com/sun/corba/se/impl/orbutil/RepositoryIdStrings.java \
com/sun/corba/se/impl/orbutil/RepositoryIdUtility.java \
com/sun/corba/se/impl/orbutil/RepositoryIdInterface.java \
com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java \
com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java \
com/sun/corba/se/impl/orbutil/StackImpl.java \
com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java \
com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java \
com/sun/corba/se/impl/orbutil/closure/Future.java \
com/sun/corba/se/impl/orbutil/closure/Constant.java \
com/sun/corba/se/impl/orbutil/concurrent/Sync.java \
...
...
src/share/classes/com/sun/corba/se/impl/activation/ServerMain.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1997, 20
0
2, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 20
1
2, 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
...
...
@@ -322,9 +322,9 @@ class ServerCallback extends
com
.
sun
.
corba
.
se
.
spi
.
activation
.
_ServerImplBase
{
private
ORB
orb
;
private
Method
installMethod
;
private
Method
uninstallMethod
;
private
Method
shutdownMethod
;
private
transient
Method
installMethod
;
private
transient
Method
uninstallMethod
;
private
transient
Method
shutdownMethod
;
private
Object
methodArgs
[]
;
ServerCallback
(
ORB
orb
,
Method
installMethod
,
Method
uninstallMethod
,
...
...
src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1997, 20
04
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 20
12
, 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
...
...
@@ -1218,7 +1218,7 @@ public class AnyImpl extends Any
// See bug 4391648 for more info about the tcORB in this
// case.
RepositoryIdStrings
repStrs
=
RepositoryIdFactory
.
getRepIdStringsFactory
(
tcORB
);
=
RepositoryIdFactory
.
getRepIdStringsFactory
();
// Assertion: c instanceof Serializable?
...
...
@@ -1251,7 +1251,7 @@ public class AnyImpl extends Any
// Anything else
// We know that this is a TypeCodeImpl since it is our ORB
classTC
=
(
TypeCodeImpl
)
ValueUtility
.
createTypeCodeForClass
(
tcORB
,
c
,
ORBUtility
.
createValueHandler
(
tcORB
));
tcORB
,
c
,
ORBUtility
.
createValueHandler
());
// Intruct classTC to store its buffer
classTC
.
setCaching
(
true
);
// Update the cache
...
...
src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1997, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
2
, 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
...
...
@@ -269,8 +269,8 @@ public class CDRInputStream_1_0 extends CDRInputStreamBase
private
final
void
createRepositoryIdHandlers
()
{
repIdUtil
=
RepositoryIdFactory
.
getRepIdUtility
(
orb
);
repIdStrs
=
RepositoryIdFactory
.
getRepIdStringsFactory
(
orb
);
repIdUtil
=
RepositoryIdFactory
.
getRepIdUtility
();
repIdStrs
=
RepositoryIdFactory
.
getRepIdStringsFactory
();
}
public
GIOPVersion
getGIOPVersion
()
{
...
...
@@ -564,10 +564,7 @@ public class CDRInputStream_1_0 extends CDRInputStreamBase
checkForNegativeLength
(
len
);
if
(
orb
!=
null
&&
ORBUtility
.
isLegacyORB
((
ORB
)
orb
))
return
legacyReadString
(
len
);
else
return
internalReadString
(
len
);
return
internalReadString
(
len
);
}
private
final
String
internalReadString
(
int
len
)
{
...
...
@@ -588,54 +585,6 @@ public class CDRInputStream_1_0 extends CDRInputStreamBase
return
new
String
(
result
,
0
,
getCharConverter
().
getNumChars
());
}
private
final
String
legacyReadString
(
int
len
)
{
//
// Workaround for ORBs which send string lengths of
// zero to mean empty string.
//
//
// IMPORTANT: Do not replace 'new String("")' with "", it may result
// in a Serialization bug (See serialization.zerolengthstring) and
// bug id: 4728756 for details
if
(
len
==
0
)
return
new
String
(
""
);
len
--;
char
[]
c
=
new
char
[
len
];
int
n
=
0
;
while
(
n
<
len
)
{
int
avail
;
int
bytes
;
int
wanted
;
avail
=
bbwi
.
buflen
-
bbwi
.
position
();
if
(
avail
<=
0
)
{
grow
(
1
,
1
);
avail
=
bbwi
.
buflen
-
bbwi
.
position
();
}
wanted
=
len
-
n
;
bytes
=
(
wanted
<
avail
)
?
wanted
:
avail
;
// Microbenchmarks are showing a loop of ByteBuffer.get(int) being
// faster than ByteBuffer.get(byte[], int, int).
for
(
int
i
=
0
;
i
<
bytes
;
i
++)
{
c
[
n
+
i
]
=
(
char
)
(
bbwi
.
byteBuffer
.
get
(
bbwi
.
position
()+
i
)
&
0xFF
);
}
bbwi
.
position
(
bbwi
.
position
()
+
bytes
);
n
+=
bytes
;
}
//
// Skip past terminating null byte
//
if
(
bbwi
.
position
()
+
1
>
bbwi
.
buflen
)
alignAndCheck
(
1
,
1
);
bbwi
.
position
(
bbwi
.
position
()
+
1
);
return
new
String
(
c
);
}
public
final
String
read_string
()
{
return
readStringOrIndirection
(
false
);
}
...
...
@@ -1045,7 +994,7 @@ public class CDRInputStream_1_0 extends CDRInputStreamBase
try
{
if
(
valueHandler
==
null
)
valueHandler
=
ORBUtility
.
createValueHandler
(
orb
);
valueHandler
=
ORBUtility
.
createValueHandler
();
value
=
valueHandler
.
readValue
(
parent
,
indirection
,
...
...
src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1997, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
2
, 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
...
...
@@ -189,18 +189,8 @@ public class CDROutputStream_1_0 extends CDROutputStreamBase
private
final
void
createRepositoryIdHandlers
()
{
if
(
orb
!=
null
)
{
// Get the appropriate versions based on the ORB version. The
// ORB versioning info is only in the core ORB.
repIdUtil
=
RepositoryIdFactory
.
getRepIdUtility
(
orb
);
repIdStrs
=
RepositoryIdFactory
.
getRepIdStringsFactory
(
orb
);
}
else
{
// Get the latest versions
repIdUtil
=
RepositoryIdFactory
.
getRepIdUtility
();
repIdStrs
=
RepositoryIdFactory
.
getRepIdStringsFactory
();
}
repIdUtil
=
RepositoryIdFactory
.
getRepIdUtility
();
repIdStrs
=
RepositoryIdFactory
.
getRepIdStringsFactory
();
}
public
BufferManagerWrite
getBufferManager
()
...
...
@@ -705,7 +695,7 @@ public class CDROutputStream_1_0 extends CDROutputStreamBase
private
void
writeArray
(
Serializable
array
,
Class
clazz
)
{
if
(
valueHandler
==
null
)
valueHandler
=
ORBUtility
.
createValueHandler
(
orb
);
//d11638
valueHandler
=
ORBUtility
.
createValueHandler
();
//d11638
// Write value_tag
int
indirection
=
writeValueTag
(
mustChunk
,
true
,
...
...
@@ -768,7 +758,7 @@ public class CDROutputStream_1_0 extends CDROutputStreamBase
private
void
writeRMIIIOPValueType
(
Serializable
object
,
Class
clazz
)
{
if
(
valueHandler
==
null
)
valueHandler
=
ORBUtility
.
createValueHandler
(
orb
);
//d11638
valueHandler
=
ORBUtility
.
createValueHandler
();
//d11638
Serializable
key
=
object
;
...
...
src/share/classes/com/sun/corba/se/impl/io/FVDCodeBaseImpl.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1999, 20
03
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 20
11
, 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
...
...
@@ -86,7 +86,7 @@ public class FVDCodeBaseImpl extends _CodeBaseImplBase
// default to using the current ORB version in case the
// vhandler is not set
if
(
vhandler
==
null
)
{
vhandler
=
new
ValueHandlerImpl
(
false
);
vhandler
=
ValueHandlerImpl
.
getInstance
(
false
);
}
// Util.getCodebase may return null which would
...
...
@@ -120,7 +120,7 @@ public class FVDCodeBaseImpl extends _CodeBaseImplBase
// default to using the current ORB version in case the
// vhandler is not set
if
(
vhandler
==
null
)
{
vhandler
=
new
ValueHandlerImpl
(
false
);
vhandler
=
ValueHandlerImpl
.
getInstance
(
false
);
}
try
{
...
...
@@ -161,7 +161,7 @@ public class FVDCodeBaseImpl extends _CodeBaseImplBase
// default to using the current ORB version in case the
// vhandler is not set
if
(
vhandler
==
null
)
{
vhandler
=
new
ValueHandlerImpl
(
false
);
vhandler
=
ValueHandlerImpl
.
getInstance
(
false
);
}
Stack
repIds
=
new
Stack
();
...
...
src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1998, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 201
2
, 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
...
...
@@ -25,7 +25,7 @@
/*
* Licensed Materials - Property of IBM
* RMI-IIOP v1.0
* Copyright IBM Corp. 1998
1999
All Rights Reserved
* Copyright IBM Corp. 1998
2012
All Rights Reserved
*
*/
...
...
@@ -56,7 +56,6 @@ import java.io.Serializable;
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.Hashtable
;
import
com.sun.corba.se.impl.util.RepositoryId
;
...
...
@@ -83,8 +82,6 @@ public class ObjectStreamClass implements java.io.Serializable {
private
static
Object
noArgsList
[]
=
{};
private
static
Class
noTypesList
[]
=
{};
private
static
Hashtable
translatedFields
;
/** true if represents enum type */
private
boolean
isEnum
;
...
...
@@ -384,6 +381,42 @@ public class ObjectStreamClass implements java.io.Serializable {
*/
}
private
static
final
class
PersistentFieldsValue
extends
ClassValue
<
ObjectStreamField
[]>
{
PersistentFieldsValue
()
{
}
protected
ObjectStreamField
[]
computeValue
(
Class
<?>
type
)
{
try
{
Field
pf
=
type
.
getDeclaredField
(
"serialPersistentFields"
);
int
mods
=
pf
.
getModifiers
();
if
(
Modifier
.
isPrivate
(
mods
)
&&
Modifier
.
isStatic
(
mods
)
&&
Modifier
.
isFinal
(
mods
))
{
pf
.
setAccessible
(
true
);
java
.
io
.
ObjectStreamField
[]
fields
=
(
java
.
io
.
ObjectStreamField
[])
pf
.
get
(
type
);
return
translateFields
(
fields
);
}
}
catch
(
NoSuchFieldException
|
IllegalAccessException
|
IllegalArgumentException
|
ClassCastException
e
)
{
}
return
null
;
}
private
static
ObjectStreamField
[]
translateFields
(
java
.
io
.
ObjectStreamField
[]
fields
)
{
ObjectStreamField
[]
translation
=
new
ObjectStreamField
[
fields
.
length
];
for
(
int
i
=
0
;
i
<
fields
.
length
;
i
++)
{
translation
[
i
]
=
new
ObjectStreamField
(
fields
[
i
].
getName
(),
fields
[
i
].
getType
());
}
return
translation
;
}
}
private
static
final
PersistentFieldsValue
persistentFieldsValue
=
new
PersistentFieldsValue
();
/*
* Initialize class descriptor. This method is only invoked on class
* descriptors created via calls to lookupInternal(). This method is kept
...
...
@@ -416,35 +449,7 @@ public class ObjectStreamClass implements java.io.Serializable {
* If it is declared, use the declared serialPersistentFields.
* Otherwise, extract the fields from the class itself.
*/
try
{
Field
pf
=
cl
.
getDeclaredField
(
"serialPersistentFields"
);
// serial bug 7; the serialPersistentFields were not
// being read and stored as Accessible bit was not set
pf
.
setAccessible
(
true
);
// serial bug 7; need to find if the field is of type
// java.io.ObjectStreamField
java
.
io
.
ObjectStreamField
[]
f
=
(
java
.
io
.
ObjectStreamField
[])
pf
.
get
(
cl
);
int
mods
=
pf
.
getModifiers
();
if
((
Modifier
.
isPrivate
(
mods
))
&&
(
Modifier
.
isStatic
(
mods
))
&&
(
Modifier
.
isFinal
(
mods
)))
{
fields
=
(
ObjectStreamField
[])
translateFields
((
Object
[])
pf
.
get
(
cl
));
}
}
catch
(
NoSuchFieldException
e
)
{
fields
=
null
;
}
catch
(
IllegalAccessException
e
)
{
fields
=
null
;
}
catch
(
IllegalArgumentException
e
)
{
fields
=
null
;
}
catch
(
ClassCastException
e
)
{
/* Thrown if a field serialPersistentField exists
* but it is not of type ObjectStreamField.
*/
fields
=
null
;
}
fields
=
persistentFieldsValue
.
get
(
cl
);
if
(
fields
==
null
)
{
/* Get all of the declared fields for this
...
...
@@ -641,43 +646,6 @@ public class ObjectStreamClass implements java.io.Serializable {
superclass
=
null
;
}
private
static
Object
[]
translateFields
(
Object
objs
[])
throws
NoSuchFieldException
{
try
{
java
.
io
.
ObjectStreamField
fields
[]
=
(
java
.
io
.
ObjectStreamField
[])
objs
;
Object
translation
[]
=
null
;
if
(
translatedFields
==
null
)
translatedFields
=
new
Hashtable
();
translation
=
(
Object
[])
translatedFields
.
get
(
fields
);
if
(
translation
!=
null
)
return
translation
;
else
{
Class
osfClass
=
Class
.
forName
(
"com.sun.corba.se.impl.io.ObjectStreamField"
);
translation
=
(
Object
[])
java
.
lang
.
reflect
.
Array
.
newInstance
(
osfClass
,
objs
.
length
);
Object
arg
[]
=
new
Object
[
2
];
Class
types
[]
=
{
String
.
class
,
Class
.
class
};
Constructor
constructor
=
osfClass
.
getDeclaredConstructor
(
types
);
for
(
int
i
=
fields
.
length
-
1
;
i
>=
0
;
i
--){
arg
[
0
]
=
fields
[
i
].
getName
();
arg
[
1
]
=
fields
[
i
].
getType
();
translation
[
i
]
=
constructor
.
newInstance
(
arg
);
}
translatedFields
.
put
(
fields
,
translation
);
}
return
(
Object
[])
translation
;
}
catch
(
Throwable
t
){
NoSuchFieldException
nsfe
=
new
NoSuchFieldException
();
nsfe
.
initCause
(
t
)
;
throw
nsfe
;
}
}
/*
* Set the class this version descriptor matches.
...
...
@@ -1555,8 +1523,8 @@ public class ObjectStreamClass implements java.io.Serializable {
private
boolean
hasExternalizableBlockData
;
Method
writeObjectMethod
;
Method
readObjectMethod
;
private
Method
writeReplaceObjectMethod
;
private
Method
readResolveObjectMethod
;
private
transient
Method
writeReplaceObjectMethod
;
private
transient
Method
readResolveObjectMethod
;
private
Constructor
cons
;
/**
...
...
src/share/classes/com/sun/corba/se/impl/io/ValueHandlerImpl.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1998, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 201
2
, 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
...
...
@@ -53,7 +53,7 @@ import com.sun.corba.se.spi.logging.CORBALogDomains;
import
com.sun.corba.se.impl.logging.OMGSystemException
;
import
com.sun.corba.se.impl.logging.UtilSystemException
;
public
class
ValueHandlerImpl
implements
javax
.
rmi
.
CORBA
.
ValueHandlerMultiFormat
{
public
final
class
ValueHandlerImpl
implements
javax
.
rmi
.
CORBA
.
ValueHandlerMultiFormat
{
// Property to override our maximum stream format version
public
static
final
String
FORMAT_VERSION_PROPERTY
...
...
@@ -150,14 +150,22 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
writeValueWithVersion
(
out
,
value
,
streamFormatVersion
);
}
p
ublic
ValueHandlerImpl
(){}
p
rivate
ValueHandlerImpl
(){}
p
ublic
ValueHandlerImpl
(
boolean
isInputStream
)
{
p
rivate
ValueHandlerImpl
(
boolean
isInputStream
)
{
this
();
useHashtables
=
false
;
this
.
isInputStream
=
isInputStream
;
}
static
ValueHandlerImpl
getInstance
()
{
return
new
ValueHandlerImpl
();
}
static
ValueHandlerImpl
getInstance
(
boolean
isInputStream
)
{
return
new
ValueHandlerImpl
(
isInputStream
);
}
/**
* Writes the value to the stream using java semantics.
* @param out The stream to write the value to
...
...
@@ -458,12 +466,7 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
return
ObjectStreamClass
.
lookup
(
value
.
getClass
()).
writeReplace
(
value
);
}
/**
* Encapsulates writing of Java char arrays so that the 1.3 subclass
* can override it without exposing internals across packages. This
* is a fix for bug 4367783.
*/
protected
void
writeCharArray
(
org
.
omg
.
CORBA_2_3
.
portable
.
OutputStream
out
,
private
void
writeCharArray
(
org
.
omg
.
CORBA_2_3
.
portable
.
OutputStream
out
,
char
[]
array
,
int
offset
,
int
length
)
...
...
@@ -576,12 +579,7 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
}
}
/**
* Encapsulates reading of Java char arrays so that the 1.3 subclass
* can override it without exposing internals across packages. This
* is a fix for bug 4367783.
*/
protected
void
readCharArray
(
org
.
omg
.
CORBA_2_3
.
portable
.
InputStream
in
,
private
void
readCharArray
(
org
.
omg
.
CORBA_2_3
.
portable
.
InputStream
in
,
char
[]
array
,
int
offset
,
int
length
)
...
...
@@ -795,7 +793,7 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
return
RepositoryId
.
cache
.
getId
(
repId
).
isSequence
();
}
pr
otected
String
getOutputStreamClassName
()
{
pr
ivate
String
getOutputStreamClassName
()
{
return
"com.sun.corba.se.impl.io.IIOPOutputStream"
;
}
...
...
@@ -843,29 +841,11 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
private
IIOPOutputStream
createOutputStreamBuiltInNoPriv
(
final
String
name
)
throws
IOException
{
return
name
.
equals
(
IIOPOutputStream
.
class
.
getName
()
)
?
new
IIOPOutputStream
()
:
name
.
equals
(
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPOutputStream_1_3
.
class
.
getName
()
)
?
new
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPOutputStream_1_3
()
:
name
.
equals
(
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPOutputStream_1_3_1
.
class
.
getName
()
)
?
new
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPOutputStream_1_3_1
()
:
null
;
return
name
.
equals
(
IIOPOutputStream
.
class
.
getName
())
?
new
IIOPOutputStream
()
:
null
;
}
pr
otected
String
getInputStreamClassName
()
{
pr
ivate
String
getInputStreamClassName
()
{
return
"com.sun.corba.se.impl.io.IIOPInputStream"
;
}
...
...
@@ -913,26 +893,8 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
private
IIOPInputStream
createInputStreamBuiltInNoPriv
(
final
String
name
)
throws
IOException
{
return
name
.
equals
(
IIOPInputStream
.
class
.
getName
()
)
?
new
IIOPInputStream
()
:
name
.
equals
(
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPInputStream_1_3
.
class
.
getName
()
)
?
new
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPInputStream_1_3
()
:
name
.
equals
(
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPInputStream_1_3_1
.
class
.
getName
()
)
?
new
com
.
sun
.
corba
.
se
.
impl
.
orbutil
.
IIOPInputStream_1_3_1
()
:
null
;
return
name
.
equals
(
IIOPInputStream
.
class
.
getName
())
?
new
IIOPInputStream
()
:
null
;
}
/**
...
...
@@ -958,12 +920,7 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
}
/**
* Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this.
* The correct behavior is for a Java char to map to a CORBA wchar,
* but our older code mapped it to a CORBA char.
*/
protected
TCKind
getJavaCharTCKind
()
{
TCKind
getJavaCharTCKind
()
{
return
TCKind
.
tk_wchar
;
}
}
src/share/classes/com/sun/corba/se/impl/io/ValueUtility.java
浏览文件 @
6690c1af
/*
* Copyright (c) 1999, 20
0
2, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 20
1
2, 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
...
...
@@ -93,6 +93,14 @@ public class ValueUtility {
null
,
// tk_abstract_interface 32
};
static
{
sun
.
corba
.
SharedSecrets
.
setJavaCorbaAccess
(
new
sun
.
corba
.
JavaCorbaAccess
()
{
public
ValueHandlerImpl
newValueHandlerImpl
()
{
return
ValueHandlerImpl
.
getInstance
();
}
});
}
public
static
String
getSignature
(
ValueMember
member
)
throws
ClassNotFoundException
{
...
...
src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java
浏览文件 @
6690c1af
...
...
@@ -112,6 +112,9 @@ import com.sun.corba.se.impl.util.JDKBridge;
import
com.sun.corba.se.impl.orbutil.ORBClassLoader
;
import
com.sun.corba.se.impl.logging.UtilSystemException
;
import
com.sun.corba.se.spi.logging.CORBALogDomains
;
import
sun.corba.SharedSecrets
;
import
sun.corba.JavaCorbaAccess
;
/**
* Provides utility methods that can be used by stubs and ties to
...
...
@@ -125,7 +128,8 @@ public class Util implements javax.rmi.CORBA.UtilDelegate
// Maps targets to ties.
private
static
IdentityHashtable
exportedServants
=
new
IdentityHashtable
();
private
static
ValueHandlerImpl
valueHandlerSingleton
=
new
ValueHandlerImpl
();
private
static
final
ValueHandlerImpl
valueHandlerSingleton
=
SharedSecrets
.
getJavaCorbaAccess
().
newValueHandlerImpl
();
private
UtilSystemException
utilWrapper
=
UtilSystemException
.
get
(
CORBALogDomains
.
RPC_ENCODING
);
...
...
src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java
浏览文件 @
6690c1af
...
...
@@ -840,7 +840,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
// backward compatability 4365188
CodeBase
cb
;
ValueHandler
vh
=
ORBUtility
.
createValueHandler
(
this
);
ValueHandler
vh
=
ORBUtility
.
createValueHandler
();
cb
=
(
CodeBase
)
vh
.
getRunTimeCodeBase
();
return
ORBUtility
.
connectAndGetIOR
(
this
,
cb
)
;
...
...
src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* 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.orbutil
;
import
java.io.*
;
import
java.util.Hashtable
;
/**
* Implements legacy behavior from before Ladybird to maintain
* backwards compatibility.
*/
public
class
IIOPInputStream_1_3
extends
com
.
sun
.
corba
.
se
.
impl
.
io
.
IIOPInputStream
{
// The newer version in the io package correctly reads a wstring instead.
// This concerns bug 4379597.
protected
String
internalReadUTF
(
org
.
omg
.
CORBA
.
portable
.
InputStream
stream
)
{
return
stream
.
read_string
();
}
/**
* Before JDK 1.3.1_01, the PutField/GetField implementation
* actually sent a Hashtable.
*/
public
ObjectInputStream
.
GetField
readFields
()
throws
IOException
,
ClassNotFoundException
,
NotActiveException
{
Hashtable
fields
=
(
Hashtable
)
readObject
();
return
new
LegacyHookGetFields
(
fields
);
}
public
IIOPInputStream_1_3
()
throws
java
.
io
.
IOException
{
super
();
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* 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.orbutil
;
import
java.io.*
;
/**
* Implements legacy behavior from before Ladybird to maintain
* backwards compatibility.
*/
public
class
IIOPOutputStream_1_3
extends
com
.
sun
.
corba
.
se
.
impl
.
io
.
IIOPOutputStream
{
// We can't assume that the superclass's putFields
// member will be non-private. We must allow
// the RI to run on JDK 1.3.1 FCS as well as
// the JDK 1.3.1_01 patch.
private
ObjectOutputStream
.
PutField
putFields_1_3
;
// The newer version in the io package correctly writes a wstring instead.
// This concerns bug 4379597.
protected
void
internalWriteUTF
(
org
.
omg
.
CORBA
.
portable
.
OutputStream
stream
,
String
data
)
{
stream
.
write_string
(
data
);
}
public
IIOPOutputStream_1_3
()
throws
java
.
io
.
IOException
{
super
();
}
/**
* Before JDK 1.3.1_01, the PutField/GetField implementation
* actually sent a Hashtable.
*/
public
ObjectOutputStream
.
PutField
putFields
()
throws
IOException
{
putFields_1_3
=
new
LegacyHookPutFields
();
return
putFields_1_3
;
}
public
void
writeFields
()
throws
IOException
{
putFields_1_3
.
write
(
this
);
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java
浏览文件 @
6690c1af
/*
* Copyright (c) 2000, 20
09
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 20
12
, 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
...
...
@@ -160,44 +160,12 @@ public final class ORBUtility {
}
/**
* Creates the correct ValueHandler for the given ORB,
* querying ORBVersion information. If the ORB or
* ORBVersion is null, gets the ValueHandler from
* Util.createValueHandler.
* Return default ValueHandler
*/
public
static
ValueHandler
createValueHandler
(
ORB
orb
)
{
if
(
orb
==
null
)
return
Util
.
createValueHandler
();
ORBVersion
version
=
orb
.
getORBVersion
();
if
(
version
==
null
)
return
Util
.
createValueHandler
();
if
(
version
.
equals
(
ORBVersionFactory
.
getOLD
()))
return
new
ValueHandlerImpl_1_3
();
if
(
version
.
equals
(
ORBVersionFactory
.
getNEW
()))
return
new
ValueHandlerImpl_1_3_1
();
public
static
ValueHandler
createValueHandler
()
{
return
Util
.
createValueHandler
();
}
/**
* Returns true if the given ORB could accurately be determined to be a
* Kestrel or earlier ORB. Note: If passed the ORBSingleton, this will return
* false.
*/
public
static
boolean
isLegacyORB
(
ORB
orb
)
{
try
{
ORBVersion
currentORB
=
orb
.
getORBVersion
();
return
currentORB
.
equals
(
ORBVersionFactory
.
getOLD
()
)
;
}
catch
(
SecurityException
se
)
{
return
false
;
}
}
/**
* Returns true if it was accurately determined that the remote ORB is
* a foreign (non-JavaSoft) ORB. Note: If passed the ORBSingleton, this
...
...
src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java
浏览文件 @
6690c1af
/*
* Copyright (c) 2001, 20
03
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 20
12
, 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
...
...
@@ -1119,8 +1119,8 @@ public class ObjectStreamClass_1_3_1 implements java.io.Serializable {
private
boolean
hasExternalizableBlockData
;
Method
writeObjectMethod
;
Method
readObjectMethod
;
private
Method
writeReplaceObjectMethod
;
private
Method
readResolveObjectMethod
;
private
transient
Method
writeReplaceObjectMethod
;
private
transient
Method
readResolveObjectMethod
;
/*
* ObjectStreamClass_1_3_1 that this one was built from.
...
...
src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* Copyright (c) 2000, 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.orbutil
;
import
org.omg.CORBA.ORB
;
import
java.io.Serializable
;
import
java.util.Hashtable
;
import
java.net.MalformedURLException
;
import
com.sun.corba.se.impl.io.TypeMismatchException
;
import
com.sun.corba.se.impl.util.RepositoryId
;
/**
* Delegates to the RepositoryId_1_3 implementation in
* com.sun.corba.se.impl.orbutil. This is necessary to
* overcome the fact that many of RepositoryId's methods
* are static.
*/
public
final
class
RepIdDelegator_1_3
implements
RepositoryIdStrings
,
RepositoryIdUtility
,
RepositoryIdInterface
{
// RepositoryIdFactory methods
public
String
createForAnyType
(
Class
type
)
{
return
RepositoryId_1_3
.
createForAnyType
(
type
);
}
public
String
createForJavaType
(
Serializable
ser
)
throws
TypeMismatchException
{
return
RepositoryId_1_3
.
createForJavaType
(
ser
);
}
public
String
createForJavaType
(
Class
clz
)
throws
TypeMismatchException
{
return
RepositoryId_1_3
.
createForJavaType
(
clz
);
}
public
String
createSequenceRepID
(
java
.
lang
.
Object
ser
)
{
return
RepositoryId_1_3
.
createSequenceRepID
(
ser
);
}
public
String
createSequenceRepID
(
Class
clazz
)
{
return
RepositoryId_1_3
.
createSequenceRepID
(
clazz
);
}
public
RepositoryIdInterface
getFromString
(
String
repIdString
)
{
return
new
RepIdDelegator_1_3
(
RepositoryId_1_3
.
cache
.
getId
(
repIdString
));
}
// RepositoryIdUtility methods
public
boolean
isChunkedEncoding
(
int
valueTag
)
{
return
RepositoryId
.
isChunkedEncoding
(
valueTag
);
}
public
boolean
isCodeBasePresent
(
int
valueTag
)
{
return
RepositoryId
.
isCodeBasePresent
(
valueTag
);
}
public
String
getClassDescValueRepId
()
{
return
RepositoryId_1_3
.
kClassDescValueRepID
;
}
public
String
getWStringValueRepId
()
{
return
RepositoryId_1_3
.
kWStringValueRepID
;
}
public
int
getTypeInfo
(
int
valueTag
)
{
return
RepositoryId
.
getTypeInfo
(
valueTag
);
}
public
int
getStandardRMIChunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIChunked_NoRep
;
}
public
int
getCodeBaseRMIChunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIChunked_NoRep
;
}
public
int
getStandardRMIChunkedId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIChunked
;
}
public
int
getCodeBaseRMIChunkedId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIChunked
;
}
public
int
getStandardRMIUnchunkedId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIUnchunked
;
}
public
int
getCodeBaseRMIUnchunkedId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIUnchunked
;
}
public
int
getStandardRMIUnchunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIUnchunked_NoRep
;
}
public
int
getCodeBaseRMIUnchunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIUnchunked_NoRep
;
}
// RepositoryIdInterface methods
public
Class
getClassFromType
()
throws
ClassNotFoundException
{
return
delegate
.
getClassFromType
();
}
public
Class
getClassFromType
(
String
codebaseURL
)
throws
ClassNotFoundException
,
MalformedURLException
{
return
delegate
.
getClassFromType
(
codebaseURL
);
}
public
Class
getClassFromType
(
Class
expectedType
,
String
codebaseURL
)
throws
ClassNotFoundException
,
MalformedURLException
{
return
delegate
.
getClassFromType
(
expectedType
,
codebaseURL
);
}
public
String
getClassName
()
{
return
delegate
.
getClassName
();
}
// Constructor used for factory/utility cases
public
RepIdDelegator_1_3
()
{}
// Constructor used by getIdFromString. All non-static
// RepositoryId methods will use the provided delegate.
private
RepIdDelegator_1_3
(
RepositoryId_1_3
_delegate
)
{
this
.
delegate
=
_delegate
;
}
private
RepositoryId_1_3
delegate
=
null
;
public
String
toString
()
{
if
(
delegate
!=
null
)
return
delegate
.
toString
();
else
return
this
.
getClass
().
getName
();
}
public
boolean
equals
(
Object
obj
)
{
if
(
delegate
!=
null
)
return
delegate
.
equals
(
obj
);
else
return
super
.
equals
(
obj
);
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* Copyright (c) 2001, 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.orbutil
;
import
org.omg.CORBA.ORB
;
import
java.io.Serializable
;
import
java.util.Hashtable
;
import
java.net.MalformedURLException
;
import
com.sun.corba.se.impl.io.TypeMismatchException
;
import
com.sun.corba.se.impl.util.RepositoryId
;
/**
* Delegates to the RepositoryId_1_3_1 implementation in
* com.sun.corba.se.impl.orbutil. This is necessary to
* overcome the fact that many of RepositoryId's methods
* are static.
*/
public
final
class
RepIdDelegator_1_3_1
implements
RepositoryIdStrings
,
RepositoryIdUtility
,
RepositoryIdInterface
{
// RepositoryIdFactory methods
public
String
createForAnyType
(
Class
type
)
{
return
RepositoryId_1_3_1
.
createForAnyType
(
type
);
}
public
String
createForJavaType
(
Serializable
ser
)
throws
TypeMismatchException
{
return
RepositoryId_1_3_1
.
createForJavaType
(
ser
);
}
public
String
createForJavaType
(
Class
clz
)
throws
TypeMismatchException
{
return
RepositoryId_1_3_1
.
createForJavaType
(
clz
);
}
public
String
createSequenceRepID
(
java
.
lang
.
Object
ser
)
{
return
RepositoryId_1_3_1
.
createSequenceRepID
(
ser
);
}
public
String
createSequenceRepID
(
Class
clazz
)
{
return
RepositoryId_1_3_1
.
createSequenceRepID
(
clazz
);
}
public
RepositoryIdInterface
getFromString
(
String
repIdString
)
{
return
new
RepIdDelegator_1_3_1
(
RepositoryId_1_3_1
.
cache
.
getId
(
repIdString
));
}
// RepositoryIdUtility methods
public
boolean
isChunkedEncoding
(
int
valueTag
)
{
return
RepositoryId
.
isChunkedEncoding
(
valueTag
);
}
public
boolean
isCodeBasePresent
(
int
valueTag
)
{
return
RepositoryId
.
isCodeBasePresent
(
valueTag
);
}
public
String
getClassDescValueRepId
()
{
return
RepositoryId_1_3_1
.
kClassDescValueRepID
;
}
public
String
getWStringValueRepId
()
{
return
RepositoryId_1_3_1
.
kWStringValueRepID
;
}
public
int
getTypeInfo
(
int
valueTag
)
{
return
RepositoryId
.
getTypeInfo
(
valueTag
);
}
public
int
getStandardRMIChunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIChunked_NoRep
;
}
public
int
getCodeBaseRMIChunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIChunked_NoRep
;
}
public
int
getStandardRMIChunkedId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIChunked
;
}
public
int
getCodeBaseRMIChunkedId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIChunked
;
}
public
int
getStandardRMIUnchunkedId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIUnchunked
;
}
public
int
getCodeBaseRMIUnchunkedId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIUnchunked
;
}
public
int
getStandardRMIUnchunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_StandardRMIUnchunked_NoRep
;
}
public
int
getCodeBaseRMIUnchunkedNoRepStrId
()
{
return
RepositoryId
.
kPreComputed_CodeBaseRMIUnchunked_NoRep
;
}
// RepositoryIdInterface methods
public
Class
getClassFromType
()
throws
ClassNotFoundException
{
return
delegate
.
getClassFromType
();
}
public
Class
getClassFromType
(
String
codebaseURL
)
throws
ClassNotFoundException
,
MalformedURLException
{
return
delegate
.
getClassFromType
(
codebaseURL
);
}
public
Class
getClassFromType
(
Class
expectedType
,
String
codebaseURL
)
throws
ClassNotFoundException
,
MalformedURLException
{
return
delegate
.
getClassFromType
(
expectedType
,
codebaseURL
);
}
public
String
getClassName
()
{
return
delegate
.
getClassName
();
}
// Constructor used for factory/utility cases
public
RepIdDelegator_1_3_1
()
{}
// Constructor used by getIdFromString. All non-static
// RepositoryId methods will use the provided delegate.
private
RepIdDelegator_1_3_1
(
RepositoryId_1_3_1
_delegate
)
{
this
.
delegate
=
_delegate
;
}
private
RepositoryId_1_3_1
delegate
=
null
;
public
String
toString
()
{
if
(
delegate
!=
null
)
return
delegate
.
toString
();
else
return
this
.
getClass
().
getName
();
}
public
boolean
equals
(
Object
obj
)
{
if
(
delegate
!=
null
)
return
delegate
.
equals
(
obj
);
else
return
super
.
equals
(
obj
);
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* 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.
*/
/*
* Licensed Materials - Property of IBM
* RMI-IIOP v1.0
* Copyright IBM Corp. 1998 1999 All Rights Reserved
*
*/
package
com.sun.corba.se.impl.orbutil
;
import
java.util.Stack
;
import
java.util.Hashtable
;
import
java.util.EmptyStackException
;
import
java.util.Enumeration
;
// Really limited pool - in this case just creating several at a time...
class
RepositoryIdPool_1_3
extends
Stack
{
private
static
int
MAX_CACHE_SIZE
=
4
;
private
RepositoryIdCache_1_3
cache
;
public
final
synchronized
RepositoryId_1_3
popId
()
{
try
{
return
(
RepositoryId_1_3
)
super
.
pop
();
}
catch
(
EmptyStackException
e
)
{
increasePool
(
5
);
return
(
RepositoryId_1_3
)
super
.
pop
();
}
}
// Pool management
final
void
increasePool
(
int
size
)
{
//if (cache.size() <= MAX_CACHE_SIZE)
for
(
int
i
=
size
;
i
>
0
;
i
--)
push
(
new
RepositoryId_1_3
());
/*
// _REVISIT_ This will not work w/out either thread tracing or weak references. I am
// betting that thread tracing almost completely negates benefit of reuse. Until either
// 1.2 only inclusion or proof to the contrary, I'll leave it this way...
else {
int numToReclaim = cache.size() / 2;
Enumeration keys = cache.keys();
Enumeration elements = cache.elements();
for (int i = numToReclaim; i > 0; i--) {
Object key = keys.nextElement();
Object element = elements.nextElement();
push(element);
cache.remove(key);
}
}
*/
}
final
void
setCaches
(
RepositoryIdCache_1_3
cache
)
{
this
.
cache
=
cache
;
}
}
public
class
RepositoryIdCache_1_3
extends
Hashtable
{
private
RepositoryIdPool_1_3
pool
=
new
RepositoryIdPool_1_3
();
public
RepositoryIdCache_1_3
()
{
pool
.
setCaches
(
this
);
}
public
final
synchronized
RepositoryId_1_3
getId
(
String
key
)
{
RepositoryId_1_3
repId
=
(
RepositoryId_1_3
)
super
.
get
(
key
);
if
(
repId
!=
null
)
return
repId
;
else
{
//repId = pool.popId().init(key);
repId
=
new
RepositoryId_1_3
(
key
);
put
(
key
,
repId
);
return
repId
;
}
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* Copyright (c) 2001, 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.orbutil
;
import
java.util.Stack
;
import
java.util.Hashtable
;
import
java.util.EmptyStackException
;
import
java.util.Enumeration
;
// Really limited pool - in this case just creating several at a time...
class
RepositoryIdPool_1_3_1
extends
Stack
{
private
static
int
MAX_CACHE_SIZE
=
4
;
private
RepositoryIdCache_1_3_1
cache
;
public
final
synchronized
RepositoryId_1_3_1
popId
()
{
try
{
return
(
RepositoryId_1_3_1
)
super
.
pop
();
}
catch
(
EmptyStackException
e
)
{
increasePool
(
5
);
return
(
RepositoryId_1_3_1
)
super
.
pop
();
}
}
// Pool management
final
void
increasePool
(
int
size
)
{
//if (cache.size() <= MAX_CACHE_SIZE)
for
(
int
i
=
size
;
i
>
0
;
i
--)
push
(
new
RepositoryId_1_3_1
());
/*
// _REVISIT_ This will not work w/out either thread tracing or weak references. I am
// betting that thread tracing almost completely negates benefit of reuse. Until either
// 1.2 only inclusion or proof to the contrary, I'll leave it this way...
else {
int numToReclaim = cache.size() / 2;
Enumeration keys = cache.keys();
Enumeration elements = cache.elements();
for (int i = numToReclaim; i > 0; i--) {
Object key = keys.nextElement();
Object element = elements.nextElement();
push(element);
cache.remove(key);
}
}
*/
}
final
void
setCaches
(
RepositoryIdCache_1_3_1
cache
)
{
this
.
cache
=
cache
;
}
}
public
class
RepositoryIdCache_1_3_1
extends
Hashtable
{
private
RepositoryIdPool_1_3_1
pool
=
new
RepositoryIdPool_1_3_1
();
public
RepositoryIdCache_1_3_1
()
{
pool
.
setCaches
(
this
);
}
public
final
synchronized
RepositoryId_1_3_1
getId
(
String
key
)
{
RepositoryId_1_3_1
repId
=
(
RepositoryId_1_3_1
)
super
.
get
(
key
);
if
(
repId
!=
null
)
return
repId
;
else
{
//repId = pool.popId().init(key);
repId
=
new
RepositoryId_1_3_1
(
key
);
put
(
key
,
repId
);
return
repId
;
}
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java
浏览文件 @
6690c1af
/*
* Copyright (c) 2000, 20
03
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 20
12
, 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
...
...
@@ -30,12 +30,6 @@ import com.sun.corba.se.spi.orb.ORB;
public
abstract
class
RepositoryIdFactory
{
private
static
final
RepIdDelegator_1_3
legacyDelegator
=
new
RepIdDelegator_1_3
();
private
static
final
RepIdDelegator_1_3_1
ladybirdDelegator
=
new
RepIdDelegator_1_3_1
();
private
static
final
RepIdDelegator
currentDelegator
=
new
RepIdDelegator
();
...
...
@@ -47,29 +41,6 @@ public abstract class RepositoryIdFactory
return
currentDelegator
;
}
/**
* Checks the version of the ORB and returns the appropriate
* RepositoryIdStrings instance.
*/
public
static
RepositoryIdStrings
getRepIdStringsFactory
(
ORB
orb
)
{
if
(
orb
!=
null
)
{
switch
(
orb
.
getORBVersion
().
getORBType
())
{
case
ORBVersion
.
NEWER
:
case
ORBVersion
.
FOREIGN
:
case
ORBVersion
.
JDK1_3_1_01
:
return
currentDelegator
;
case
ORBVersion
.
OLD
:
return
legacyDelegator
;
case
ORBVersion
.
NEW
:
return
ladybirdDelegator
;
default
:
return
currentDelegator
;
}
}
else
return
currentDelegator
;
}
/**
* Returns the latest version RepositoryIdUtility instance
*/
...
...
@@ -78,26 +49,4 @@ public abstract class RepositoryIdFactory
return
currentDelegator
;
}
/**
* Checks the version of the ORB and returns the appropriate
* RepositoryIdUtility instance.
*/
public
static
RepositoryIdUtility
getRepIdUtility
(
ORB
orb
)
{
if
(
orb
!=
null
)
{
switch
(
orb
.
getORBVersion
().
getORBType
())
{
case
ORBVersion
.
NEWER
:
case
ORBVersion
.
FOREIGN
:
case
ORBVersion
.
JDK1_3_1_01
:
return
currentDelegator
;
case
ORBVersion
.
OLD
:
return
legacyDelegator
;
case
ORBVersion
.
NEW
:
return
ladybirdDelegator
;
default
:
return
currentDelegator
;
}
}
else
return
currentDelegator
;
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* Copyright (c) 2000, 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.
*/
/*
* Licensed Materials - Property of IBM
* RMI-IIOP v1.0
* Copyright IBM Corp. 1998 1999 All Rights Reserved
*
*/
package
com.sun.corba.se.impl.orbutil
;
import
java.util.StringTokenizer
;
import
java.util.Hashtable
;
import
java.io.IOException
;
import
java.lang.reflect.Method
;
// Imports for using codebase URL to load class
import
java.net.MalformedURLException
;
import
org.omg.CORBA.portable.ValueBase
;
import
org.omg.CORBA.portable.IDLEntity
;
import
com.sun.corba.se.impl.util.JDKBridge
;
import
com.sun.corba.se.impl.util.Utility
;
import
com.sun.corba.se.impl.util.PackagePrefixChecker
;
import
com.sun.corba.se.impl.util.IdentityHashtable
;
import
com.sun.corba.se.impl.io.ObjectStreamClass
;
import
javax.rmi.CORBA.Util
;
// keeping the original RepositoryId class that was shipped in
// JDK 1.3. It has interoperability bugs
public
class
RepositoryId_1_3
{
// Legal IDL Identifier characters (1 = legal). Note
// that '.' (2E) is marked as legal even though it is
// not legal in IDL. This allows us to treat a fully
// qualified Java name with '.' package separators
// uniformly, and is safe because that is the only
// legal use of '.' in a Java name.
public
static
final
RepositoryIdCache_1_3
cache
=
new
RepositoryIdCache_1_3
();
private
static
final
byte
[]
IDL_IDENTIFIER_CHARS
=
{
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 00-0f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 10-1f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
0
,
// 20-2f
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
// 30-3f
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// 40-4f
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
1
,
// 50-5f
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// 60-6f
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
// 70-7f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 80-8f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 90-9f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// a0-af
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// b0-bf
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// c0-cf
0
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
1
,
// d0-df
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// e0-ef
0
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
1
,
// f0-ff
};
private
static
String
defaultServerURL
=
null
;
private
static
boolean
useCodebaseOnly
=
false
;
static
{
if
(
defaultServerURL
==
null
)
defaultServerURL
=
(
String
)
JDKBridge
.
getLocalCodebase
();
useCodebaseOnly
=
JDKBridge
.
useCodebaseOnly
();
}
private
static
IdentityHashtable
classToRepStr
=
new
IdentityHashtable
();
private
static
IdentityHashtable
classIDLToRepStr
=
new
IdentityHashtable
();
private
static
IdentityHashtable
classSeqToRepStr
=
new
IdentityHashtable
();
private
static
IdentityHashtable
repStrToByteArray
=
new
IdentityHashtable
();
private
static
Hashtable
repStrToClass
=
new
Hashtable
();
private
String
repId
=
null
;
private
boolean
isSupportedFormat
=
true
;
private
String
typeString
=
null
;
private
String
versionString
=
null
;
private
boolean
isSequence
=
false
;
private
boolean
isRMIValueType
=
false
;
private
boolean
isIDLType
=
false
;
private
String
completeClassName
=
null
;
private
String
unqualifiedName
=
null
;
private
String
definedInId
=
null
;
private
Class
clazz
=
null
;
private
String
suid
=
null
,
actualSuid
=
null
;
private
long
suidLong
=
ObjectStreamClass
.
kDefaultUID
,
actualSuidLong
=
ObjectStreamClass
.
kDefaultUID
;
// Repository ID fragments
private
static
final
String
kValuePrefix
=
"RMI:"
;
private
static
final
String
kIDLPrefix
=
"IDL:"
;
private
static
final
String
kIDLNamePrefix
=
"omg.org/"
;
private
static
final
String
kIDLClassnamePrefix
=
"org.omg."
;
private
static
final
String
kSequencePrefix
=
"["
;
private
static
final
String
kCORBAPrefix
=
"CORBA/"
;
private
static
final
String
kArrayPrefix
=
kValuePrefix
+
kSequencePrefix
+
kCORBAPrefix
;
private
static
final
int
kValuePrefixLength
=
kValuePrefix
.
length
();
private
static
final
int
kIDLPrefixLength
=
kIDLPrefix
.
length
();
private
static
final
int
kSequencePrefixLength
=
kSequencePrefix
.
length
();
private
static
final
String
kInterfaceHashCode
=
":0000000000000000"
;
private
static
final
String
kInterfaceOnlyHashStr
=
"0000000000000000"
;
private
static
final
String
kExternalizableHashStr
=
"0000000000000001"
;
// Value tag utility methods and constants
public
static
final
int
kInitialValueTag
=
0x7fffff00
;
public
static
final
int
kNoTypeInfo
=
0
;
public
static
final
int
kSingleRepTypeInfo
=
0x02
;
public
static
final
int
kPartialListTypeInfo
=
0x06
;
public
static
final
int
kChunkedMask
=
0x08
;
// Public, well known repository IDs
// _REVISIT_ : A table structure with a good search routine for all of this
// would be more efficient and easier to maintain...
// String
public
static
final
String
kWStringValueVersion
=
"1.0"
;
public
static
final
String
kWStringValueHash
=
":"
+
kWStringValueVersion
;
public
static
final
String
kWStringStubValue
=
"WStringValue"
;
public
static
final
String
kWStringTypeStr
=
"omg.org/CORBA/"
+
kWStringStubValue
;
public
static
final
String
kWStringValueRepID
=
kIDLPrefix
+
kWStringTypeStr
+
kWStringValueHash
;
// Any
public
static
final
String
kAnyRepID
=
kIDLPrefix
+
"omg.org/CORBA/Any"
;
// Class
public
static
final
String
kClassDescValueHash
=
":"
+
Long
.
toHexString
(
ObjectStreamClass
.
getSerialVersionUID
(
javax
.
rmi
.
CORBA
.
ClassDesc
.
class
));
public
static
final
String
kClassDescStubValue
=
"ClassDesc"
;
public
static
final
String
kClassDescTypeStr
=
"javax.rmi.CORBA."
+
kClassDescStubValue
;
public
static
final
String
kClassDescValueRepID
=
kValuePrefix
+
kClassDescTypeStr
+
kClassDescValueHash
;
// Object
public
static
final
String
kObjectValueHash
=
":1.0"
;
public
static
final
String
kObjectStubValue
=
"Object"
;
// Sequence
public
static
final
String
kSequenceValueHash
=
":1.0"
;
public
static
final
String
kPrimitiveSequenceValueHash
=
":0000000000000000"
;
// Serializable
public
static
final
String
kSerializableValueHash
=
":1.0"
;
public
static
final
String
kSerializableStubValue
=
"Serializable"
;
// Externalizable
public
static
final
String
kExternalizableValueHash
=
":1.0"
;
public
static
final
String
kExternalizableStubValue
=
"Externalizable"
;
// Remote (The empty string is used for java.rmi.Remote)
public
static
final
String
kRemoteValueHash
=
""
;
public
static
final
String
kRemoteStubValue
=
""
;
public
static
final
String
kRemoteTypeStr
=
""
;
public
static
final
String
kRemoteValueRepID
=
""
;
private
static
final
Hashtable
kSpecialArrayTypeStrings
=
new
Hashtable
();
static
{
kSpecialArrayTypeStrings
.
put
(
"CORBA.WStringValue"
,
new
StringBuffer
(
java
.
lang
.
String
.
class
.
getName
()));
kSpecialArrayTypeStrings
.
put
(
"javax.rmi.CORBA.ClassDesc"
,
new
StringBuffer
(
java
.
lang
.
Class
.
class
.
getName
()));
kSpecialArrayTypeStrings
.
put
(
"CORBA.Object"
,
new
StringBuffer
(
java
.
rmi
.
Remote
.
class
.
getName
()));
}
private
static
final
Hashtable
kSpecialCasesRepIDs
=
new
Hashtable
();
static
{
kSpecialCasesRepIDs
.
put
(
java
.
lang
.
String
.
class
,
kWStringValueRepID
);
kSpecialCasesRepIDs
.
put
(
java
.
lang
.
Class
.
class
,
kClassDescValueRepID
);
kSpecialCasesRepIDs
.
put
(
java
.
rmi
.
Remote
.
class
,
kRemoteValueRepID
);
}
private
static
final
Hashtable
kSpecialCasesStubValues
=
new
Hashtable
();
static
{
kSpecialCasesStubValues
.
put
(
java
.
lang
.
String
.
class
,
kWStringStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
lang
.
Class
.
class
,
kClassDescStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
lang
.
Object
.
class
,
kObjectStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
io
.
Serializable
.
class
,
kSerializableStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
io
.
Externalizable
.
class
,
kExternalizableStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
rmi
.
Remote
.
class
,
kRemoteStubValue
);
}
private
static
final
Hashtable
kSpecialCasesVersions
=
new
Hashtable
();
static
{
kSpecialCasesVersions
.
put
(
java
.
lang
.
String
.
class
,
kWStringValueHash
);
kSpecialCasesVersions
.
put
(
java
.
lang
.
Class
.
class
,
kClassDescValueHash
);
kSpecialCasesVersions
.
put
(
java
.
lang
.
Object
.
class
,
kObjectValueHash
);
kSpecialCasesVersions
.
put
(
java
.
io
.
Serializable
.
class
,
kSerializableValueHash
);
kSpecialCasesVersions
.
put
(
java
.
io
.
Externalizable
.
class
,
kExternalizableValueHash
);
kSpecialCasesVersions
.
put
(
java
.
rmi
.
Remote
.
class
,
kRemoteValueHash
);
}
private
static
final
Hashtable
kSpecialCasesClasses
=
new
Hashtable
();
static
{
kSpecialCasesClasses
.
put
(
kWStringTypeStr
,
java
.
lang
.
String
.
class
);
kSpecialCasesClasses
.
put
(
kClassDescTypeStr
,
java
.
lang
.
Class
.
class
);
kSpecialCasesClasses
.
put
(
kRemoteTypeStr
,
java
.
rmi
.
Remote
.
class
);
kSpecialCasesClasses
.
put
(
"org.omg.CORBA.WStringValue"
,
java
.
lang
.
String
.
class
);
kSpecialCasesClasses
.
put
(
"javax.rmi.CORBA.ClassDesc"
,
java
.
lang
.
Class
.
class
);
//kSpecialCasesClasses.put(kRemoteTypeStr, java.rmi.Remote.class);
}
private
static
final
Hashtable
kSpecialCasesArrayPrefix
=
new
Hashtable
();
static
{
kSpecialCasesArrayPrefix
.
put
(
java
.
lang
.
String
.
class
,
kValuePrefix
+
kSequencePrefix
+
kCORBAPrefix
);
kSpecialCasesArrayPrefix
.
put
(
java
.
lang
.
Class
.
class
,
kValuePrefix
+
kSequencePrefix
+
"javax/rmi/CORBA/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
lang
.
Object
.
class
,
kValuePrefix
+
kSequencePrefix
+
"java/lang/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
io
.
Serializable
.
class
,
kValuePrefix
+
kSequencePrefix
+
"java/io/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
io
.
Externalizable
.
class
,
kValuePrefix
+
kSequencePrefix
+
"java/io/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
rmi
.
Remote
.
class
,
kValuePrefix
+
kSequencePrefix
+
kCORBAPrefix
);
}
private
static
final
Hashtable
kSpecialPrimitives
=
new
Hashtable
();
static
{
kSpecialPrimitives
.
put
(
"int"
,
"long"
);
kSpecialPrimitives
.
put
(
"long"
,
"longlong"
);
kSpecialPrimitives
.
put
(
"byte"
,
"octet"
);
}
/**
* Used to convert ascii to hex.
*/
private
static
final
byte
ASCII_HEX
[]
=
{
(
byte
)
'0'
,
(
byte
)
'1'
,
(
byte
)
'2'
,
(
byte
)
'3'
,
(
byte
)
'4'
,
(
byte
)
'5'
,
(
byte
)
'6'
,
(
byte
)
'7'
,
(
byte
)
'8'
,
(
byte
)
'9'
,
(
byte
)
'A'
,
(
byte
)
'B'
,
(
byte
)
'C'
,
(
byte
)
'D'
,
(
byte
)
'E'
,
(
byte
)
'F'
,
};
// Interface Rep ID Strings
public
static
final
String
kjava_rmi_Remote
=
createForAnyType
(
java
.
rmi
.
Remote
.
class
);
public
static
final
String
korg_omg_CORBA_Object
=
createForAnyType
(
org
.
omg
.
CORBA
.
Object
.
class
);
// Dummy arguments for getIdFromHelper method
public
static
final
Class
kNoParamTypes
[]
={};
public
static
final
Object
kNoArgs
[]
=
{};
RepositoryId_1_3
(){}
RepositoryId_1_3
(
String
aRepId
){
init
(
aRepId
);
}
RepositoryId_1_3
init
(
String
aRepId
){
this
.
repId
=
aRepId
;
// Special case for remote
if
(
aRepId
.
length
()
==
0
)
{
clazz
=
java
.
rmi
.
Remote
.
class
;
typeString
=
""
;
isRMIValueType
=
true
;
suid
=
kInterfaceOnlyHashStr
;
return
this
;
}
else
if
(
aRepId
.
equals
(
kWStringValueRepID
))
{
clazz
=
java
.
lang
.
String
.
class
;
typeString
=
kWStringTypeStr
;
isIDLType
=
true
;
versionString
=
kWStringValueVersion
;
return
this
;
}
else
{
String
repId
=
convertFromISOLatin1
(
aRepId
);
versionString
=
repId
.
substring
(
repId
.
indexOf
(
':'
,
repId
.
indexOf
(
':'
)+
1
));
if
(
repId
.
startsWith
(
kIDLPrefix
))
{
typeString
=
repId
.
substring
(
kIDLPrefixLength
,
repId
.
indexOf
(
':'
,
kIDLPrefixLength
));
isIDLType
=
true
;
if
(
typeString
.
startsWith
(
kIDLNamePrefix
))
completeClassName
=
kIDLClassnamePrefix
+
typeString
.
substring
(
kIDLNamePrefix
.
length
()).
replace
(
'/'
,
'.'
);
else
completeClassName
=
typeString
.
replace
(
'/'
,
'.'
);
}
else
if
(
repId
.
startsWith
(
kValuePrefix
))
{
typeString
=
repId
.
substring
(
kValuePrefixLength
,
repId
.
indexOf
(
':'
,
kValuePrefixLength
));
isRMIValueType
=
true
;
if
(
versionString
.
indexOf
(
'.'
)
==
-
1
)
{
actualSuid
=
versionString
.
substring
(
1
);
suid
=
actualSuid
;
// default if not explicitly specified
if
(
actualSuid
.
indexOf
(
':'
)
!=
-
1
){
// we have a declared hash also
int
pos
=
actualSuid
.
indexOf
(
':'
)+
1
;
// actualSuid = suid.substring(pos);
// suid = suid.substring(0, pos-1);
suid
=
actualSuid
.
substring
(
pos
);
actualSuid
=
actualSuid
.
substring
(
0
,
pos
-
1
);
}
}
else
{
// _REVISIT_ : Special case version failure ?
}
}
else
isSupportedFormat
=
false
;
if
(
typeString
.
startsWith
(
kSequencePrefix
))
{
isSequence
=
true
;
}
return
this
;
}
}
public
final
String
getUnqualifiedName
()
{
if
(
unqualifiedName
==
null
){
String
className
=
getClassName
();
int
index
=
(
className
!=
null
)
?
className
.
lastIndexOf
(
'.'
)
:
-
1
;
if
(
index
==
-
1
){
unqualifiedName
=
className
;
definedInId
=
"IDL::1.0"
;
}
else
{
unqualifiedName
=
className
.
substring
(
index
);
definedInId
=
"IDL:"
+
className
.
substring
(
0
,
index
).
replace
(
'.'
,
'/'
)
+
":1.0"
;
}
}
return
unqualifiedName
;
}
public
final
String
getDefinedInId
()
{
if
(
definedInId
==
null
){
getUnqualifiedName
();
}
return
definedInId
;
}
public
final
String
getTypeString
()
{
return
typeString
;
}
public
final
String
getVersionString
()
{
return
versionString
;
}
public
final
String
getSerialVersionUID
()
{
return
suid
;
}
public
final
String
getActualSerialVersionUID
()
{
return
actualSuid
;
}
public
final
long
getSerialVersionUIDAsLong
()
{
return
suidLong
;
}
public
final
long
getActualSerialVersionUIDAsLong
()
{
return
actualSuidLong
;
}
public
final
boolean
isRMIValueType
()
{
return
isRMIValueType
;
}
public
final
boolean
isIDLType
()
{
return
isIDLType
;
}
public
final
String
getRepositoryId
()
{
return
repId
;
}
public
static
byte
[]
getByteArray
(
String
repStr
)
{
synchronized
(
repStrToByteArray
){
return
(
byte
[])
repStrToByteArray
.
get
(
repStr
);
}
}
public
static
void
setByteArray
(
String
repStr
,
byte
[]
repStrBytes
)
{
synchronized
(
repStrToByteArray
){
repStrToByteArray
.
put
(
repStr
,
repStrBytes
);
}
}
public
final
boolean
isSequence
()
{
return
isSequence
;
}
public
final
boolean
isSupportedFormat
()
{
return
isSupportedFormat
;
}
// This method will return the classname from the typestring OR if the classname turns out to be
// a special class "pseudo" name, then the matching real classname is returned.
public
final
String
getClassName
()
{
if
(
isRMIValueType
)
return
typeString
;
else
if
(
isIDLType
)
return
completeClassName
;
else
return
null
;
}
// This method calls getClazzFromType() and falls back to the repStrToClass
// cache if no class was found. It's used where any class matching the
// given repid is an acceptable result.
public
final
Class
getAnyClassFromType
()
throws
ClassNotFoundException
{
try
{
return
getClassFromType
();
}
catch
(
ClassNotFoundException
cnfe
)
{
Class
clz
=
(
Class
)
repStrToClass
.
get
(
repId
);
if
(
clz
!=
null
)
return
clz
;
else
throw
cnfe
;
}
}
public
final
Class
getClassFromType
()
throws
ClassNotFoundException
{
if
(
clazz
!=
null
)
return
clazz
;
Class
specialCase
=
(
Class
)
kSpecialCasesClasses
.
get
(
getClassName
());
if
(
specialCase
!=
null
){
clazz
=
specialCase
;
return
specialCase
;
}
else
{
try
{
return
Util
.
loadClass
(
getClassName
(),
null
,
null
);
}
catch
(
ClassNotFoundException
cnfe
){
if
(
defaultServerURL
!=
null
)
{
try
{
return
getClassFromType
(
defaultServerURL
);
}
catch
(
MalformedURLException
mue
){
throw
cnfe
;
}
}
else
throw
cnfe
;
}
}
}
public
final
Class
getClassFromType
(
Class
expectedType
,
String
codebase
)
throws
ClassNotFoundException
{
if
(
clazz
!=
null
)
return
clazz
;
Class
specialCase
=
(
Class
)
kSpecialCasesClasses
.
get
(
getClassName
());
if
(
specialCase
!=
null
){
clazz
=
specialCase
;
return
specialCase
;
}
else
{
ClassLoader
expectedTypeClassLoader
=
(
expectedType
==
null
?
null
:
expectedType
.
getClassLoader
());
return
loadClassOfType
(
getClassName
(),
codebase
,
expectedTypeClassLoader
,
expectedType
,
expectedTypeClassLoader
);
}
}
public
final
Class
getClassFromType
(
String
url
)
throws
ClassNotFoundException
,
MalformedURLException
{
return
Util
.
loadClass
(
getClassName
(),
url
,
null
);
}
public
final
String
toString
()
{
return
repId
;
}
private
static
String
createHashString
(
java
.
io
.
Serializable
ser
)
{
return
createHashString
(
ser
.
getClass
());
}
private
static
String
createHashString
(
java
.
lang
.
Class
clazz
)
{
if
(
clazz
.
isInterface
()
||
!
java
.
io
.
Serializable
.
class
.
isAssignableFrom
(
clazz
))
return
kInterfaceHashCode
;
long
actualLong
=
ObjectStreamClassUtil_1_3
.
computeStructuralUID
(
false
,
clazz
);
String
hash
=
null
;
if
(
actualLong
==
0
)
hash
=
kInterfaceOnlyHashStr
;
else
if
(
actualLong
==
1
)
hash
=
kExternalizableHashStr
;
else
hash
=
Long
.
toHexString
(
actualLong
).
toUpperCase
();
while
(
hash
.
length
()
<
16
){
hash
=
"0"
+
hash
;
}
long
declaredLong
=
ObjectStreamClassUtil_1_3
.
computeSerialVersionUID
(
clazz
);
String
declared
=
null
;
if
(
declaredLong
==
0
)
declared
=
kInterfaceOnlyHashStr
;
else
if
(
declaredLong
==
1
)
declared
=
kExternalizableHashStr
;
else
declared
=
Long
.
toHexString
(
declaredLong
).
toUpperCase
();
while
(
declared
.
length
()
<
16
){
declared
=
"0"
+
declared
;
}
hash
=
hash
+
":"
+
declared
;
return
":"
+
hash
;
}
/**
* Creates a repository ID for a sequence. This is for expert users only as
* this method assumes the object passed is an array. If passed an object
* that is not an array, it will produce a rep id for a sequence of zero
* length. This would be an error.
* @param ser The Java object to create a repository ID for
**/
public
static
String
createSequenceRepID
(
java
.
lang
.
Object
ser
){
return
createSequenceRepID
(
ser
.
getClass
());
}
/**
* Creates a repository ID for a sequence. This is for expert users only as
* this method assumes the object passed is an array. If passed an object
* that is not an array, it will produce a malformed rep id.
* @param clazz The Java class to create a repository ID for
**/
public
static
String
createSequenceRepID
(
java
.
lang
.
Class
clazz
){
synchronized
(
classSeqToRepStr
){
String
repid
=
(
String
)
classSeqToRepStr
.
get
(
clazz
);
if
(
repid
!=
null
)
return
repid
;
Class
originalClazz
=
clazz
;
Class
type
=
null
;
int
numOfDims
=
0
;
while
((
type
=
clazz
.
getComponentType
())
!=
null
)
{
numOfDims
++;
clazz
=
type
;
}
if
(
clazz
.
isPrimitive
())
repid
=
kValuePrefix
+
originalClazz
.
getName
()
+
kPrimitiveSequenceValueHash
;
else
{
StringBuffer
buf
=
new
StringBuffer
();
buf
.
append
(
kValuePrefix
);
while
(
numOfDims
--
>
0
)
{
buf
.
append
(
"["
);
}
buf
.
append
(
"L"
);
buf
.
append
(
convertToISOLatin1
(
clazz
.
getName
()));
buf
.
append
(
";"
);
buf
.
append
(
createHashString
(
clazz
));
repid
=
buf
.
toString
();
}
classSeqToRepStr
.
put
(
originalClazz
,
repid
);
return
repid
;
}
}
public
static
String
createForSpecialCase
(
java
.
lang
.
Class
clazz
){
if
(
clazz
.
isArray
()){
return
createSequenceRepID
(
clazz
);
}
else
{
return
(
String
)
kSpecialCasesRepIDs
.
get
(
clazz
);
}
}
public
static
String
createForSpecialCase
(
java
.
io
.
Serializable
ser
){
Class
clazz
=
ser
.
getClass
();
if
(
clazz
.
isArray
()){
return
createSequenceRepID
(
ser
);
}
else
return
createForSpecialCase
(
clazz
);
}
/**
* Creates a repository ID for a normal Java Type.
* @param ser The Java object to create a repository ID for
* @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the
* org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type.
**/
public
static
String
createForJavaType
(
java
.
io
.
Serializable
ser
)
throws
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
{
synchronized
(
classToRepStr
)
{
String
repid
=
createForSpecialCase
(
ser
);
if
(
repid
!=
null
)
return
repid
;
Class
clazz
=
ser
.
getClass
();
repid
=
(
String
)
classToRepStr
.
get
(
clazz
);
if
(
repid
!=
null
)
return
repid
;
repid
=
kValuePrefix
+
convertToISOLatin1
(
clazz
.
getName
())
+
createHashString
(
clazz
);
classToRepStr
.
put
(
clazz
,
repid
);
repStrToClass
.
put
(
repid
,
clazz
);
return
repid
;
}
}
/**
* Creates a repository ID for a normal Java Type.
* @param clz The Java class to create a repository ID for
* @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the
* org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type.
**/
public
static
String
createForJavaType
(
Class
clz
)
throws
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
{
synchronized
(
classToRepStr
){
String
repid
=
createForSpecialCase
(
clz
);
if
(
repid
!=
null
)
return
repid
;
repid
=
(
String
)
classToRepStr
.
get
(
clz
);
if
(
repid
!=
null
)
return
repid
;
repid
=
kValuePrefix
+
convertToISOLatin1
(
clz
.
getName
())
+
createHashString
(
clz
);
classToRepStr
.
put
(
clz
,
repid
);
repStrToClass
.
put
(
repid
,
clz
);
return
repid
;
}
}
/**
* Creates a repository ID for an IDL Java Type.
* @param ser The IDL Value object to create a repository ID for
* @param major The major version number
* @param minor The minor version number
* @exception com.sun.corba.se.impl.io.TypeMismatchException if ser does not implement the
* org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type.
**/
public
static
String
createForIDLType
(
Class
ser
,
int
major
,
int
minor
)
throws
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
{
synchronized
(
classIDLToRepStr
){
String
repid
=
(
String
)
classIDLToRepStr
.
get
(
ser
);
if
(
repid
!=
null
)
return
repid
;
repid
=
kIDLPrefix
+
convertToISOLatin1
(
ser
.
getName
()).
replace
(
'.'
,
'/'
)
+
":"
+
major
+
"."
+
minor
;
classIDLToRepStr
.
put
(
ser
,
repid
);
return
repid
;
}
}
private
static
String
getIdFromHelper
(
Class
clazz
){
try
{
Class
helperClazz
=
Utility
.
loadClassForClass
(
clazz
.
getName
()+
"Helper"
,
null
,
clazz
.
getClassLoader
(),
clazz
,
clazz
.
getClassLoader
());
Method
idMethod
=
helperClazz
.
getDeclaredMethod
(
"id"
,
kNoParamTypes
);
return
(
String
)
idMethod
.
invoke
(
null
,
kNoArgs
);
}
catch
(
java
.
lang
.
ClassNotFoundException
cnfe
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
cnfe
.
toString
());
}
catch
(
java
.
lang
.
NoSuchMethodException
nsme
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
nsme
.
toString
());
}
catch
(
java
.
lang
.
reflect
.
InvocationTargetException
ite
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
ite
.
toString
());
}
catch
(
java
.
lang
.
IllegalAccessException
iae
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
iae
.
toString
());
}
}
/**
* Createa a repository ID for the type if it is either a java type
* or an IDL type.
* @param type The type to create rep. id for
* @return The rep. id.
**/
public
static
String
createForAnyType
(
Class
type
)
{
try
{
if
(
type
.
isArray
())
return
createSequenceRepID
(
type
);
else
if
(
IDLEntity
.
class
.
isAssignableFrom
(
type
))
{
try
{
return
getIdFromHelper
(
type
);
}
catch
(
Throwable
t
)
{
return
createForIDLType
(
type
,
1
,
0
);
}
}
else
return
createForJavaType
(
type
);
}
catch
(
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
e
){
return
null
;
}
}
public
static
boolean
isAbstractBase
(
Class
clazz
)
{
return
(
clazz
.
isInterface
()
&&
IDLEntity
.
class
.
isAssignableFrom
(
clazz
)
&&
(!
ValueBase
.
class
.
isAssignableFrom
(
clazz
))
&&
(!
org
.
omg
.
CORBA
.
Object
.
class
.
isAssignableFrom
(
clazz
)));
}
/**
* Convert strings with illegal IDL identifier characters.
* <p>
* Section 5.5.7 of OBV spec.
*/
private
static
String
convertToISOLatin1
(
String
name
)
{
int
length
=
name
.
length
();
if
(
length
==
0
)
{
return
name
;
}
StringBuffer
buffer
=
null
;
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
char
c
=
name
.
charAt
(
i
);
if
(
c
>
255
||
IDL_IDENTIFIER_CHARS
[
c
]
==
0
)
{
// We gotta convert. Have we already started?
if
(
buffer
==
null
)
{
// No, so get set up...
buffer
=
new
StringBuffer
(
name
.
substring
(
0
,
i
));
}
// Convert the character into the IDL escape syntax...
buffer
.
append
(
"\\U"
+
(
char
)
ASCII_HEX
[(
c
&
0xF000
)
>>>
12
]
+
(
char
)
ASCII_HEX
[(
c
&
0x0F00
)
>>>
8
]
+
(
char
)
ASCII_HEX
[(
c
&
0x00F0
)
>>>
4
]
+
(
char
)
ASCII_HEX
[(
c
&
0x000F
)]);
}
else
{
if
(
buffer
!=
null
)
{
buffer
.
append
(
c
);
}
}
}
if
(
buffer
!=
null
)
{
name
=
buffer
.
toString
();
}
return
name
;
}
/**
* Convert strings with ISO Latin 1 escape sequences back to original strings.
* <p>
* Section 5.5.7 of OBV spec.
*/
private
static
String
convertFromISOLatin1
(
String
name
)
{
int
index
=
-
1
;
StringBuffer
buf
=
new
StringBuffer
(
name
);
while
((
index
=
buf
.
toString
().
indexOf
(
"\\U"
))
!=
-
1
){
String
str
=
"0000"
+
buf
.
toString
().
substring
(
index
+
2
,
index
+
6
);
// Convert Hexadecimal
byte
[]
buffer
=
new
byte
[(
str
.
length
()
-
4
)
/
2
];
for
(
int
i
=
4
,
j
=
0
;
i
<
str
.
length
();
i
+=
2
,
j
++)
{
buffer
[
j
]
=
(
byte
)((
ORBUtility
.
hexOf
(
str
.
charAt
(
i
))
<<
4
)
&
0xF0
);
buffer
[
j
]
|=
(
byte
)((
ORBUtility
.
hexOf
(
str
.
charAt
(
i
+
1
))
<<
0
)
&
0x0F
);
}
buf
=
new
StringBuffer
(
delete
(
buf
.
toString
(),
index
,
index
+
6
));
buf
.
insert
(
index
,
(
char
)
buffer
[
1
]);
}
return
buf
.
toString
();
}
private
static
String
delete
(
String
str
,
int
from
,
int
to
)
{
return
str
.
substring
(
0
,
from
)
+
str
.
substring
(
to
,
str
.
length
());
}
private
static
String
replace
(
String
target
,
String
arg
,
String
source
)
{
int
i
=
0
;
i
=
target
.
indexOf
(
arg
);
while
(
i
!=
-
1
)
{
String
left
=
target
.
substring
(
0
,
i
);
String
right
=
target
.
substring
(
i
+
arg
.
length
());
target
=
new
String
(
left
+
source
+
right
);
i
=
target
.
indexOf
(
arg
);
}
return
target
;
}
/*
* Load a class and check that it is assignable to a given type.
* @param className the class name.
* @param remoteCodebase the codebase to use. May be null.
* @param loader the class loader of last resort. May be null.
* @param expectedType the expected type. May be null.
* @return the loaded class.
*/
private
Class
loadClassOfType
(
String
className
,
String
remoteCodebase
,
ClassLoader
loader
,
Class
expectedType
,
ClassLoader
expectedTypeClassLoader
)
throws
ClassNotFoundException
{
Class
loadedClass
=
null
;
try
{
//Sequence finding of the stubs according to spec
try
{
//If-else is put here for speed up of J2EE.
//According to the OMG spec, the if clause is not dead code.
//It can occur if some compiler has allowed generation
//into org.omg.stub hierarchy for non-offending
//classes. This will encourage people to
//produce non-offending class stubs in their own hierarchy.
if
(!
PackagePrefixChecker
.
hasOffendingPrefix
(
PackagePrefixChecker
.
withoutPackagePrefix
(
className
))){
loadedClass
=
Util
.
loadClass
(
PackagePrefixChecker
.
withoutPackagePrefix
(
className
),
remoteCodebase
,
loader
);
}
else
{
loadedClass
=
Util
.
loadClass
(
className
,
remoteCodebase
,
loader
);
}
}
catch
(
ClassNotFoundException
cnfe
)
{
loadedClass
=
Util
.
loadClass
(
className
,
remoteCodebase
,
loader
);
}
if
(
expectedType
==
null
)
return
loadedClass
;
}
catch
(
ClassNotFoundException
cnfe
)
{
if
(
expectedType
==
null
)
throw
cnfe
;
}
// If no class was not loaded, or if the loaded class is not of the
// correct type, make a further attempt to load the correct class
// using the classloader of the expected type.
// _REVISIT_ Is this step necessary, or should the Util,loadClass
// algorithm always produce a valid class if the setup is correct?
// Does the OMG standard algorithm need to be changed to include
// this step?
if
(
loadedClass
==
null
||
!
expectedType
.
isAssignableFrom
(
loadedClass
))
{
if
(
expectedType
.
getClassLoader
()
!=
expectedTypeClassLoader
)
throw
new
IllegalArgumentException
(
"expectedTypeClassLoader not class loader of expectedType."
);
if
(
expectedTypeClassLoader
!=
null
)
loadedClass
=
expectedTypeClassLoader
.
loadClass
(
className
);
else
loadedClass
=
ORBClassLoader
.
loadClass
(
className
);
}
return
loadedClass
;
}
/**
* Checks to see if the FullValueDescription should be retrieved.
* @exception Throws IOException if suids do not match or if the repositoryID
* is not an RMIValueType
*/
public
static
boolean
useFullValueDescription
(
Class
clazz
,
String
repositoryID
)
throws
IOException
{
String
clazzRepIDStr
=
createForAnyType
(
clazz
);
if
(
clazzRepIDStr
.
equals
(
repositoryID
))
return
false
;
RepositoryId_1_3
targetRepid
;
RepositoryId_1_3
clazzRepid
;
synchronized
(
cache
)
{
// to avoid race condition where multiple threads could be
// accessing this method, and their access to the cache may
// be interleaved giving unexpected results
targetRepid
=
cache
.
getId
(
repositoryID
);
clazzRepid
=
cache
.
getId
(
clazzRepIDStr
);
}
if
((
targetRepid
.
isRMIValueType
())
&&
(
clazzRepid
.
isRMIValueType
())){
if
(!
targetRepid
.
getSerialVersionUID
().
equals
(
clazzRepid
.
getSerialVersionUID
()))
{
String
mssg
=
"Mismatched serialization UIDs : Source (Rep. ID"
+
clazzRepid
+
") = "
+
clazzRepid
.
getSerialVersionUID
()
+
" whereas Target (Rep. ID "
+
repositoryID
+
") = "
+
targetRepid
.
getSerialVersionUID
();
throw
new
IOException
(
mssg
);
}
else
{
return
true
;
}
}
else
{
throw
new
IOException
(
"The repository ID is not of an RMI value type (Expected ID = "
+
clazzRepIDStr
+
"; Received ID = "
+
repositoryID
+
")"
);
}
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* 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.util.StringTokenizer
;
import
java.util.Hashtable
;
import
java.io.IOException
;
import
java.lang.reflect.Method
;
import
java.net.MalformedURLException
;
import
org.omg.CORBA.portable.ValueBase
;
import
org.omg.CORBA.portable.IDLEntity
;
//d11638 files in the same package, therefore remove their reference
//import com.sun.corba.se.impl.util.JDKBridge;
//import com.sun.corba.se.impl.util.IdentityHashtable;
import
com.sun.corba.se.impl.util.JDKBridge
;
import
com.sun.corba.se.impl.util.Utility
;
import
com.sun.corba.se.impl.util.PackagePrefixChecker
;
import
com.sun.corba.se.impl.util.IdentityHashtable
;
import
javax.rmi.CORBA.Util
;
/**
* Because all methods in RepositoryId are static, we have
* to duplicate all of this code, freezing it in its 1.3.1
* form for backwards compatibility.
*
* For security reasons, we can't expose enough of
* io/ObjectStreamClass, so it has to be duplicated in
* orbutil.
*/
public
class
RepositoryId_1_3_1
{
// Legal IDL Identifier characters (1 = legal). Note
// that '.' (2E) is marked as legal even though it is
// not legal in IDL. This allows us to treat a fully
// qualified Java name with '.' package separators
// uniformly, and is safe because that is the only
// legal use of '.' in a Java name.
private
static
final
byte
[]
IDL_IDENTIFIER_CHARS
=
{
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 00-0f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 10-1f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
0
,
// 20-2f
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
// 30-3f
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// 40-4f
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
1
,
// 50-5f
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// 60-6f
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
// 70-7f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 80-8f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 90-9f
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// a0-af
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// b0-bf
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// c0-cf
0
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
1
,
// d0-df
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// e0-ef
0
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
1
,
// f0-ff
};
private
static
final
long
serialVersionUID
=
123456789L
;
private
static
String
defaultServerURL
=
null
;
private
static
boolean
useCodebaseOnly
=
false
;
static
{
if
(
defaultServerURL
==
null
)
defaultServerURL
=
(
String
)
JDKBridge
.
getLocalCodebase
();
useCodebaseOnly
=
JDKBridge
.
useCodebaseOnly
();
}
private
static
IdentityHashtable
classToRepStr
=
new
IdentityHashtable
();
private
static
IdentityHashtable
classIDLToRepStr
=
new
IdentityHashtable
();
private
static
IdentityHashtable
classSeqToRepStr
=
new
IdentityHashtable
();
private
static
IdentityHashtable
repStrToByteArray
=
new
IdentityHashtable
();
private
static
Hashtable
repStrToClass
=
new
Hashtable
();
private
String
repId
=
null
;
private
boolean
isSupportedFormat
=
true
;
private
String
typeString
=
null
;
private
String
versionString
=
null
;
private
boolean
isSequence
=
false
;
private
boolean
isRMIValueType
=
false
;
private
boolean
isIDLType
=
false
;
private
String
completeClassName
=
null
;
private
String
unqualifiedName
=
null
;
private
String
definedInId
=
null
;
private
Class
clazz
=
null
;
private
String
suid
=
null
,
actualSuid
=
null
;
private
long
suidLong
=
ObjectStreamClass_1_3_1
.
kDefaultUID
,
actualSuidLong
=
ObjectStreamClass_1_3_1
.
kDefaultUID
;
// Repository ID fragments
private
static
final
String
kSequenceKeyword
=
"seq"
;
private
static
final
String
kValuePrefix
=
"RMI:"
;
private
static
final
String
kIDLPrefix
=
"IDL:"
;
private
static
final
String
kIDLNamePrefix
=
"omg.org/"
;
private
static
final
String
kIDLClassnamePrefix
=
"org.omg."
;
private
static
final
String
kSequencePrefix
=
"["
;
private
static
final
String
kCORBAPrefix
=
"CORBA/"
;
private
static
final
String
kArrayPrefix
=
kValuePrefix
+
kSequencePrefix
+
kCORBAPrefix
;
private
static
final
int
kValuePrefixLength
=
kValuePrefix
.
length
();
private
static
final
int
kIDLPrefixLength
=
kIDLPrefix
.
length
();
private
static
final
int
kSequencePrefixLength
=
kSequencePrefix
.
length
();
private
static
final
String
kInterfaceHashCode
=
":0000000000000000"
;
private
static
final
String
kInterfaceOnlyHashStr
=
"0000000000000000"
;
private
static
final
String
kExternalizableHashStr
=
"0000000000000001"
;
// Value tag utility methods and constants
public
static
final
int
kInitialValueTag
=
0x7fffff00
;
public
static
final
int
kNoTypeInfo
=
0
;
public
static
final
int
kSingleRepTypeInfo
=
0x02
;
public
static
final
int
kPartialListTypeInfo
=
0x06
;
public
static
final
int
kChunkedMask
=
0x08
;
public
static
final
int
kPreComputed_StandardRMIUnchunked
=
RepositoryId_1_3_1
.
computeValueTag
(
false
,
RepositoryId_1_3_1
.
kSingleRepTypeInfo
,
false
);
public
static
final
int
kPreComputed_CodeBaseRMIUnchunked
=
RepositoryId_1_3_1
.
computeValueTag
(
true
,
RepositoryId_1_3_1
.
kSingleRepTypeInfo
,
false
);
public
static
final
int
kPreComputed_StandardRMIChunked
=
RepositoryId_1_3_1
.
computeValueTag
(
false
,
RepositoryId_1_3_1
.
kSingleRepTypeInfo
,
true
);
public
static
final
int
kPreComputed_CodeBaseRMIChunked
=
RepositoryId_1_3_1
.
computeValueTag
(
true
,
RepositoryId_1_3_1
.
kSingleRepTypeInfo
,
true
);
public
static
final
int
kPreComputed_StandardRMIUnchunked_NoRep
=
RepositoryId_1_3_1
.
computeValueTag
(
false
,
RepositoryId_1_3_1
.
kNoTypeInfo
,
false
);
public
static
final
int
kPreComputed_CodeBaseRMIUnchunked_NoRep
=
RepositoryId_1_3_1
.
computeValueTag
(
true
,
RepositoryId_1_3_1
.
kNoTypeInfo
,
false
);
public
static
final
int
kPreComputed_StandardRMIChunked_NoRep
=
RepositoryId_1_3_1
.
computeValueTag
(
false
,
RepositoryId_1_3_1
.
kNoTypeInfo
,
true
);
public
static
final
int
kPreComputed_CodeBaseRMIChunked_NoRep
=
RepositoryId_1_3_1
.
computeValueTag
(
true
,
RepositoryId_1_3_1
.
kNoTypeInfo
,
true
);
// Public, well known repository IDs
// _REVISIT_ : A table structure with a good search routine for all of this
// would be more efficient and easier to maintain...
// String
public
static
final
String
kWStringValueVersion
=
"1.0"
;
public
static
final
String
kWStringValueHash
=
":"
+
kWStringValueVersion
;
public
static
final
String
kWStringStubValue
=
"WStringValue"
;
public
static
final
String
kWStringTypeStr
=
"omg.org/CORBA/"
+
kWStringStubValue
;
public
static
final
String
kWStringValueRepID
=
kIDLPrefix
+
kWStringTypeStr
+
kWStringValueHash
;
// Any
public
static
final
String
kAnyRepID
=
kIDLPrefix
+
"omg.org/CORBA/Any"
;
// Class
// Anita4: convert to uppercase
public
static
final
String
kClassDescValueHash
=
":"
+
Long
.
toHexString
(
ObjectStreamClass_1_3_1
.
getActualSerialVersionUID
(
javax
.
rmi
.
CORBA
.
ClassDesc
.
class
)).
toUpperCase
()
+
":"
+
Long
.
toHexString
(
ObjectStreamClass_1_3_1
.
getSerialVersionUID
(
javax
.
rmi
.
CORBA
.
ClassDesc
.
class
)).
toUpperCase
();
public
static
final
String
kClassDescStubValue
=
"ClassDesc"
;
public
static
final
String
kClassDescTypeStr
=
"javax.rmi.CORBA."
+
kClassDescStubValue
;
public
static
final
String
kClassDescValueRepID
=
kValuePrefix
+
kClassDescTypeStr
+
kClassDescValueHash
;
// Object
public
static
final
String
kObjectValueHash
=
":1.0"
;
public
static
final
String
kObjectStubValue
=
"Object"
;
// Sequence
public
static
final
String
kSequenceValueHash
=
":1.0"
;
public
static
final
String
kPrimitiveSequenceValueHash
=
":0000000000000000"
;
// Serializable
public
static
final
String
kSerializableValueHash
=
":1.0"
;
public
static
final
String
kSerializableStubValue
=
"Serializable"
;
// Externalizable
public
static
final
String
kExternalizableValueHash
=
":1.0"
;
public
static
final
String
kExternalizableStubValue
=
"Externalizable"
;
// Remote (The empty string is used for java.rmi.Remote)
public
static
final
String
kRemoteValueHash
=
""
;
public
static
final
String
kRemoteStubValue
=
""
;
public
static
final
String
kRemoteTypeStr
=
""
;
public
static
final
String
kRemoteValueRepID
=
""
;
private
static
final
Hashtable
kSpecialArrayTypeStrings
=
new
Hashtable
();
static
{
kSpecialArrayTypeStrings
.
put
(
"CORBA.WStringValue"
,
new
StringBuffer
(
java
.
lang
.
String
.
class
.
getName
()));
kSpecialArrayTypeStrings
.
put
(
"javax.rmi.CORBA.ClassDesc"
,
new
StringBuffer
(
java
.
lang
.
Class
.
class
.
getName
()));
kSpecialArrayTypeStrings
.
put
(
"CORBA.Object"
,
new
StringBuffer
(
java
.
rmi
.
Remote
.
class
.
getName
()));
}
private
static
final
Hashtable
kSpecialCasesRepIDs
=
new
Hashtable
();
static
{
kSpecialCasesRepIDs
.
put
(
java
.
lang
.
String
.
class
,
kWStringValueRepID
);
kSpecialCasesRepIDs
.
put
(
java
.
lang
.
Class
.
class
,
kClassDescValueRepID
);
kSpecialCasesRepIDs
.
put
(
java
.
rmi
.
Remote
.
class
,
kRemoteValueRepID
);
}
private
static
final
Hashtable
kSpecialCasesStubValues
=
new
Hashtable
();
static
{
kSpecialCasesStubValues
.
put
(
java
.
lang
.
String
.
class
,
kWStringStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
lang
.
Class
.
class
,
kClassDescStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
lang
.
Object
.
class
,
kObjectStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
io
.
Serializable
.
class
,
kSerializableStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
io
.
Externalizable
.
class
,
kExternalizableStubValue
);
kSpecialCasesStubValues
.
put
(
java
.
rmi
.
Remote
.
class
,
kRemoteStubValue
);
}
private
static
final
Hashtable
kSpecialCasesVersions
=
new
Hashtable
();
static
{
kSpecialCasesVersions
.
put
(
java
.
lang
.
String
.
class
,
kWStringValueHash
);
kSpecialCasesVersions
.
put
(
java
.
lang
.
Class
.
class
,
kClassDescValueHash
);
kSpecialCasesVersions
.
put
(
java
.
lang
.
Object
.
class
,
kObjectValueHash
);
kSpecialCasesVersions
.
put
(
java
.
io
.
Serializable
.
class
,
kSerializableValueHash
);
kSpecialCasesVersions
.
put
(
java
.
io
.
Externalizable
.
class
,
kExternalizableValueHash
);
kSpecialCasesVersions
.
put
(
java
.
rmi
.
Remote
.
class
,
kRemoteValueHash
);
}
private
static
final
Hashtable
kSpecialCasesClasses
=
new
Hashtable
();
static
{
kSpecialCasesClasses
.
put
(
kWStringTypeStr
,
java
.
lang
.
String
.
class
);
kSpecialCasesClasses
.
put
(
kClassDescTypeStr
,
java
.
lang
.
Class
.
class
);
kSpecialCasesClasses
.
put
(
kRemoteTypeStr
,
java
.
rmi
.
Remote
.
class
);
kSpecialCasesClasses
.
put
(
"org.omg.CORBA.WStringValue"
,
java
.
lang
.
String
.
class
);
kSpecialCasesClasses
.
put
(
"javax.rmi.CORBA.ClassDesc"
,
java
.
lang
.
Class
.
class
);
//kSpecialCasesClasses.put(kRemoteTypeStr, java.rmi.Remote.class);
}
private
static
final
Hashtable
kSpecialCasesArrayPrefix
=
new
Hashtable
();
static
{
kSpecialCasesArrayPrefix
.
put
(
java
.
lang
.
String
.
class
,
kValuePrefix
+
kSequencePrefix
+
kCORBAPrefix
);
kSpecialCasesArrayPrefix
.
put
(
java
.
lang
.
Class
.
class
,
kValuePrefix
+
kSequencePrefix
+
"javax/rmi/CORBA/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
lang
.
Object
.
class
,
kValuePrefix
+
kSequencePrefix
+
"java/lang/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
io
.
Serializable
.
class
,
kValuePrefix
+
kSequencePrefix
+
"java/io/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
io
.
Externalizable
.
class
,
kValuePrefix
+
kSequencePrefix
+
"java/io/"
);
kSpecialCasesArrayPrefix
.
put
(
java
.
rmi
.
Remote
.
class
,
kValuePrefix
+
kSequencePrefix
+
kCORBAPrefix
);
}
private
static
final
Hashtable
kSpecialPrimitives
=
new
Hashtable
();
static
{
kSpecialPrimitives
.
put
(
"int"
,
"long"
);
kSpecialPrimitives
.
put
(
"long"
,
"longlong"
);
kSpecialPrimitives
.
put
(
"byte"
,
"octet"
);
}
/**
* Used to convert ascii to hex.
*/
private
static
final
byte
ASCII_HEX
[]
=
{
(
byte
)
'0'
,
(
byte
)
'1'
,
(
byte
)
'2'
,
(
byte
)
'3'
,
(
byte
)
'4'
,
(
byte
)
'5'
,
(
byte
)
'6'
,
(
byte
)
'7'
,
(
byte
)
'8'
,
(
byte
)
'9'
,
(
byte
)
'A'
,
(
byte
)
'B'
,
(
byte
)
'C'
,
(
byte
)
'D'
,
(
byte
)
'E'
,
(
byte
)
'F'
,
};
// bug fix for 4328952; to eliminate possibility of overriding this
// in a subclass.
public
static
final
RepositoryIdCache_1_3_1
cache
=
new
RepositoryIdCache_1_3_1
();
// Interface Rep ID Strings
public
static
final
String
kjava_rmi_Remote
=
createForAnyType
(
java
.
rmi
.
Remote
.
class
);
public
static
final
String
korg_omg_CORBA_Object
=
createForAnyType
(
org
.
omg
.
CORBA
.
Object
.
class
);
// Dummy arguments for getIdFromHelper method
public
static
final
Class
kNoParamTypes
[]
={};
public
static
final
Object
kNoArgs
[]
=
{};
// To create a RepositoryID, use code similar to the following:
// RepositoryId.cache.getId( id );
RepositoryId_1_3_1
(){}
RepositoryId_1_3_1
(
String
aRepId
){
init
(
aRepId
);
}
RepositoryId_1_3_1
init
(
String
aRepId
){
this
.
repId
=
aRepId
;
// Special case for remote
if
(
aRepId
.
length
()
==
0
)
{
clazz
=
java
.
rmi
.
Remote
.
class
;
typeString
=
""
;
isRMIValueType
=
true
;
suid
=
kInterfaceOnlyHashStr
;
return
this
;
}
else
if
(
aRepId
.
equals
(
kWStringValueRepID
))
{
clazz
=
java
.
lang
.
String
.
class
;
typeString
=
kWStringTypeStr
;
isIDLType
=
true
;
// fix where Attempting to obtain a FullValueDescription
// for an RMI value type with a String field causes an exception.
completeClassName
=
"java.lang.String"
;
versionString
=
kWStringValueVersion
;
return
this
;
}
else
{
String
repId
=
convertFromISOLatin1
(
aRepId
);
versionString
=
repId
.
substring
(
repId
.
indexOf
(
':'
,
repId
.
indexOf
(
':'
)+
1
));
if
(
repId
.
startsWith
(
kIDLPrefix
))
{
typeString
=
repId
.
substring
(
kIDLPrefixLength
,
repId
.
indexOf
(
':'
,
kIDLPrefixLength
));
isIDLType
=
true
;
if
(
typeString
.
startsWith
(
kIDLNamePrefix
))
completeClassName
=
kIDLClassnamePrefix
+
typeString
.
substring
(
kIDLNamePrefix
.
length
()).
replace
(
'/'
,
'.'
);
else
completeClassName
=
typeString
.
replace
(
'/'
,
'.'
);
}
else
if
(
repId
.
startsWith
(
kValuePrefix
))
{
typeString
=
repId
.
substring
(
kValuePrefixLength
,
repId
.
indexOf
(
':'
,
kValuePrefixLength
));
isRMIValueType
=
true
;
if
(
versionString
.
indexOf
(
'.'
)
==
-
1
)
{
actualSuid
=
versionString
.
substring
(
1
);
suid
=
actualSuid
;
// default if not explicitly specified
if
(
actualSuid
.
indexOf
(
':'
)
!=
-
1
){
// we have a declared hash also
int
pos
=
actualSuid
.
indexOf
(
':'
)+
1
;
// actualSuid = suid.substring(pos);
// suid = suid.substring(0, pos-1);
suid
=
actualSuid
.
substring
(
pos
);
actualSuid
=
actualSuid
.
substring
(
0
,
pos
-
1
);
}
}
else
{
// _REVISIT_ : Special case version failure ?
}
}
else
isSupportedFormat
=
false
;
if
(
typeString
.
startsWith
(
kSequencePrefix
))
{
isSequence
=
true
;
}
return
this
;
}
}
public
final
String
getUnqualifiedName
()
{
if
(
unqualifiedName
==
null
){
String
className
=
getClassName
();
int
index
=
className
.
lastIndexOf
(
'.'
);
if
(
index
==
-
1
){
unqualifiedName
=
className
;
definedInId
=
"IDL::1.0"
;
}
else
{
unqualifiedName
=
className
.
substring
(
index
);
definedInId
=
"IDL:"
+
className
.
substring
(
0
,
index
).
replace
(
'.'
,
'/'
)
+
":1.0"
;
}
}
return
unqualifiedName
;
}
public
final
String
getDefinedInId
()
{
if
(
definedInId
==
null
){
getUnqualifiedName
();
}
return
definedInId
;
}
public
final
String
getTypeString
()
{
return
typeString
;
}
public
final
String
getVersionString
()
{
return
versionString
;
}
public
final
String
getSerialVersionUID
()
{
return
suid
;
}
public
final
String
getActualSerialVersionUID
()
{
return
actualSuid
;
}
public
final
long
getSerialVersionUIDAsLong
()
{
return
suidLong
;
}
public
final
long
getActualSerialVersionUIDAsLong
()
{
return
actualSuidLong
;
}
public
final
boolean
isRMIValueType
()
{
return
isRMIValueType
;
}
public
final
boolean
isIDLType
()
{
return
isIDLType
;
}
public
final
String
getRepositoryId
()
{
return
repId
;
}
public
static
byte
[]
getByteArray
(
String
repStr
)
{
synchronized
(
repStrToByteArray
){
return
(
byte
[])
repStrToByteArray
.
get
(
repStr
);
}
}
public
static
void
setByteArray
(
String
repStr
,
byte
[]
repStrBytes
)
{
synchronized
(
repStrToByteArray
){
repStrToByteArray
.
put
(
repStr
,
repStrBytes
);
}
}
public
final
boolean
isSequence
()
{
return
isSequence
;
}
public
final
boolean
isSupportedFormat
()
{
return
isSupportedFormat
;
}
// This method will return the classname from the typestring OR if the classname turns out to be
// a special class "pseudo" name, then the matching real classname is returned.
public
final
String
getClassName
()
{
if
(
isRMIValueType
)
return
typeString
;
else
if
(
isIDLType
)
return
completeClassName
;
else
return
null
;
}
// This method calls getClazzFromType() and falls back to the repStrToClass
// cache if no class was found. It's used where any class matching the
// given repid is an acceptable result.
public
final
Class
getAnyClassFromType
()
throws
ClassNotFoundException
{
try
{
return
getClassFromType
();
}
catch
(
ClassNotFoundException
cnfe
)
{
Class
clz
=
(
Class
)
repStrToClass
.
get
(
repId
);
if
(
clz
!=
null
)
return
clz
;
else
throw
cnfe
;
}
}
public
final
Class
getClassFromType
()
throws
ClassNotFoundException
{
if
(
clazz
!=
null
)
return
clazz
;
Class
specialCase
=
(
Class
)
kSpecialCasesClasses
.
get
(
getClassName
());
if
(
specialCase
!=
null
){
clazz
=
specialCase
;
return
specialCase
;
}
else
{
try
{
return
Util
.
loadClass
(
getClassName
(),
null
,
null
);
}
catch
(
ClassNotFoundException
cnfe
){
if
(
defaultServerURL
!=
null
)
{
try
{
return
getClassFromType
(
defaultServerURL
);
}
catch
(
MalformedURLException
mue
){
throw
cnfe
;
}
}
else
throw
cnfe
;
}
}
}
public
final
Class
getClassFromType
(
Class
expectedType
,
String
codebase
)
throws
ClassNotFoundException
{
if
(
clazz
!=
null
)
return
clazz
;
Class
specialCase
=
(
Class
)
kSpecialCasesClasses
.
get
(
getClassName
());
if
(
specialCase
!=
null
){
clazz
=
specialCase
;
return
specialCase
;
}
else
{
ClassLoader
expectedTypeClassLoader
=
(
expectedType
==
null
?
null
:
expectedType
.
getClassLoader
());
return
loadClassOfType
(
getClassName
(),
codebase
,
expectedTypeClassLoader
,
expectedType
,
expectedTypeClassLoader
);
}
}
public
final
Class
getClassFromType
(
String
url
)
throws
ClassNotFoundException
,
MalformedURLException
{
return
Util
.
loadClass
(
getClassName
(),
url
,
null
);
}
public
final
String
toString
()
{
return
repId
;
}
/**
* Checks to see if the FullValueDescription should be retrieved.
* @exception Throws IOException if suids do not match or if the repositoryID
* is not an RMIValueType
*/
public
static
boolean
useFullValueDescription
(
Class
clazz
,
String
repositoryID
)
throws
IOException
{
String
clazzRepIDStr
=
createForAnyType
(
clazz
);
if
(
clazzRepIDStr
.
equals
(
repositoryID
))
return
false
;
RepositoryId_1_3_1
targetRepid
;
RepositoryId_1_3_1
clazzRepid
;
synchronized
(
cache
)
{
// to avoid race condition where multiple threads could be
// accessing this method, and their access to the cache may
// be interleaved giving unexpected results
targetRepid
=
cache
.
getId
(
repositoryID
);
clazzRepid
=
cache
.
getId
(
clazzRepIDStr
);
}
//ObjectStreamClass osc = ObjectStreamClass.lookup(clazz);
if
((
targetRepid
.
isRMIValueType
())
&&
(
clazzRepid
.
isRMIValueType
())){
if
(!
targetRepid
.
getSerialVersionUID
().
equals
(
clazzRepid
.
getSerialVersionUID
()))
{
String
mssg
=
"Mismatched serialization UIDs : Source (Rep. ID"
+
clazzRepid
+
") = "
+
clazzRepid
.
getSerialVersionUID
()
+
" whereas Target (Rep. ID "
+
repositoryID
+
") = "
+
targetRepid
.
getSerialVersionUID
();
//com.sun.corba.se.impl.io.ValueUtility.log("RepositoryId",mssg);
throw
new
IOException
(
mssg
);
}
else
{
return
true
;
}
}
else
{
throw
new
IOException
(
"The repository ID is not of an RMI value type (Expected ID = "
+
clazzRepIDStr
+
"; Received ID = "
+
repositoryID
+
")"
);
}
}
private
static
String
createHashString
(
java
.
io
.
Serializable
ser
)
{
return
createHashString
(
ser
.
getClass
());
}
private
static
String
createHashString
(
java
.
lang
.
Class
clazz
)
{
if
(
clazz
.
isInterface
()
||
!
java
.
io
.
Serializable
.
class
.
isAssignableFrom
(
clazz
))
return
kInterfaceHashCode
;
//ObjectStreamClass osc = ObjectStreamClass.lookup(clazz);
long
actualLong
=
ObjectStreamClass_1_3_1
.
getActualSerialVersionUID
(
clazz
);
String
hash
=
null
;
if
(
actualLong
==
0
)
hash
=
kInterfaceOnlyHashStr
;
else
if
(
actualLong
==
1
)
hash
=
kExternalizableHashStr
;
else
hash
=
Long
.
toHexString
(
actualLong
).
toUpperCase
();
while
(
hash
.
length
()
<
16
){
hash
=
"0"
+
hash
;
}
long
declaredLong
=
ObjectStreamClass_1_3_1
.
getSerialVersionUID
(
clazz
);
String
declared
=
null
;
if
(
declaredLong
==
0
)
declared
=
kInterfaceOnlyHashStr
;
else
if
(
declaredLong
==
1
)
declared
=
kExternalizableHashStr
;
else
declared
=
Long
.
toHexString
(
declaredLong
).
toUpperCase
();
while
(
declared
.
length
()
<
16
){
declared
=
"0"
+
declared
;
}
hash
=
hash
+
":"
+
declared
;
return
":"
+
hash
;
}
/**
* Creates a repository ID for a sequence. This is for expert users only as
* this method assumes the object passed is an array. If passed an object
* that is not an array, it will produce a rep id for a sequence of zero
* length. This would be an error.
* @param ser The Java object to create a repository ID for
**/
public
static
String
createSequenceRepID
(
java
.
lang
.
Object
ser
){
return
createSequenceRepID
(
ser
.
getClass
());
}
/**
* Creates a repository ID for a sequence. This is for expert users only as
* this method assumes the object passed is an array. If passed an object
* that is not an array, it will produce a malformed rep id.
* @param clazz The Java class to create a repository ID for
**/
public
static
String
createSequenceRepID
(
java
.
lang
.
Class
clazz
){
synchronized
(
classSeqToRepStr
){
String
repid
=
(
String
)
classSeqToRepStr
.
get
(
clazz
);
if
(
repid
!=
null
)
return
repid
;
Class
originalClazz
=
clazz
;
Class
type
=
null
;
int
numOfDims
=
0
;
while
((
type
=
clazz
.
getComponentType
())
!=
null
)
{
numOfDims
++;
clazz
=
type
;
}
if
(
clazz
.
isPrimitive
())
repid
=
kValuePrefix
+
originalClazz
.
getName
()
+
kPrimitiveSequenceValueHash
;
else
{
StringBuffer
buf
=
new
StringBuffer
();
buf
.
append
(
kValuePrefix
);
while
(
numOfDims
--
>
0
)
{
buf
.
append
(
"["
);
}
buf
.
append
(
"L"
);
buf
.
append
(
convertToISOLatin1
(
clazz
.
getName
()));
buf
.
append
(
";"
);
buf
.
append
(
createHashString
(
clazz
));
repid
=
buf
.
toString
();
}
classSeqToRepStr
.
put
(
originalClazz
,
repid
);
return
repid
;
}
}
public
static
String
createForSpecialCase
(
java
.
lang
.
Class
clazz
){
if
(
clazz
.
isArray
()){
return
createSequenceRepID
(
clazz
);
}
else
{
return
(
String
)
kSpecialCasesRepIDs
.
get
(
clazz
);
}
}
public
static
String
createForSpecialCase
(
java
.
io
.
Serializable
ser
){
Class
clazz
=
ser
.
getClass
();
if
(
clazz
.
isArray
()){
return
createSequenceRepID
(
ser
);
}
else
return
createForSpecialCase
(
clazz
);
}
/**
* Creates a repository ID for a normal Java Type.
* @param ser The Java object to create a repository ID for
* @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the
* org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type.
**/
public
static
String
createForJavaType
(
java
.
io
.
Serializable
ser
)
throws
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
{
synchronized
(
classToRepStr
)
{
String
repid
=
createForSpecialCase
(
ser
);
if
(
repid
!=
null
)
return
repid
;
Class
clazz
=
ser
.
getClass
();
repid
=
(
String
)
classToRepStr
.
get
(
clazz
);
if
(
repid
!=
null
)
return
repid
;
repid
=
kValuePrefix
+
convertToISOLatin1
(
clazz
.
getName
())
+
createHashString
(
clazz
);
classToRepStr
.
put
(
clazz
,
repid
);
repStrToClass
.
put
(
repid
,
clazz
);
return
repid
;
}
}
/**
* Creates a repository ID for a normal Java Type.
* @param clz The Java class to create a repository ID for
* @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the
* org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type.
**/
public
static
String
createForJavaType
(
Class
clz
)
throws
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
{
synchronized
(
classToRepStr
){
String
repid
=
createForSpecialCase
(
clz
);
if
(
repid
!=
null
)
return
repid
;
repid
=
(
String
)
classToRepStr
.
get
(
clz
);
if
(
repid
!=
null
)
return
repid
;
repid
=
kValuePrefix
+
convertToISOLatin1
(
clz
.
getName
())
+
createHashString
(
clz
);
classToRepStr
.
put
(
clz
,
repid
);
repStrToClass
.
put
(
repid
,
clz
);
return
repid
;
}
}
/**
* Creates a repository ID for an IDL Java Type.
* @param ser The IDL Value object to create a repository ID for
* @param major The major version number
* @param minor The minor version number
* @exception com.sun.corba.se.impl.io.TypeMismatchException if ser does not implement the
* org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type.
**/
public
static
String
createForIDLType
(
Class
ser
,
int
major
,
int
minor
)
throws
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
{
synchronized
(
classIDLToRepStr
){
String
repid
=
(
String
)
classIDLToRepStr
.
get
(
ser
);
if
(
repid
!=
null
)
return
repid
;
repid
=
kIDLPrefix
+
convertToISOLatin1
(
ser
.
getName
()).
replace
(
'.'
,
'/'
)
+
":"
+
major
+
"."
+
minor
;
classIDLToRepStr
.
put
(
ser
,
repid
);
return
repid
;
}
}
private
static
String
getIdFromHelper
(
Class
clazz
){
try
{
Class
helperClazz
=
Utility
.
loadClassForClass
(
clazz
.
getName
()+
"Helper"
,
null
,
clazz
.
getClassLoader
(),
clazz
,
clazz
.
getClassLoader
());
Method
idMethod
=
helperClazz
.
getDeclaredMethod
(
"id"
,
kNoParamTypes
);
return
(
String
)
idMethod
.
invoke
(
null
,
kNoArgs
);
}
catch
(
java
.
lang
.
ClassNotFoundException
cnfe
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
cnfe
.
toString
());
}
catch
(
java
.
lang
.
NoSuchMethodException
nsme
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
nsme
.
toString
());
}
catch
(
java
.
lang
.
reflect
.
InvocationTargetException
ite
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
ite
.
toString
());
}
catch
(
java
.
lang
.
IllegalAccessException
iae
)
{
throw
new
org
.
omg
.
CORBA
.
MARSHAL
(
iae
.
toString
());
}
}
/**
* Createa a repository ID for the type if it is either a java type
* or an IDL type.
* @param type The type to create rep. id for
* @return The rep. id.
**/
public
static
String
createForAnyType
(
Class
type
)
{
try
{
if
(
type
.
isArray
())
return
createSequenceRepID
(
type
);
else
if
(
IDLEntity
.
class
.
isAssignableFrom
(
type
))
{
try
{
return
getIdFromHelper
(
type
);
}
catch
(
Throwable
t
)
{
return
createForIDLType
(
type
,
1
,
0
);
}
}
else
return
createForJavaType
(
type
);
}
catch
(
com
.
sun
.
corba
.
se
.
impl
.
io
.
TypeMismatchException
e
){
return
null
;
}
}
public
static
boolean
isAbstractBase
(
Class
clazz
)
{
return
(
clazz
.
isInterface
()
&&
IDLEntity
.
class
.
isAssignableFrom
(
clazz
)
&&
(!
ValueBase
.
class
.
isAssignableFrom
(
clazz
))
&&
(!
org
.
omg
.
CORBA
.
Object
.
class
.
isAssignableFrom
(
clazz
)));
}
public
static
boolean
isAnyRequired
(
Class
clazz
)
{
return
((
clazz
==
java
.
lang
.
Object
.
class
)
||
(
clazz
==
java
.
io
.
Serializable
.
class
)
||
(
clazz
==
java
.
io
.
Externalizable
.
class
));
}
public
static
long
fromHex
(
String
hexNumber
)
{
if
(
hexNumber
.
startsWith
(
"0x"
))
return
Long
.
valueOf
(
hexNumber
.
substring
(
2
),
16
).
longValue
();
else
return
Long
.
valueOf
(
hexNumber
,
16
).
longValue
();
}
/**
* Convert strings with illegal IDL identifier characters.
* <p>
* Section 5.5.7 of OBV spec.
*/
private
static
String
convertToISOLatin1
(
String
name
)
{
int
length
=
name
.
length
();
if
(
length
==
0
)
{
return
name
;
}
StringBuffer
buffer
=
null
;
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
char
c
=
name
.
charAt
(
i
);
if
(
c
>
255
||
IDL_IDENTIFIER_CHARS
[
c
]
==
0
)
{
// We gotta convert. Have we already started?
if
(
buffer
==
null
)
{
// No, so get set up...
buffer
=
new
StringBuffer
(
name
.
substring
(
0
,
i
));
}
// Convert the character into the IDL escape syntax...
buffer
.
append
(
"\\U"
+
(
char
)
ASCII_HEX
[(
c
&
0xF000
)
>>>
12
]
+
(
char
)
ASCII_HEX
[(
c
&
0x0F00
)
>>>
8
]
+
(
char
)
ASCII_HEX
[(
c
&
0x00F0
)
>>>
4
]
+
(
char
)
ASCII_HEX
[(
c
&
0x000F
)]);
}
else
{
if
(
buffer
!=
null
)
{
buffer
.
append
(
c
);
}
}
}
if
(
buffer
!=
null
)
{
name
=
buffer
.
toString
();
}
return
name
;
}
/**
* Convert strings with ISO Latin 1 escape sequences back to original strings.
* <p>
* Section 5.5.7 of OBV spec.
*/
private
static
String
convertFromISOLatin1
(
String
name
)
{
int
index
=
-
1
;
StringBuffer
buf
=
new
StringBuffer
(
name
);
while
((
index
=
buf
.
toString
().
indexOf
(
"\\U"
))
!=
-
1
){
String
str
=
"0000"
+
buf
.
toString
().
substring
(
index
+
2
,
index
+
6
);
// Convert Hexadecimal
byte
[]
buffer
=
new
byte
[(
str
.
length
()
-
4
)
/
2
];
for
(
int
i
=
4
,
j
=
0
;
i
<
str
.
length
();
i
+=
2
,
j
++)
{
buffer
[
j
]
=
(
byte
)((
ORBUtility
.
hexOf
(
str
.
charAt
(
i
))
<<
4
)
&
0xF0
);
buffer
[
j
]
|=
(
byte
)((
ORBUtility
.
hexOf
(
str
.
charAt
(
i
+
1
))
<<
0
)
&
0x0F
);
}
buf
=
new
StringBuffer
(
delete
(
buf
.
toString
(),
index
,
index
+
6
));
buf
.
insert
(
index
,
(
char
)
buffer
[
1
]);
}
return
buf
.
toString
();
}
private
static
String
delete
(
String
str
,
int
from
,
int
to
)
{
return
str
.
substring
(
0
,
from
)
+
str
.
substring
(
to
,
str
.
length
());
}
private
static
String
replace
(
String
target
,
String
arg
,
String
source
)
{
int
i
=
0
;
i
=
target
.
indexOf
(
arg
);
while
(
i
!=
-
1
)
{
String
left
=
target
.
substring
(
0
,
i
);
String
right
=
target
.
substring
(
i
+
arg
.
length
());
target
=
new
String
(
left
+
source
+
right
);
i
=
target
.
indexOf
(
arg
);
}
return
target
;
}
public
static
int
computeValueTag
(
boolean
codeBasePresent
,
int
typeInfo
,
boolean
chunkedEncoding
){
int
value_tag
=
kInitialValueTag
;
if
(
codeBasePresent
)
value_tag
=
value_tag
|
0x00000001
;
value_tag
=
value_tag
|
typeInfo
;
if
(
chunkedEncoding
)
value_tag
=
value_tag
|
kChunkedMask
;
return
value_tag
;
}
public
static
boolean
isCodeBasePresent
(
int
value_tag
){
return
((
value_tag
&
0x00000001
)
==
1
);
}
public
static
int
getTypeInfo
(
int
value_tag
){
return
(
value_tag
&
0x00000006
);
}
public
static
boolean
isChunkedEncoding
(
int
value_tag
){
return
((
value_tag
&
kChunkedMask
)
!=
0
);
}
public
static
String
getServerURL
(){
return
defaultServerURL
;
}
/*
* Load a class and check that it is assignable to a given type.
* @param className the class name.
* @param remoteCodebase the codebase to use. May be null.
* @param loader the class loader of last resort. May be null.
* @param expectedType the expected type. May be null.
* @return the loaded class.
*/
private
Class
loadClassOfType
(
String
className
,
String
remoteCodebase
,
ClassLoader
loader
,
Class
expectedType
,
ClassLoader
expectedTypeClassLoader
)
throws
ClassNotFoundException
{
Class
loadedClass
=
null
;
try
{
//Sequence finding of the stubs according to spec
try
{
//If-else is put here for speed up of J2EE.
//According to the OMG spec, the if clause is not dead code.
//It can occur if some compiler has allowed generation
//into org.omg.stub hierarchy for non-offending
//classes. This will encourage people to
//produce non-offending class stubs in their own hierarchy.
if
(!
PackagePrefixChecker
.
hasOffendingPrefix
(
PackagePrefixChecker
.
withoutPackagePrefix
(
className
))){
loadedClass
=
Util
.
loadClass
(
PackagePrefixChecker
.
withoutPackagePrefix
(
className
),
remoteCodebase
,
loader
);
}
else
{
loadedClass
=
Util
.
loadClass
(
className
,
remoteCodebase
,
loader
);
}
}
catch
(
ClassNotFoundException
cnfe
)
{
loadedClass
=
Util
.
loadClass
(
className
,
remoteCodebase
,
loader
);
}
if
(
expectedType
==
null
)
return
loadedClass
;
}
catch
(
ClassNotFoundException
cnfe
)
{
if
(
expectedType
==
null
)
throw
cnfe
;
}
// If no class was not loaded, or if the loaded class is not of the
// correct type, make a further attempt to load the correct class
// using the classloader of the expected type.
// _REVISIT_ Is this step necessary, or should the Util,loadClass
// algorithm always produce a valid class if the setup is correct?
// Does the OMG standard algorithm need to be changed to include
// this step?
if
(
loadedClass
==
null
||
!
expectedType
.
isAssignableFrom
(
loadedClass
))
{
if
(
expectedType
.
getClassLoader
()
!=
expectedTypeClassLoader
)
throw
new
IllegalArgumentException
(
"expectedTypeClassLoader not class loader of expectedType."
);
if
(
expectedTypeClassLoader
!=
null
)
loadedClass
=
expectedTypeClassLoader
.
loadClass
(
className
);
else
loadedClass
=
Class
.
forName
(
className
);
}
return
loadedClass
;
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* Licensed Materials - Property of IBM
* RMI-IIOP v1.0
* Copyright IBM Corp. 1998 1999 All Rights Reserved
*
*/
package
com.sun.corba.se.impl.orbutil
;
import
javax.rmi.CORBA.Util
;
import
javax.rmi.PortableRemoteObject
;
import
java.util.Hashtable
;
import
java.util.Stack
;
import
java.io.IOException
;
import
java.util.EmptyStackException
;
import
com.sun.corba.se.impl.util.Utility
;
import
com.sun.corba.se.impl.io.IIOPInputStream
;
import
com.sun.corba.se.impl.io.IIOPOutputStream
;
import
com.sun.corba.se.impl.util.RepositoryId
;
import
com.sun.corba.se.impl.util.Utility
;
import
org.omg.CORBA.TCKind
;
import
org.omg.CORBA.MARSHAL
;
import
org.omg.CORBA.CompletionStatus
;
import
org.omg.CORBA.portable.IndirectionException
;
import
com.sun.org.omg.SendingContext.CodeBase
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
/**
* This class overrides behavior of our current ValueHandlerImpl to
* provide backwards compatibility with JDK 1.3.0.
*/
public
class
ValueHandlerImpl_1_3
extends
com
.
sun
.
corba
.
se
.
impl
.
io
.
ValueHandlerImpl
{
public
ValueHandlerImpl_1_3
(){
super
();
}
public
ValueHandlerImpl_1_3
(
boolean
isInputStream
)
{
super
(
isInputStream
);
}
/**
* Writes the value to the stream using java semantics.
* @param out The stream to write the value to
* @param value The value to be written to the stream
**/
public
void
writeValue
(
org
.
omg
.
CORBA
.
portable
.
OutputStream
_out
,
java
.
io
.
Serializable
value
)
{
super
.
writeValue
(
_out
,
value
);
}
/**
* Reads a value from the stream using java semantics.
* @param in The stream to read the value from
* @param clazz The type of the value to be read in
* @param sender The sending context runtime
**/
public
java
.
io
.
Serializable
readValue
(
org
.
omg
.
CORBA
.
portable
.
InputStream
_in
,
int
offset
,
java
.
lang
.
Class
clazz
,
String
repositoryID
,
org
.
omg
.
SendingContext
.
RunTime
_sender
)
{
return
super
.
readValue
(
_in
,
offset
,
clazz
,
repositoryID
,
_sender
);
}
/**
* Returns the repository ID for the given RMI value Class.
* @param clz The class to return a repository ID for.
* @return the repository ID of the Class.
**/
public
java
.
lang
.
String
getRMIRepositoryID
(
java
.
lang
.
Class
clz
)
{
return
RepositoryId_1_3
.
createForJavaType
(
clz
);
}
/**
* Indicates whether the given Class performs custom or
* default marshaling.
* @param clz The class to test for custom marshaling.
* @return True if the class performs custom marshaling, false
* if it does not.
**/
public
boolean
isCustomMarshaled
(
java
.
lang
.
Class
clz
)
{
return
super
.
isCustomMarshaled
(
clz
);
}
/**
* Returns the CodeBase for this ValueHandler. This is used by
* the ORB runtime. The server sends the service context containing
* the IOR for this CodeBase on the first GIOP reply. The clients
* do the same on the first GIOP request.
* @return the SendingContext.CodeBase of this ValueHandler.
**/
public
org
.
omg
.
SendingContext
.
RunTime
getRunTimeCodeBase
()
{
return
super
.
getRunTimeCodeBase
();
}
/**
* If the value contains a writeReplace method then the result
* is returned. Otherwise, the value itself is returned.
* @return the true value to marshal on the wire.
**/
public
java
.
io
.
Serializable
writeReplace
(
java
.
io
.
Serializable
value
)
{
return
super
.
writeReplace
(
value
);
}
// methods supported for backward compatability so that the appropriate
// Rep-id calculations take place based on the ORB version
/**
* Returns a boolean of whether or not RepositoryId indicates
* FullValueDescriptor.
* used for backward compatability
*/
public
boolean
useFullValueDescription
(
Class
clazz
,
String
repositoryID
)
throws
IOException
{
return
RepositoryId_1_3
.
useFullValueDescription
(
clazz
,
repositoryID
);
}
public
String
getClassName
(
String
id
)
{
RepositoryId_1_3
repID
=
RepositoryId_1_3
.
cache
.
getId
(
id
);
return
repID
.
getClassName
();
}
public
Class
getClassFromType
(
String
id
)
throws
ClassNotFoundException
{
RepositoryId_1_3
repId
=
RepositoryId_1_3
.
cache
.
getId
(
id
);
return
repId
.
getClassFromType
();
}
public
Class
getAnyClassFromType
(
String
id
)
throws
ClassNotFoundException
{
RepositoryId_1_3
repId
=
RepositoryId_1_3
.
cache
.
getId
(
id
);
return
repId
.
getAnyClassFromType
();
}
public
String
createForAnyType
(
Class
cl
)
{
return
RepositoryId_1_3
.
createForAnyType
(
cl
);
}
public
String
getDefinedInId
(
String
id
)
{
RepositoryId_1_3
repId
=
RepositoryId_1_3
.
cache
.
getId
(
id
);
return
repId
.
getDefinedInId
();
}
public
String
getUnqualifiedName
(
String
id
)
{
RepositoryId_1_3
repId
=
RepositoryId_1_3
.
cache
.
getId
(
id
);
return
repId
.
getUnqualifiedName
();
}
public
String
getSerialVersionUID
(
String
id
)
{
RepositoryId_1_3
repId
=
RepositoryId_1_3
.
cache
.
getId
(
id
);
return
repId
.
getSerialVersionUID
();
}
public
boolean
isAbstractBase
(
Class
clazz
)
{
return
RepositoryId_1_3
.
isAbstractBase
(
clazz
);
}
public
boolean
isSequence
(
String
id
)
{
RepositoryId_1_3
repId
=
RepositoryId_1_3
.
cache
.
getId
(
id
);
return
repId
.
isSequence
();
}
/**
* Preserves the incorrect 1.3 behavior which truncates Java chars in
* arrays to 8-bit CORBA chars. Bug 4367783. This enables us to
* continue interoperating with our legacy ORBs. If this goes into
* Ladybird, then Ladybird and Kestrel will interoperate as long as
* people don't use chars greater than 8-bits.
*/
protected
void
writeCharArray
(
org
.
omg
.
CORBA_2_3
.
portable
.
OutputStream
out
,
char
[]
array
,
int
offset
,
int
length
)
{
out
.
write_char_array
(
array
,
offset
,
length
);
}
/**
* Preserves the incorrect 1.3 behavior which truncates Java chars in
* arrays to 8-bit CORBA chars. Bug 4367783. This enables us to
* continue interoperating with our legacy ORBs. If this goes into
* Ladybird, then Ladybird and Kestrel will interoperate as long as
* people don't use chars greater than 8-bits.
*/
protected
void
readCharArray
(
org
.
omg
.
CORBA_2_3
.
portable
.
InputStream
in
,
char
[]
array
,
int
offset
,
int
length
)
{
in
.
read_char_array
(
array
,
offset
,
length
);
}
protected
final
String
getOutputStreamClassName
()
{
return
"com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3"
;
}
protected
final
String
getInputStreamClassName
()
{
return
"com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3"
;
}
/**
* Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this.
* The correct behavior is for a Java char to map to a CORBA wchar,
* but our older code mapped it to a CORBA char.
*/
protected
TCKind
getJavaCharTCKind
()
{
return
TCKind
.
tk_char
;
}
}
src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java
已删除
100644 → 0
浏览文件 @
0c7356ba
/*
* Copyright (c) 2001, 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.orbutil
;
import
org.omg.CORBA.TCKind
;
/**
* This class overrides behavior of our current ValueHandlerImpl to
* provide backwards compatibility with JDK 1.3.1.
*/
public
class
ValueHandlerImpl_1_3_1
extends
com
.
sun
.
corba
.
se
.
impl
.
io
.
ValueHandlerImpl
{
public
ValueHandlerImpl_1_3_1
()
{}
public
ValueHandlerImpl_1_3_1
(
boolean
isInputStream
)
{
super
(
isInputStream
);
}
/**
* Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this.
* The correct behavior is for a Java char to map to a CORBA wchar,
* but our older code mapped it to a CORBA char.
*/
protected
TCKind
getJavaCharTCKind
()
{
return
TCKind
.
tk_char
;
}
/**
* RepositoryId_1_3_1 performs an incorrect repId calculation
* when using serialPersistentFields and one of the fields no longer
* exists on the class itself.
*/
public
boolean
useFullValueDescription
(
Class
clazz
,
String
repositoryID
)
throws
java
.
io
.
IOException
{
return
RepositoryId_1_3_1
.
useFullValueDescription
(
clazz
,
repositoryID
);
}
/**
* Installs the legacy IIOPOutputStream_1_3_1 which does
* PutFields/GetFields incorrectly. Bug 4407244.
*/
protected
final
String
getOutputStreamClassName
()
{
return
"com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3_1"
;
}
/**
* Installs the legacy IIOPInputStream_1_3_1 which does
* PutFields/GetFields incorrectly. Bug 4407244.
*/
protected
final
String
getInputStreamClassName
()
{
return
"com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3_1"
;
}
}
src/share/classes/com/sun/corba/se/spi/orb/ORB.java
浏览文件 @
6690c1af
...
...
@@ -98,6 +98,7 @@ import com.sun.corba.se.impl.logging.OMGSystemException ;
import
com.sun.corba.se.impl.presentation.rmi.PresentationManagerImpl
;
import
com.sun.corba.se.impl.orbutil.ORBClassLoader
;
import
sun.awt.AppContext
;
public
abstract
class
ORB
extends
com
.
sun
.
corba
.
se
.
org
.
omg
.
CORBA
.
ORB
implements
Broker
,
TypeCodeFactory
...
...
@@ -173,14 +174,7 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
protected
MonitoringManager
monitoringManager
;
// There is only one instance of the PresentationManager
// that is shared between all ORBs. This is necessary
// because RMI-IIOP requires the PresentationManager in
// places where no ORB is available, so the PresentationManager
// must be global. It is initialized here as well.
protected
static
PresentationManager
globalPM
=
null
;
static
{
private
static
PresentationManager
setupPresentationManager
()
{
staticWrapper
=
ORBUtilSystemException
.
get
(
CORBALogDomains
.
RPC_PRESENTATION
)
;
...
...
@@ -220,10 +214,11 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
}
)
;
globalPM
=
new
PresentationManagerImpl
(
useDynamicStub
)
;
globalPM
.
setStubFactoryFactory
(
false
,
PresentationManager
pm
=
new
PresentationManagerImpl
(
useDynamicStub
)
;
pm
.
setStubFactoryFactory
(
false
,
PresentationDefaults
.
getStaticStubFactoryFactory
()
)
;
globalPM
.
setStubFactoryFactory
(
true
,
dynamicStubFactoryFactory
)
;
pm
.
setStubFactoryFactory
(
true
,
dynamicStubFactoryFactory
)
;
return
pm
;
}
public
void
destroy
()
{
...
...
@@ -234,11 +229,19 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
byteBufferPool
=
null
;
}
/** Get the single instance of the PresentationManager
/**
* Returns the Presentation Manager for the current thread group, using the ThreadGroup-specific
* AppContext to hold it. Creates and records one if needed.
*/
public
static
PresentationManager
getPresentationManager
()
{
return
globalPM
;
AppContext
ac
=
AppContext
.
getAppContext
();
PresentationManager
pm
=
(
PresentationManager
)
ac
.
get
(
PresentationManager
.
class
);
if
(
pm
==
null
)
{
pm
=
setupPresentationManager
();
ac
.
put
(
PresentationManager
.
class
,
pm
);
}
return
pm
;
}
/** Get the appropriate StubFactoryFactory. This
...
...
@@ -248,8 +251,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
public
static
PresentationManager
.
StubFactoryFactory
getStubFactoryFactory
()
{
boolean
useDynamicStubs
=
globalPM
.
useDynamicStubs
()
;
return
globalPM
.
getStubFactoryFactory
(
useDynamicStubs
)
;
PresentationManager
gPM
=
getPresentationManager
();
boolean
useDynamicStubs
=
gPM
.
useDynamicStubs
()
;
return
gPM
.
getStubFactoryFactory
(
useDynamicStubs
)
;
}
protected
ORB
()
...
...
src/share/classes/
com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1
.java
→
src/share/classes/
sun/corba/JavaCorbaAccess
.java
浏览文件 @
6690c1af
/*
* Copyright (c) 20
01, 200
2, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 20
1
2, 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
...
...
@@ -23,32 +23,10 @@
* questions.
*/
/*
*/
package
com.sun.corba.se.impl.orbutil
;
import
java.io.*
;
import
java.util.Hashtable
;
/**
* Implements legacy behavior from Ladybird to maintain
* backwards compatibility.
*/
public
class
IIOPInputStream_1_3_1
extends
com
.
sun
.
corba
.
se
.
impl
.
io
.
IIOPInputStream
{
public
IIOPInputStream_1_3_1
()
throws
java
.
io
.
IOException
{
super
();
}
package
sun.corba
;
/**
* Before JDK 1.3.1_01, the PutField/GetField implementation
* actually sent a Hashtable.
*/
public
ObjectInputStream
.
GetField
readFields
()
throws
IOException
,
ClassNotFoundException
,
NotActiveException
{
import
com.sun.corba.se.impl.io.ValueHandlerImpl
;
Hashtable
fields
=
(
Hashtable
)
readObject
();
return
new
LegacyHookGetFields
(
fields
);
}
public
interface
JavaCorbaAccess
{
public
ValueHandlerImpl
newValueHandlerImpl
();
}
src/share/classes/
com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3_1
.java
→
src/share/classes/
sun/corba/SharedSecrets
.java
浏览文件 @
6690c1af
/*
* Copyright (c) 20
01, 200
2, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 20
1
2, 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
...
...
@@ -23,44 +23,38 @@
* questions.
*/
/*
*/
package
com.sun.corba.se.impl.orbutil
;
import
java.io.*
;
import
java.util.Hashtable
;
/**
* Implements legacy behavior from Ladybird to maintain
* backwards compatibility.
*/
public
class
IIOPOutputStream_1_3_1
extends
com
.
sun
.
corba
.
se
.
impl
.
io
.
IIOPOutputStream
{
// We can't assume that the superclass's putFields
// member will be non-private. We must allow
// the RI to run on JDK 1.3.1 FCS as well as
// the JDK 1.3.1_01 patch.
private
ObjectOutputStream
.
PutField
putFields_1_3_1
;
public
IIOPOutputStream_1_3_1
()
throws
java
.
io
.
IOException
{
super
();
package
sun.corba
;
import
com.sun.corba.se.impl.io.ValueUtility
;
import
sun.misc.Unsafe
;
import
java.security.AccessController
;
/** A repository of "shared secrets", which are a mechanism for
calling implementation-private methods in another package without
using reflection. A package-private class implements a public
interface and provides the ability to call package-private methods
within that package; the object implementing that interface is
provided through a third package to which access is restricted.
This framework avoids the primary disadvantage of using reflection
for this purpose, namely the loss of compile-time checking. */
// SharedSecrets cloned in corba repo to avoid build issues
public
class
SharedSecrets
{
private
static
final
Unsafe
unsafe
=
Unsafe
.
getUnsafe
();
private
static
JavaCorbaAccess
javaCorbaAccess
;
public
static
JavaCorbaAccess
getJavaCorbaAccess
()
{
if
(
javaCorbaAccess
==
null
)
{
// Ensure ValueUtility is initialized; we know that that class
// provides the shared secret
unsafe
.
ensureClassInitialized
(
ValueUtility
.
class
);
}
return
javaCorbaAccess
;
}
/**
* Before JDK 1.3.1_01, the PutField/GetField implementation
* actually sent a Hashtable.
*/
public
ObjectOutputStream
.
PutField
putFields
()
throws
IOException
{
putFields_1_3_1
=
new
LegacyHookPutFields
();
return
putFields_1_3_1
;
public
static
void
setJavaCorbaAccess
(
JavaCorbaAccess
access
)
{
javaCorbaAccess
=
access
;
}
public
void
writeFields
()
throws
IOException
{
putFields_1_3_1
.
write
(
this
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录