openamf/src/java/org/openamf/invoker WebServiceInvoker.java,1.11,1.12 JavaServiceInvoker.java,1.11,1.12
[email protected] Fri, 02 May 2003 08:41:25 -0700
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