summaryrefslogtreecommitdiff
path: root/src/main/java/com/amazon/carbonado/raw
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2006-12-01 05:02:37 +0000
committerBrian S. O'Neill <bronee@gmail.com>2006-12-01 05:02:37 +0000
commit80fdb36c2780744f12d3fc527812ecf62980ad8b (patch)
treee73cb9fcfb9829bdea0927a2a69e4d39e739025c /src/main/java/com/amazon/carbonado/raw
parentcb59d123bee1df3748c9a8ab5acdb3e4a0d97de9 (diff)
Add Storable to CorruptEncodingException when loading from index.
Diffstat (limited to 'src/main/java/com/amazon/carbonado/raw')
-rw-r--r--src/main/java/com/amazon/carbonado/raw/GenericStorableCodec.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/main/java/com/amazon/carbonado/raw/GenericStorableCodec.java b/src/main/java/com/amazon/carbonado/raw/GenericStorableCodec.java
index cac1283..8113b32 100644
--- a/src/main/java/com/amazon/carbonado/raw/GenericStorableCodec.java
+++ b/src/main/java/com/amazon/carbonado/raw/GenericStorableCodec.java
@@ -124,6 +124,7 @@ public class GenericStorableCodec<S extends Storable> implements StorableCodec<S
cf.setTarget("1.5");
// Declare some types.
+ final TypeDesc storableType = TypeDesc.forClass(Storable.class);
final TypeDesc rawSupportType = TypeDesc.forClass(RawSupport.class);
final TypeDesc byteArrayType = TypeDesc.forClass(byte[].class);
final TypeDesc[] byteArrayParam = {byteArrayType};
@@ -285,13 +286,28 @@ public class GenericStorableCodec<S extends Storable> implements StorableCodec<S
haveCodec.setLocation();
b.checkCast(codecType);
b.loadLocal(actualGeneration);
+ Label tryStartDecode = b.createLabel().setLocation();
b.invokeVirtual(codecType, "getDecoder", decoderType, new TypeDesc[] {TypeDesc.INT});
b.loadThis();
b.loadLocal(b.getParameter(0));
b.invokeInterface(decoderType, "decode", null,
- new TypeDesc[] {TypeDesc.forClass(Storable.class), byteArrayType});
+ new TypeDesc[] {storableType, byteArrayType});
+ Label tryEndDecode = b.createLabel().setLocation();
b.returnVoid();
+
+ // If unable to decode, fill out exception.
+ b.exceptionHandler(tryStartDecode, tryEndDecode,
+ CorruptEncodingException.class.getName());
+ TypeDesc exType = TypeDesc.forClass(CorruptEncodingException.class);
+ LocalVariable exVar = b.createLocalVariable(null, TypeDesc.OBJECT);
+ b.storeLocal(exVar);
+ b.loadLocal(exVar);
+ b.loadThis();
+ b.invokeVirtual(exType, "setStorableWithPrimaryKey", null,
+ new TypeDesc[] {storableType});
+ b.loadLocal(exVar);
+ b.throwObject();
}
return ci.defineClass(cf);