openamf/src/java/org/openamf/invoker WebServiceInvoker.java,1.11,1.12 JavaServiceInvoker.java,1.11,1.12

[email protected]
Newsgroups gmane.comp.java.openamf.cvs
Message-ID <[email protected]>
Update of /cvsroot/openamf/openamf/src/java/org/openamf/invoker
In directory sc8-pr-cvs1:/tmp/cvs-serv25217/src/java/org/openamf/invoker

Modified Files:
	WebServiceInvoker.java JavaServiceInvoker.java 
Log Message:
1) killed convertHashMapToBean
2) got WebServiceInvoker to use 
    JavaServiceInvoker's invokeServiceMethod
    and ASTranslator
3) fixed bug in and added mor checking to 
    invokeServiceMethodAdvanced

Index: WebServiceInvoker.java
===================================================================
RCS file: /cvsroot/openamf/openamf/src/java/org/openamf/invoker/WebServiceInvoker.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** WebServiceInvoker.java	2 May 2003 06:28:50 -0000	1.11
--- WebServiceInvoker.java	2 May 2003 15:41:21 -0000	1.12
***************
*** 2,6 ****
  
  import java.beans.IntrospectionException;
- import java.beans.PropertyDescriptor;
  import java.io.File;
  import java.lang.reflect.Constructor;
--- 2,5 ----
***************
*** 8,24 ****
  import java.lang.reflect.Method;
  import java.net.MalformedURLException;
- import java.util.HashMap;
  import java.util.List;
  
  import org.apache.axis.client.Service;
- import org.apache.commons.beanutils.PropertyUtils;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.ProjectHelper;
- import org.openamf.ASObject;
  import org.openamf.ServiceRequest;
  
! public class WebServiceInvoker extends ServiceInvoker {
  
  	private static Log log = LogFactory.getLog(WebServiceInvoker.class);
--- 7,20 ----
  import java.lang.reflect.Method;
  import java.net.MalformedURLException;
  import java.util.List;
  
  import org.apache.axis.client.Service;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.ProjectHelper;
  import org.openamf.ServiceRequest;
  
! public class WebServiceInvoker extends JavaServiceInvoker {
  
  	private static Log log = LogFactory.getLog(WebServiceInvoker.class);
***************
*** 65,76 ****
  			String endpoint = getEndPoint(locatorClass);
  
- 			Method requestedMethod =
- 				getRequestedMethod(requestedMethodName, bindingClass);
- 
  			result =
  				invokeMethod(
  					bindingClass,
  					endpoint,
! 					requestedMethod,
  					request.getParameters());
  
--- 61,69 ----
  			String endpoint = getEndPoint(locatorClass);
  
  			result =
  				invokeMethod(
  					bindingClass,
  					endpoint,
! 					requestedMethodName,
  					request.getParameters());
  
***************
*** 179,205 ****
  	}
  
- 	private Method getRequestedMethod(
- 		String requestedMethodName,
- 		Class bindingClass) {
- 			
- 		Method methods[] = bindingClass.getMethods();
- 		Method requestedMethod = null;
- 		String methodName = null;
- 		
- 		//TODO add more checking, what method is overloaded
- 		for (int i = 0; i < methods.length; ++i) {
- 			methodName = methods[i].getName();
- 			if (methodName.equalsIgnoreCase(requestedMethodName)) {
- 				log.debug("...got " + requestedMethodName);
- 				requestedMethod = methods[i];
- 			}
- 		}
- 		return requestedMethod;
- 	}
- 
  	private Object invokeMethod(
  		Class bindingClass,
  		String endpoint,
! 		Method requestedMethod,
  		List parms)
  		throws
--- 172,179 ----
  	}
  
  	private Object invokeMethod(
  		Class bindingClass,
  		String endpoint,
! 		String requestedMethodName,
  		List parms)
  		throws
***************
*** 211,226 ****
  			MalformedURLException {
  
- 		
- 		Class[] paramTypes = requestedMethod.getParameterTypes();
- 		for (int i = 0; i < paramTypes.length; i++) {
- 			Class paramType = paramTypes[i];
- 			Object param = parms.get(i);
- 			if (param instanceof ASObject) {
- 				//TODO call ASTranslator when they start using the ContextClassLoader
- 				param = convertHashMapToBean((HashMap) param, paramType);
- 				parms.set(i, param);
- 			}
- 		}
- 
  		Class[] argTypes =
  			new Class[] { java.net.URL.class, javax.xml.rpc.Service.class };
--- 185,188 ----
***************
*** 232,287 ****
  		Object stubObj = stubConstructor.newInstance(args);
  
! 		return requestedMethod.invoke(stubObj, parms.toArray());
! 	}
! 
! 	private Object convertHashMapToBean(HashMap data, Class beanClass)
! 		throws
! 			InstantiationException,
! 			IntrospectionException,
! 			IllegalArgumentException,
! 			IllegalAccessException,
! 			InvocationTargetException {
! 
! 		Object bean = beanClass.newInstance();
! 
! 		PropertyDescriptor[] properties =
! 			PropertyUtils.getPropertyDescriptors(beanClass);
! 		for (int i = 0; i < properties.length; i++) {
! 			if (!properties[i].getName().equals("class")) {
! 				String propertyName = properties[i].getName();
! 				log.debug("propertyName: " + propertyName);
! 				Method writeMethod = properties[i].getWriteMethod();
! 				log.debug("writeMethod: " + writeMethod);
! 				if (writeMethod != null) {
! 					Class[] parameterTypes = writeMethod.getParameterTypes();
! 					if (parameterTypes.length == 1) {
! 						Object value = data.get(propertyName);
! 						log.debug(
! 							"propertyName = "
! 								+ propertyName
! 								+ ", value = "
! 								+ value);
! 						Class parameterType = parameterTypes[0];
! 						if (!parameterType.isInstance(value)) {
! 							//try to convert types
! 							log.debug("types don't match, try to convert");
! 							log.debug("parameterType = " + parameterType);
! 							if (parameterType.equals(Integer.TYPE)
! 								&& value instanceof Double) {
! 								log.debug("Converting Double to Integer");
! 								value =
! 									new Integer(((Double) value).intValue());
! 							}
! 						}
! 						writeMethod.invoke(bean, new Object[] { value });
! 					} else {
! 						throw new IllegalArgumentException("write method has more than one parameter");
! 					}
! 				}
! 
! 			}
! 		}
! 
! 		return bean;
  	}
  
--- 194,202 ----
  		Object stubObj = stubConstructor.newInstance(args);
  
! 		return invokeServiceMethod(
! 			stubObj,
! 			bindingClass,
! 			requestedMethodName,
! 			parms);
  	}
  

Index: JavaServiceInvoker.java
===================================================================
RCS file: /cvsroot/openamf/openamf/src/java/org/openamf/invoker/JavaServiceInvoker.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** JavaServiceInvoker.java	1 May 2003 21:45:46 -0000	1.11
--- JavaServiceInvoker.java	2 May 2003 15:41:21 -0000	1.12
***************
*** 133,137 ****
  			Method method = methods[i];
  
! 			if (method.getName().equals(methodName)
  				&& method.getParameterTypes().length == parameters.size()) {
  				serviceMethod = method;
--- 133,137 ----
  			Method method = methods[i];
  
! 			if (method.getName().equalsIgnoreCase(methodName)
  				&& method.getParameterTypes().length == parameters.size()) {
  				serviceMethod = method;
***************
*** 153,158 ****
--- 153,161 ----
  				if (!parameterType.isInstance(parameter)) {
  					log.debug("types don't match");
+ 					boolean setType = false;
  					if (parameter instanceof ASObject
  						&& ((ASObject) parameter).getType() == null) {
+ 							
+ 						setType = true;
  						((ASObject) parameter).setType(parameterType.getName());
  					}
***************
*** 161,168 ****
  	
  					Object value = decoder.decodeObject(parameter, parameterType);
  					parameters.set(i, value);
  				}
  			}
! 			serviceMethod.invoke(service, parameters.toArray());
  		}
  
--- 164,176 ----
  	
  					Object value = decoder.decodeObject(parameter, parameterType);
+ 					
+ 					if (!setType && value == null && parameter instanceof ASObject) {
+ 						((ASObject) parameter).setType(parameterType.getName());
+ 						value = decoder.decodeObject(parameter, parameterType);
+ 					}
  					parameters.set(i, value);
  				}
  			}
! 			serviceResult = serviceMethod.invoke(service, parameters.toArray());
  		}
  




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.