1 28 29 package org.jibx.binding.classes; 30 31 import org.apache.bcel.Constants; 32 import org.apache.bcel.generic.*; 33 import org.jibx.runtime.JiBXException; 34 35 43 44 public class MarshalBuilder extends MarshalUnmarshalBuilder 45 { 46 49 private static final String MARSHALCONTEXT_CLASS = 50 "org.jibx.runtime.impl.MarshallingContext"; 51 protected static final String MARSHAL_EXCEPTION_TEXT = 52 "Error while marshalling"; 53 protected static final Type[] MARSHAL_METHOD_ARGS = 54 { 55 new ObjectType("org.jibx.runtime.impl.MarshallingContext") 56 }; 57 58 69 70 public MarshalBuilder(String name, ClassFile cf, ClassFile mf) 71 throws JiBXException { 72 super(name, Type.VOID, 73 (mf == cf) ? MARSHAL_METHOD_ARGS : 74 new Type[] {ClassItem.typeFromName(cf.getName()), 75 MARSHAL_METHOD_ARGS[0]}, 76 mf, (mf == cf) ? Constants.ACC_PUBLIC | Constants.ACC_FINAL : 77 Constants.ACC_PUBLIC | Constants.ACC_STATIC, 0, cf.getName(), 78 1, MARSHALCONTEXT_CLASS); 79 } 80 81 88 89 public InstructionHandle genExceptionHandler() throws JiBXException { 90 91 initStackState(new String [] {"java.lang.Exception"}); 95 InstructionHandle start = 96 internalAppendCreateNew(FRAMEWORK_EXCEPTION_CLASS); 97 appendDUP_X1(); 98 appendSWAP(); 99 appendLoadConstant(MARSHAL_EXCEPTION_TEXT); 100 appendSWAP(); 101 appendCallInit(FRAMEWORK_EXCEPTION_CLASS, 102 EXCEPTION_CONSTRUCTOR_SIGNATURE2); 103 appendThrow(); 104 return start; 105 } 106 } | Popular Tags |