Source code: org/hibernate/bytecode/javassist/AccessOptimizerAdapter.java
1 package org.hibernate.bytecode.javassist;
2
3 import org.hibernate.bytecode.ReflectionOptimizer;
4 import org.hibernate.PropertyAccessException;
5
6 import java.io.Serializable;
7
8 /**
9 * The {@link ReflectionOptimizer.AccessOptimizer} implementation for Javassist
10 * which simply acts as an adpater to the {@link BulkAccessor} class.
11 *
12 * @author Steve Ebersole
13 */
14 public class AccessOptimizerAdapter implements ReflectionOptimizer.AccessOptimizer, Serializable {
15
16 public static final String PROPERTY_GET_EXCEPTION =
17 "exception getting property value with Javassist (set hibernate.bytecode.use_reflection_optimizer=false for more info)";
18
19 public static final String PROPERTY_SET_EXCEPTION =
20 "exception setting property value with Javassist (set hibernate.bytecode.use_reflection_optimizer=false for more info)";
21
22 private final BulkAccessor bulkAccessor;
23 private final Class mappedClass;
24
25 public AccessOptimizerAdapter(BulkAccessor bulkAccessor, Class mappedClass) {
26 this.bulkAccessor = bulkAccessor;
27 this.mappedClass = mappedClass;
28 }
29
30 public String[] getPropertyNames() {
31 return bulkAccessor.getGetters();
32 }
33
34 public Object[] getPropertyValues(Object object) {
35 try {
36 return bulkAccessor.getPropertyValues( object );
37 }
38 catch ( Throwable t ) {
39 throw new PropertyAccessException(
40 t,
41 PROPERTY_GET_EXCEPTION,
42 false,
43 mappedClass,
44 getterName( t, bulkAccessor )
45 );
46 }
47 }
48
49 public void setPropertyValues(Object object, Object[] values) {
50 try {
51 bulkAccessor.setPropertyValues( object, values );
52 }
53 catch ( Throwable t ) {
54 throw new PropertyAccessException(
55 t,
56 PROPERTY_SET_EXCEPTION,
57 true,
58 mappedClass,
59 setterName( t, bulkAccessor )
60 );
61 }
62 }
63
64 private static String setterName(Throwable t, BulkAccessor accessor) {
65 if (t instanceof BulkAccessorException ) {
66 return accessor.getSetters()[ ( (BulkAccessorException) t ).getIndex() ];
67 }
68 else {
69 return "?";
70 }
71 }
72
73 private static String getterName(Throwable t, BulkAccessor accessor) {
74 if (t instanceof BulkAccessorException ) {
75 return accessor.getGetters()[ ( (BulkAccessorException) t ).getIndex() ];
76 }
77 else {
78 return "?";
79 }
80 }
81 }