147d431f63a66505a645f282416659a9758a91f1cBrett Chabot/* 247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Copyright 2003-2009 OFFIS, Henri Tremblay 347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Licensed under the Apache License, Version 2.0 (the "License"); 547d431f63a66505a645f282416659a9758a91f1cBrett Chabot * you may not use this file except in compliance with the License. 647d431f63a66505a645f282416659a9758a91f1cBrett Chabot * You may obtain a copy of the License at 747d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 847d431f63a66505a645f282416659a9758a91f1cBrett Chabot * http://www.apache.org/licenses/LICENSE-2.0 947d431f63a66505a645f282416659a9758a91f1cBrett Chabot * 1047d431f63a66505a645f282416659a9758a91f1cBrett Chabot * Unless required by applicable law or agreed to in writing, software 1147d431f63a66505a645f282416659a9758a91f1cBrett Chabot * distributed under the License is distributed on an "AS IS" BASIS, 1247d431f63a66505a645f282416659a9758a91f1cBrett Chabot * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1347d431f63a66505a645f282416659a9758a91f1cBrett Chabot * See the License for the specific language governing permissions and 1447d431f63a66505a645f282416659a9758a91f1cBrett Chabot * limitations under the License. 1547d431f63a66505a645f282416659a9758a91f1cBrett Chabot */ 1647d431f63a66505a645f282416659a9758a91f1cBrett Chabotpackage org.easymock.internal; 1747d431f63a66505a645f282416659a9758a91f1cBrett Chabot 1847d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport java.io.Serializable; 1947d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport java.lang.reflect.Method; 2047d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport java.util.HashMap; 2147d431f63a66505a645f282416659a9758a91f1cBrett Chabotimport java.util.Map; 2247d431f63a66505a645f282416659a9758a91f1cBrett Chabot 2347d431f63a66505a645f282416659a9758a91f1cBrett Chabotpublic class MethodSerializationWrapper implements Serializable { 2447d431f63a66505a645f282416659a9758a91f1cBrett Chabot 2547d431f63a66505a645f282416659a9758a91f1cBrett Chabot private static final long serialVersionUID = 1775475200823842126L; 2647d431f63a66505a645f282416659a9758a91f1cBrett Chabot 2747d431f63a66505a645f282416659a9758a91f1cBrett Chabot private static final Map<String, Class<?>> primitiveTypes = new HashMap<String, Class<?>>( 2847d431f63a66505a645f282416659a9758a91f1cBrett Chabot 10); 2947d431f63a66505a645f282416659a9758a91f1cBrett Chabot 3047d431f63a66505a645f282416659a9758a91f1cBrett Chabot static { 3147d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Boolean.TYPE.getName(), Boolean.TYPE); 3247d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Byte.TYPE.getName(), Byte.TYPE); 3347d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Short.TYPE.getName(), Short.TYPE); 3447d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Character.TYPE.getName(), Character.TYPE); 3547d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Integer.TYPE.getName(), Integer.TYPE); 3647d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Long.TYPE.getName(), Long.TYPE); 3747d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Float.TYPE.getName(), Float.TYPE); 3847d431f63a66505a645f282416659a9758a91f1cBrett Chabot primitiveTypes.put(Double.TYPE.getName(), Double.TYPE); 3947d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 4047d431f63a66505a645f282416659a9758a91f1cBrett Chabot 4147d431f63a66505a645f282416659a9758a91f1cBrett Chabot private String className; 4247d431f63a66505a645f282416659a9758a91f1cBrett Chabot 4347d431f63a66505a645f282416659a9758a91f1cBrett Chabot private String methodName; 4447d431f63a66505a645f282416659a9758a91f1cBrett Chabot 4547d431f63a66505a645f282416659a9758a91f1cBrett Chabot private String[] parameterTypeNames; 4647d431f63a66505a645f282416659a9758a91f1cBrett Chabot 4747d431f63a66505a645f282416659a9758a91f1cBrett Chabot public MethodSerializationWrapper(Method m) { 4847d431f63a66505a645f282416659a9758a91f1cBrett Chabot className = m.getDeclaringClass().getName(); 4947d431f63a66505a645f282416659a9758a91f1cBrett Chabot methodName = m.getName(); 5047d431f63a66505a645f282416659a9758a91f1cBrett Chabot 5147d431f63a66505a645f282416659a9758a91f1cBrett Chabot Class<?>[] parameterTypes = m.getParameterTypes(); 5247d431f63a66505a645f282416659a9758a91f1cBrett Chabot 5347d431f63a66505a645f282416659a9758a91f1cBrett Chabot parameterTypeNames = new String[parameterTypes.length]; 5447d431f63a66505a645f282416659a9758a91f1cBrett Chabot 5547d431f63a66505a645f282416659a9758a91f1cBrett Chabot for (int i = 0; i < parameterTypes.length; i++) { 5647d431f63a66505a645f282416659a9758a91f1cBrett Chabot parameterTypeNames[i] = parameterTypes[i].getName(); 5747d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 5847d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 5947d431f63a66505a645f282416659a9758a91f1cBrett Chabot 6047d431f63a66505a645f282416659a9758a91f1cBrett Chabot public Method getMethod() throws ClassNotFoundException, 6147d431f63a66505a645f282416659a9758a91f1cBrett Chabot NoSuchMethodException { 6247d431f63a66505a645f282416659a9758a91f1cBrett Chabot Class<?> clazz = Class.forName(className, true, Thread.currentThread() 6347d431f63a66505a645f282416659a9758a91f1cBrett Chabot .getContextClassLoader()); 6447d431f63a66505a645f282416659a9758a91f1cBrett Chabot 6547d431f63a66505a645f282416659a9758a91f1cBrett Chabot Class<?>[] parameterTypes = new Class[parameterTypeNames.length]; 6647d431f63a66505a645f282416659a9758a91f1cBrett Chabot 6747d431f63a66505a645f282416659a9758a91f1cBrett Chabot for (int i = 0; i < parameterTypeNames.length; i++) { 6847d431f63a66505a645f282416659a9758a91f1cBrett Chabot Class<?> primitiveType = primitiveTypes.get(parameterTypeNames[i]); 6947d431f63a66505a645f282416659a9758a91f1cBrett Chabot if (primitiveType != null) { 7047d431f63a66505a645f282416659a9758a91f1cBrett Chabot parameterTypes[i] = primitiveType; 7147d431f63a66505a645f282416659a9758a91f1cBrett Chabot } else { 7247d431f63a66505a645f282416659a9758a91f1cBrett Chabot parameterTypes[i] = Class.forName(parameterTypeNames[i], true, 7347d431f63a66505a645f282416659a9758a91f1cBrett Chabot Thread.currentThread().getContextClassLoader()); 7447d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 7547d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 7647d431f63a66505a645f282416659a9758a91f1cBrett Chabot 7747d431f63a66505a645f282416659a9758a91f1cBrett Chabot Method m = clazz.getMethod(methodName, parameterTypes); 7847d431f63a66505a645f282416659a9758a91f1cBrett Chabot 7947d431f63a66505a645f282416659a9758a91f1cBrett Chabot return m; 8047d431f63a66505a645f282416659a9758a91f1cBrett Chabot } 8147d431f63a66505a645f282416659a9758a91f1cBrett Chabot} 82