下面列出了怎么用org.omg.CORBA.portable.BoxedValueHelper的API类实例代码及写法,或者点击链接到github查看源代码。
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
private void writeIDLValue(Serializable object, String repID)
{
if (object instanceof StreamableValue) {
((StreamableValue)object)._write(parent);
} else if (object instanceof CustomValue) {
((CustomValue)object).marshal(parent);
} else {
BoxedValueHelper helper = Utility.getHelper(object.getClass(), null, repID);
boolean isCustom = false;
if (helper instanceof ValueHelper && object instanceof CustomMarshal) {
try {
if (((ValueHelper)helper).get_type().type_modifier() == VM_CUSTOM.value)
isCustom = true;
} catch(BadKind ex) {
throw wrapper.badTypecodeForCustomValue( CompletionStatus.COMPLETED_MAYBE,
ex ) ;
}
}
if (isCustom)
((CustomMarshal)object).marshal(parent);
else
helper.write_value(parent, object);
}
}
/**
* Examines the valuetag to see how many (if any) repository IDs
* are present on the wire. If no repository ID information
* is on the wire but the expectedType or expectedTypeRepId
* is known, it will return one of those (favoring the
* expectedType's repId). Failing that, it uses the supplied
* BoxedValueHelper to obtain the repository ID, as a last resort.
*/
private String readRepositoryIds(int valueTag,
Class expectedType,
String expectedTypeRepId,
BoxedValueHelper factory) {
switch(repIdUtil.getTypeInfo(valueTag)) {
case RepositoryIdUtility.NO_TYPE_INFO :
// Throw an exception if we have no repository ID info and
// no expectedType to work with. Otherwise, how would we
// know what to unmarshal?
if (expectedType == null) {
if (expectedTypeRepId != null) {
return expectedTypeRepId;
} else if (factory != null) {
return factory.get_id();
} else {
throw wrapper.expectedTypeNullAndNoRepId(
CompletionStatus.COMPLETED_MAYBE);
}
}
return repIdStrs.createForAnyType(expectedType);
case RepositoryIdUtility.SINGLE_REP_TYPE_INFO :
return read_repositoryId();
case RepositoryIdUtility.PARTIAL_LIST_TYPE_INFO :
return read_repositoryIds();
default:
throw wrapper.badValueTag( CompletionStatus.COMPLETED_MAYBE,
Integer.toHexString(valueTag) ) ;
}
}
private java.lang.Object readIDLValue(int indirection, String repId,
Class clazz, String codebase)
{
ValueFactory factory ;
// Always try to find a ValueFactory first, as required by the spec.
// There are some complications here in the IDL 3.0 mapping (see 1.13.8),
// but basically we must always be able to override the DefaultFactory
// or Helper mappings that are also used. This appears to be the case
// even in the boxed value cases. The original code only did the lookup
// in the case of class implementing either StreamableValue or CustomValue,
// but abstract valuetypes only implement ValueBase, and really require
// the use of the repId to find a factory (including the DefaultFactory).
try {
// use new-style OBV support (factory object)
factory = Utility.getFactory(clazz, codebase, orb, repId);
} catch (MARSHAL marshal) {
// XXX log marshal at one of the INFO levels
// Could not get a factory, so try alternatives
if (!StreamableValue.class.isAssignableFrom(clazz) &&
!CustomValue.class.isAssignableFrom(clazz) &&
ValueBase.class.isAssignableFrom(clazz)) {
// use old-style OBV support (helper object)
BoxedValueHelper helper = Utility.getHelper(clazz, codebase, repId);
if (helper instanceof ValueHelper)
return readIDLValueWithHelper((ValueHelper)helper, indirection);
else
return helper.read_value(parent);
} else {
// must be a boxed IDLEntity, so make a reflective call to the
// helper's static read method...
return readBoxedIDLEntity(clazz, codebase);
}
}
// If there was no error in getting the factory, use it.
valueIndirection = indirection; // for callback
return factory.read_value(parent);
}
/**
* Get the helper for an IDLValue
*
* Throws MARSHAL exception if no helper found.
*/
public static BoxedValueHelper getHelper(Class clazz, String codebase,
String repId)
{
String className = null;
if (clazz != null) {
className = clazz.getName();
if (codebase == null)
codebase = Util.getCodebase(clazz);
} else {
if (repId != null)
className = RepositoryId.cache.getId(repId).getClassName();
if (className == null) // no repId or unrecognized repId
throw wrapper.unableLocateValueHelper(
CompletionStatus.COMPLETED_MAYBE);
}
try {
ClassLoader clazzLoader =
(clazz == null ? null : clazz.getClassLoader());
Class helperClass =
loadClassForClass(className+"Helper", codebase, clazzLoader,
clazz, clazzLoader);
return (BoxedValueHelper)helperClass.newInstance();
} catch (ClassNotFoundException cnfe) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cnfe );
} catch (IllegalAccessException iae) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
iae );
} catch (InstantiationException ie) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
ie );
} catch (ClassCastException cce) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cce );
}
}
/**
* Examines the valuetag to see how many (if any) repository IDs
* are present on the wire. If no repository ID information
* is on the wire but the expectedType or expectedTypeRepId
* is known, it will return one of those (favoring the
* expectedType's repId). Failing that, it uses the supplied
* BoxedValueHelper to obtain the repository ID, as a last resort.
*/
private String readRepositoryIds(int valueTag,
Class expectedType,
String expectedTypeRepId,
BoxedValueHelper factory) {
switch(repIdUtil.getTypeInfo(valueTag)) {
case RepositoryIdUtility.NO_TYPE_INFO :
// Throw an exception if we have no repository ID info and
// no expectedType to work with. Otherwise, how would we
// know what to unmarshal?
if (expectedType == null) {
if (expectedTypeRepId != null) {
return expectedTypeRepId;
} else if (factory != null) {
return factory.get_id();
} else {
throw wrapper.expectedTypeNullAndNoRepId(
CompletionStatus.COMPLETED_MAYBE);
}
}
return repIdStrs.createForAnyType(expectedType);
case RepositoryIdUtility.SINGLE_REP_TYPE_INFO :
return read_repositoryId();
case RepositoryIdUtility.PARTIAL_LIST_TYPE_INFO :
return read_repositoryIds();
default:
throw wrapper.badValueTag( CompletionStatus.COMPLETED_MAYBE,
Integer.toHexString(valueTag) ) ;
}
}
private java.lang.Object readIDLValue(int indirection, String repId,
Class clazz, String codebase)
{
ValueFactory factory ;
// Always try to find a ValueFactory first, as required by the spec.
// There are some complications here in the IDL 3.0 mapping (see 1.13.8),
// but basically we must always be able to override the DefaultFactory
// or Helper mappings that are also used. This appears to be the case
// even in the boxed value cases. The original code only did the lookup
// in the case of class implementing either StreamableValue or CustomValue,
// but abstract valuetypes only implement ValueBase, and really require
// the use of the repId to find a factory (including the DefaultFactory).
try {
// use new-style OBV support (factory object)
factory = Utility.getFactory(clazz, codebase, orb, repId);
} catch (MARSHAL marshal) {
// XXX log marshal at one of the INFO levels
// Could not get a factory, so try alternatives
if (!StreamableValue.class.isAssignableFrom(clazz) &&
!CustomValue.class.isAssignableFrom(clazz) &&
ValueBase.class.isAssignableFrom(clazz)) {
// use old-style OBV support (helper object)
BoxedValueHelper helper = Utility.getHelper(clazz, codebase, repId);
if (helper instanceof ValueHelper)
return readIDLValueWithHelper((ValueHelper)helper, indirection);
else
return helper.read_value(parent);
} else {
// must be a boxed IDLEntity, so make a reflective call to the
// helper's static read method...
return readBoxedIDLEntity(clazz, codebase);
}
}
// If there was no error in getting the factory, use it.
valueIndirection = indirection; // for callback
return factory.read_value(parent);
}
/**
* Get the helper for an IDLValue
*
* Throws MARSHAL exception if no helper found.
*/
public static BoxedValueHelper getHelper(Class clazz, String codebase,
String repId)
{
String className = null;
if (clazz != null) {
className = clazz.getName();
if (codebase == null)
codebase = Util.getCodebase(clazz);
} else {
if (repId != null)
className = RepositoryId.cache.getId(repId).getClassName();
if (className == null) // no repId or unrecognized repId
throw wrapper.unableLocateValueHelper(
CompletionStatus.COMPLETED_MAYBE);
}
try {
ClassLoader clazzLoader =
(clazz == null ? null : clazz.getClassLoader());
Class helperClass =
loadClassForClass(className+"Helper", codebase, clazzLoader,
clazz, clazzLoader);
return (BoxedValueHelper)helperClass.newInstance();
} catch (ClassNotFoundException cnfe) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cnfe );
} catch (IllegalAccessException iae) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
iae );
} catch (InstantiationException ie) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
ie );
} catch (ClassCastException cce) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cce );
}
}
/**
* Examines the valuetag to see how many (if any) repository IDs
* are present on the wire. If no repository ID information
* is on the wire but the expectedType or expectedTypeRepId
* is known, it will return one of those (favoring the
* expectedType's repId). Failing that, it uses the supplied
* BoxedValueHelper to obtain the repository ID, as a last resort.
*/
private String readRepositoryIds(int valueTag,
Class expectedType,
String expectedTypeRepId,
BoxedValueHelper factory) {
switch(repIdUtil.getTypeInfo(valueTag)) {
case RepositoryIdUtility.NO_TYPE_INFO :
// Throw an exception if we have no repository ID info and
// no expectedType to work with. Otherwise, how would we
// know what to unmarshal?
if (expectedType == null) {
if (expectedTypeRepId != null) {
return expectedTypeRepId;
} else if (factory != null) {
return factory.get_id();
} else {
throw wrapper.expectedTypeNullAndNoRepId(
CompletionStatus.COMPLETED_MAYBE);
}
}
return repIdStrs.createForAnyType(expectedType);
case RepositoryIdUtility.SINGLE_REP_TYPE_INFO :
return read_repositoryId();
case RepositoryIdUtility.PARTIAL_LIST_TYPE_INFO :
return read_repositoryIds();
default:
throw wrapper.badValueTag( CompletionStatus.COMPLETED_MAYBE,
Integer.toHexString(valueTag) ) ;
}
}
private java.lang.Object readIDLValue(int indirection, String repId,
Class clazz, String codebase)
{
ValueFactory factory ;
// Always try to find a ValueFactory first, as required by the spec.
// There are some complications here in the IDL 3.0 mapping (see 1.13.8),
// but basically we must always be able to override the DefaultFactory
// or Helper mappings that are also used. This appears to be the case
// even in the boxed value cases. The original code only did the lookup
// in the case of class implementing either StreamableValue or CustomValue,
// but abstract valuetypes only implement ValueBase, and really require
// the use of the repId to find a factory (including the DefaultFactory).
try {
// use new-style OBV support (factory object)
factory = Utility.getFactory(clazz, codebase, orb, repId);
} catch (MARSHAL marshal) {
// XXX log marshal at one of the INFO levels
// Could not get a factory, so try alternatives
if (!StreamableValue.class.isAssignableFrom(clazz) &&
!CustomValue.class.isAssignableFrom(clazz) &&
ValueBase.class.isAssignableFrom(clazz)) {
// use old-style OBV support (helper object)
BoxedValueHelper helper = Utility.getHelper(clazz, codebase, repId);
if (helper instanceof ValueHelper)
return readIDLValueWithHelper((ValueHelper)helper, indirection);
else
return helper.read_value(parent);
} else {
// must be a boxed IDLEntity, so make a reflective call to the
// helper's static read method...
return readBoxedIDLEntity(clazz, codebase);
}
}
// If there was no error in getting the factory, use it.
valueIndirection = indirection; // for callback
return factory.read_value(parent);
}
/**
* Get the helper for an IDLValue
*
* Throws MARSHAL exception if no helper found.
*/
public static BoxedValueHelper getHelper(Class clazz, String codebase,
String repId)
{
String className = null;
if (clazz != null) {
className = clazz.getName();
if (codebase == null)
codebase = Util.getCodebase(clazz);
} else {
if (repId != null)
className = RepositoryId.cache.getId(repId).getClassName();
if (className == null) // no repId or unrecognized repId
throw wrapper.unableLocateValueHelper(
CompletionStatus.COMPLETED_MAYBE);
}
try {
ClassLoader clazzLoader =
(clazz == null ? null : clazz.getClassLoader());
Class helperClass =
loadClassForClass(className+"Helper", codebase, clazzLoader,
clazz, clazzLoader);
return (BoxedValueHelper)helperClass.newInstance();
} catch (ClassNotFoundException cnfe) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cnfe );
} catch (IllegalAccessException iae) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
iae );
} catch (InstantiationException ie) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
ie );
} catch (ClassCastException cce) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cce );
}
}
/**
* Examines the valuetag to see how many (if any) repository IDs
* are present on the wire. If no repository ID information
* is on the wire but the expectedType or expectedTypeRepId
* is known, it will return one of those (favoring the
* expectedType's repId). Failing that, it uses the supplied
* BoxedValueHelper to obtain the repository ID, as a last resort.
*/
private String readRepositoryIds(int valueTag,
Class expectedType,
String expectedTypeRepId,
BoxedValueHelper factory) {
switch(repIdUtil.getTypeInfo(valueTag)) {
case RepositoryIdUtility.NO_TYPE_INFO :
// Throw an exception if we have no repository ID info and
// no expectedType to work with. Otherwise, how would we
// know what to unmarshal?
if (expectedType == null) {
if (expectedTypeRepId != null) {
return expectedTypeRepId;
} else if (factory != null) {
return factory.get_id();
} else {
throw wrapper.expectedTypeNullAndNoRepId(
CompletionStatus.COMPLETED_MAYBE);
}
}
return repIdStrs.createForAnyType(expectedType);
case RepositoryIdUtility.SINGLE_REP_TYPE_INFO :
return read_repositoryId();
case RepositoryIdUtility.PARTIAL_LIST_TYPE_INFO :
return read_repositoryIds();
default:
throw wrapper.badValueTag( CompletionStatus.COMPLETED_MAYBE,
Integer.toHexString(valueTag) ) ;
}
}
private java.lang.Object readIDLValue(int indirection, String repId,
Class clazz, String codebase)
{
ValueFactory factory ;
// Always try to find a ValueFactory first, as required by the spec.
// There are some complications here in the IDL 3.0 mapping (see 1.13.8),
// but basically we must always be able to override the DefaultFactory
// or Helper mappings that are also used. This appears to be the case
// even in the boxed value cases. The original code only did the lookup
// in the case of class implementing either StreamableValue or CustomValue,
// but abstract valuetypes only implement ValueBase, and really require
// the use of the repId to find a factory (including the DefaultFactory).
try {
// use new-style OBV support (factory object)
factory = Utility.getFactory(clazz, codebase, orb, repId);
} catch (MARSHAL marshal) {
// XXX log marshal at one of the INFO levels
// Could not get a factory, so try alternatives
if (!StreamableValue.class.isAssignableFrom(clazz) &&
!CustomValue.class.isAssignableFrom(clazz) &&
ValueBase.class.isAssignableFrom(clazz)) {
// use old-style OBV support (helper object)
BoxedValueHelper helper = Utility.getHelper(clazz, codebase, repId);
if (helper instanceof ValueHelper)
return readIDLValueWithHelper((ValueHelper)helper, indirection);
else
return helper.read_value(parent);
} else {
// must be a boxed IDLEntity, so make a reflective call to the
// helper's static read method...
return readBoxedIDLEntity(clazz, codebase);
}
}
// If there was no error in getting the factory, use it.
valueIndirection = indirection; // for callback
return factory.read_value(parent);
}
/**
* Get the helper for an IDLValue
*
* Throws MARSHAL exception if no helper found.
*/
public static BoxedValueHelper getHelper(Class clazz, String codebase,
String repId)
{
String className = null;
if (clazz != null) {
className = clazz.getName();
if (codebase == null)
codebase = Util.getCodebase(clazz);
} else {
if (repId != null)
className = RepositoryId.cache.getId(repId).getClassName();
if (className == null) // no repId or unrecognized repId
throw wrapper.unableLocateValueHelper(
CompletionStatus.COMPLETED_MAYBE);
}
try {
ClassLoader clazzLoader =
(clazz == null ? null : clazz.getClassLoader());
Class helperClass =
loadClassForClass(className+"Helper", codebase, clazzLoader,
clazz, clazzLoader);
return (BoxedValueHelper)helperClass.newInstance();
} catch (ClassNotFoundException cnfe) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cnfe );
} catch (IllegalAccessException iae) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
iae );
} catch (InstantiationException ie) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
ie );
} catch (ClassCastException cce) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cce );
}
}
/**
* Examines the valuetag to see how many (if any) repository IDs
* are present on the wire. If no repository ID information
* is on the wire but the expectedType or expectedTypeRepId
* is known, it will return one of those (favoring the
* expectedType's repId). Failing that, it uses the supplied
* BoxedValueHelper to obtain the repository ID, as a last resort.
*/
private String readRepositoryIds(int valueTag,
Class expectedType,
String expectedTypeRepId,
BoxedValueHelper factory) {
switch(repIdUtil.getTypeInfo(valueTag)) {
case RepositoryIdUtility.NO_TYPE_INFO :
// Throw an exception if we have no repository ID info and
// no expectedType to work with. Otherwise, how would we
// know what to unmarshal?
if (expectedType == null) {
if (expectedTypeRepId != null) {
return expectedTypeRepId;
} else if (factory != null) {
return factory.get_id();
} else {
throw wrapper.expectedTypeNullAndNoRepId(
CompletionStatus.COMPLETED_MAYBE);
}
}
return repIdStrs.createForAnyType(expectedType);
case RepositoryIdUtility.SINGLE_REP_TYPE_INFO :
return read_repositoryId();
case RepositoryIdUtility.PARTIAL_LIST_TYPE_INFO :
return read_repositoryIds();
default:
throw wrapper.badValueTag( CompletionStatus.COMPLETED_MAYBE,
Integer.toHexString(valueTag) ) ;
}
}
private java.lang.Object readIDLValue(int indirection, String repId,
Class clazz, String codebase)
{
ValueFactory factory ;
// Always try to find a ValueFactory first, as required by the spec.
// There are some complications here in the IDL 3.0 mapping (see 1.13.8),
// but basically we must always be able to override the DefaultFactory
// or Helper mappings that are also used. This appears to be the case
// even in the boxed value cases. The original code only did the lookup
// in the case of class implementing either StreamableValue or CustomValue,
// but abstract valuetypes only implement ValueBase, and really require
// the use of the repId to find a factory (including the DefaultFactory).
try {
// use new-style OBV support (factory object)
factory = Utility.getFactory(clazz, codebase, orb, repId);
} catch (MARSHAL marshal) {
// XXX log marshal at one of the INFO levels
// Could not get a factory, so try alternatives
if (!StreamableValue.class.isAssignableFrom(clazz) &&
!CustomValue.class.isAssignableFrom(clazz) &&
ValueBase.class.isAssignableFrom(clazz)) {
// use old-style OBV support (helper object)
BoxedValueHelper helper = Utility.getHelper(clazz, codebase, repId);
if (helper instanceof ValueHelper)
return readIDLValueWithHelper((ValueHelper)helper, indirection);
else
return helper.read_value(parent);
} else {
// must be a boxed IDLEntity, so make a reflective call to the
// helper's static read method...
return readBoxedIDLEntity(clazz, codebase);
}
}
// If there was no error in getting the factory, use it.
valueIndirection = indirection; // for callback
return factory.read_value(parent);
}
/**
* Get the helper for an IDLValue
*
* Throws MARSHAL exception if no helper found.
*/
public static BoxedValueHelper getHelper(Class clazz, String codebase,
String repId)
{
String className = null;
if (clazz != null) {
className = clazz.getName();
if (codebase == null)
codebase = Util.getCodebase(clazz);
} else {
if (repId != null)
className = RepositoryId.cache.getId(repId).getClassName();
if (className == null) // no repId or unrecognized repId
throw wrapper.unableLocateValueHelper(
CompletionStatus.COMPLETED_MAYBE);
}
try {
ClassLoader clazzLoader =
(clazz == null ? null : clazz.getClassLoader());
Class helperClass =
loadClassForClass(className+"Helper", codebase, clazzLoader,
clazz, clazzLoader);
return (BoxedValueHelper)helperClass.newInstance();
} catch (ClassNotFoundException cnfe) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cnfe );
} catch (IllegalAccessException iae) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
iae );
} catch (InstantiationException ie) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
ie );
} catch (ClassCastException cce) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cce );
}
}
/**
* Examines the valuetag to see how many (if any) repository IDs
* are present on the wire. If no repository ID information
* is on the wire but the expectedType or expectedTypeRepId
* is known, it will return one of those (favoring the
* expectedType's repId). Failing that, it uses the supplied
* BoxedValueHelper to obtain the repository ID, as a last resort.
*/
private String readRepositoryIds(int valueTag,
Class expectedType,
String expectedTypeRepId,
BoxedValueHelper factory) {
switch(repIdUtil.getTypeInfo(valueTag)) {
case RepositoryIdUtility.NO_TYPE_INFO :
// Throw an exception if we have no repository ID info and
// no expectedType to work with. Otherwise, how would we
// know what to unmarshal?
if (expectedType == null) {
if (expectedTypeRepId != null) {
return expectedTypeRepId;
} else if (factory != null) {
return factory.get_id();
} else {
throw wrapper.expectedTypeNullAndNoRepId(
CompletionStatus.COMPLETED_MAYBE);
}
}
return repIdStrs.createForAnyType(expectedType);
case RepositoryIdUtility.SINGLE_REP_TYPE_INFO :
return read_repositoryId();
case RepositoryIdUtility.PARTIAL_LIST_TYPE_INFO :
return read_repositoryIds();
default:
throw wrapper.badValueTag( CompletionStatus.COMPLETED_MAYBE,
Integer.toHexString(valueTag) ) ;
}
}
private java.lang.Object readIDLValue(int indirection, String repId,
Class clazz, String codebase)
{
ValueFactory factory ;
// Always try to find a ValueFactory first, as required by the spec.
// There are some complications here in the IDL 3.0 mapping (see 1.13.8),
// but basically we must always be able to override the DefaultFactory
// or Helper mappings that are also used. This appears to be the case
// even in the boxed value cases. The original code only did the lookup
// in the case of class implementing either StreamableValue or CustomValue,
// but abstract valuetypes only implement ValueBase, and really require
// the use of the repId to find a factory (including the DefaultFactory).
try {
// use new-style OBV support (factory object)
factory = Utility.getFactory(clazz, codebase, orb, repId);
} catch (MARSHAL marshal) {
// XXX log marshal at one of the INFO levels
// Could not get a factory, so try alternatives
if (!StreamableValue.class.isAssignableFrom(clazz) &&
!CustomValue.class.isAssignableFrom(clazz) &&
ValueBase.class.isAssignableFrom(clazz)) {
// use old-style OBV support (helper object)
BoxedValueHelper helper = Utility.getHelper(clazz, codebase, repId);
if (helper instanceof ValueHelper)
return readIDLValueWithHelper((ValueHelper)helper, indirection);
else
return helper.read_value(parent);
} else {
// must be a boxed IDLEntity, so make a reflective call to the
// helper's static read method...
return readBoxedIDLEntity(clazz, codebase);
}
}
// If there was no error in getting the factory, use it.
valueIndirection = indirection; // for callback
return factory.read_value(parent);
}
/**
* Get the helper for an IDLValue
*
* Throws MARSHAL exception if no helper found.
*/
public static BoxedValueHelper getHelper(Class clazz, String codebase,
String repId)
{
String className = null;
if (clazz != null) {
className = clazz.getName();
if (codebase == null)
codebase = Util.getCodebase(clazz);
} else {
if (repId != null)
className = RepositoryId.cache.getId(repId).getClassName();
if (className == null) // no repId or unrecognized repId
throw wrapper.unableLocateValueHelper(
CompletionStatus.COMPLETED_MAYBE);
}
try {
ClassLoader clazzLoader =
(clazz == null ? null : clazz.getClassLoader());
Class helperClass =
loadClassForClass(className+"Helper", codebase, clazzLoader,
clazz, clazzLoader);
return (BoxedValueHelper)helperClass.newInstance();
} catch (ClassNotFoundException cnfe) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cnfe );
} catch (IllegalAccessException iae) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
iae );
} catch (InstantiationException ie) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
ie );
} catch (ClassCastException cce) {
throw wrapper.unableLocateValueHelper( CompletionStatus.COMPLETED_MAYBE,
cce );
}
}
/**
* Examines the valuetag to see how many (if any) repository IDs
* are present on the wire. If no repository ID information
* is on the wire but the expectedType or expectedTypeRepId
* is known, it will return one of those (favoring the
* expectedType's repId). Failing that, it uses the supplied
* BoxedValueHelper to obtain the repository ID, as a last resort.
*/
private String readRepositoryIds(int valueTag,
Class expectedType,
String expectedTypeRepId,
BoxedValueHelper factory) {
switch(repIdUtil.getTypeInfo(valueTag)) {
case RepositoryIdUtility.NO_TYPE_INFO :
// Throw an exception if we have no repository ID info and
// no expectedType to work with. Otherwise, how would we
// know what to unmarshal?
if (expectedType == null) {
if (expectedTypeRepId != null) {
return expectedTypeRepId;
} else if (factory != null) {
return factory.get_id();
} else {
throw wrapper.expectedTypeNullAndNoRepId(
CompletionStatus.COMPLETED_MAYBE);
}
}
return repIdStrs.createForAnyType(expectedType);
case RepositoryIdUtility.SINGLE_REP_TYPE_INFO :
return read_repositoryId();
case RepositoryIdUtility.PARTIAL_LIST_TYPE_INFO :
return read_repositoryIds();
default:
throw wrapper.badValueTag( CompletionStatus.COMPLETED_MAYBE,
Integer.toHexString(valueTag) ) ;
}
}
private java.lang.Object readIDLValue(int indirection, String repId,
Class clazz, String codebase)
{
ValueFactory factory ;
// Always try to find a ValueFactory first, as required by the spec.
// There are some complications here in the IDL 3.0 mapping (see 1.13.8),
// but basically we must always be able to override the DefaultFactory
// or Helper mappings that are also used. This appears to be the case
// even in the boxed value cases. The original code only did the lookup
// in the case of class implementing either StreamableValue or CustomValue,
// but abstract valuetypes only implement ValueBase, and really require
// the use of the repId to find a factory (including the DefaultFactory).
try {
// use new-style OBV support (factory object)
factory = Utility.getFactory(clazz, codebase, orb, repId);
} catch (MARSHAL marshal) {
// XXX log marshal at one of the INFO levels
// Could not get a factory, so try alternatives
if (!StreamableValue.class.isAssignableFrom(clazz) &&
!CustomValue.class.isAssignableFrom(clazz) &&
ValueBase.class.isAssignableFrom(clazz)) {
// use old-style OBV support (helper object)
BoxedValueHelper helper = Utility.getHelper(clazz, codebase, repId);
if (helper instanceof ValueHelper)
return readIDLValueWithHelper((ValueHelper)helper, indirection);
else
return helper.read_value(parent);
} else {
// must be a boxed IDLEntity, so make a reflective call to the
// helper's static read method...
return readBoxedIDLEntity(clazz, codebase);
}
}
// If there was no error in getting the factory, use it.
valueIndirection = indirection; // for callback
return factory.read_value(parent);
}