Clover coverage report - CRISPY - 1.1.1
Coverage timestamp: Mi Nov 15 2006 13:09:46 CET
file stats: LOC: 159   Methods: 5
NCLOC: 115   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
JaxRpcExecutor.java 100% 100% 100% 100%
coverage
 1    package net.sf.crispy.impl;
 2   
 3    import java.lang.reflect.Method;
 4    import java.math.BigDecimal;
 5    import java.util.Date;
 6    import java.util.Hashtable;
 7    import java.util.Iterator;
 8    import java.util.Map;
 9   
 10    import javax.xml.namespace.QName;
 11    import javax.xml.rpc.Call;
 12    import javax.xml.rpc.ParameterMode;
 13    import javax.xml.rpc.Service;
 14    import javax.xml.rpc.ServiceFactory;
 15    import javax.xml.rpc.encoding.TypeMapping;
 16    import javax.xml.rpc.encoding.XMLType;
 17   
 18    import net.sf.crispy.Executor;
 19    import net.sf.crispy.InvocationStrategy;
 20    import net.sf.crispy.Property;
 21    import net.sf.crispy.impl.jaxrpc.TypeMappingFactory;
 22    import net.sf.crispy.strategy.UrlPlusClassNameInvocationStrategy;
 23    import net.sf.crispy.util.Util;
 24   
 25    /**
 26    * Executor for the JAX-RPC standard (Web-Services).
 27    *
 28    * @author Linke
 29    *
 30    */
 31    public class JaxRpcExecutor extends Executor {
 32   
 33    public static final String DEFAULT_SERVICE_FACTORY = "org.apache.axis.client.ServiceFactory";
 34    public final static String DEFAULT_URL_AND_PORT = "http://localhost:9080/axis/services";
 35   
 36    private String serviceFactory = DEFAULT_SERVICE_FACTORY;
 37    private Service service = null;
 38    private Call call = null;
 39    // private InvocationStrategy invocationMapping = null;
 40   
 41    private static Map paramMapper = intParamMap();
 42   
 43   
 44  2 public synchronized static Map intParamMap () {
 45    // if (paramMapper == null) {
 46  2 paramMapper = new Hashtable();
 47   
 48  2 paramMapper.put(Boolean.class, XMLType.XSD_BOOLEAN);
 49  2 paramMapper.put(Byte.class, XMLType.XSD_BYTE);
 50  2 paramMapper.put(Short.class, XMLType.XSD_SHORT);
 51  2 paramMapper.put(Integer.class, XMLType.XSD_INTEGER);
 52  2 paramMapper.put(Long.class, XMLType.XSD_LONG);
 53  2 paramMapper.put(Float.class, XMLType.XSD_FLOAT);
 54  2 paramMapper.put(Double.class, XMLType.XSD_DOUBLE);
 55  2 paramMapper.put(BigDecimal.class, XMLType.XSD_DECIMAL);
 56  2 paramMapper.put(Date.class, XMLType.XSD_DATETIME);
 57  2 paramMapper.put(String.class, XMLType.XSD_STRING);
 58  2 paramMapper.put(Character.class, XMLType.XSD_STRING);
 59   
 60    // --- primitive Datentypen ---
 61  2 paramMapper.put(boolean.class, XMLType.XSD_BOOLEAN);
 62  2 paramMapper.put(byte.class, XMLType.XSD_BYTE);
 63  2 paramMapper.put(short.class, XMLType.XSD_SHORT);
 64  2 paramMapper.put(int.class, XMLType.XSD_INT);
 65  2 paramMapper.put(long.class, XMLType.XSD_LONG);
 66  2 paramMapper.put(float.class, XMLType.XSD_FLOAT);
 67  2 paramMapper.put(double.class, XMLType.XSD_DOUBLE);
 68  2 paramMapper.put(char.class, XMLType.XSD_STRING);
 69    // }
 70  2 return paramMapper;
 71    }
 72   
 73  100 public String getDefaultUrlAndPort() { return DEFAULT_URL_AND_PORT; }
 74  62 public InvocationStrategy getDefaultInvocationStrategy() { return new UrlPlusClassNameInvocationStrategy(); }
 75   
 76  143 public static QName getXMLTypeByClass (Class pvClass) {
 77  143 QName lvRetQName = (QName) paramMapper.get(pvClass);
 78  143 if (lvRetQName == null) {
 79  10 lvRetQName = Util.createQNameByClass(pvClass);
 80  10 paramMapper.put(pvClass, lvRetQName);
 81    }
 82  143 return lvRetQName;
 83    }
 84   
 85  61 public Object execute(Class pvProxyClass, Object pvProxy, Method pvMethod, Object[] pvArgs) throws Exception {
 86  61 if (service == null) {
 87  45 serviceFactory = getProperties().getProperty(ServiceFactory.SERVICEFACTORY_PROPERTY, DEFAULT_SERVICE_FACTORY);
 88  45 System.setProperty (ServiceFactory.SERVICEFACTORY_PROPERTY, serviceFactory);
 89  45 service = (Service) ServiceFactory.newInstance().createService(null);
 90   
 91   
 92    // --- register Serializer and Deserializer ---
 93  45 TypeMapping lvTypeMapping = service.getTypeMappingRegistry().getDefaultTypeMapping();
 94   
 95  45 Map lvSorterMap = Util.getAllPropertiesByPrefixAndSort(getProperties(), TypeMappingFactory.PROPERTY_TYPE_MAPPING_FACTORY);
 96  45 Iterator it = lvSorterMap.values().iterator();
 97  45 while (it.hasNext()) {
 98  40 String lvValue = (String) it.next();
 99  40 String lvValues[] = lvValue.split(",");
 100  40 Class lvTypeMappingFactoryClass = Class.forName(lvValues[0]);
 101  40 TypeMappingFactory lvMappingFactory = (TypeMappingFactory) lvTypeMappingFactoryClass.newInstance();
 102  40 lvMappingFactory.setParameter(lvValues);
 103   
 104  40 if (lvTypeMapping.isRegistered(lvMappingFactory.getJavaType(), lvMappingFactory.getXmlType()) == false) {
 105  12 lvTypeMapping.register( lvMappingFactory.getJavaType(),
 106    lvMappingFactory.getXmlType(),
 107    lvMappingFactory.getSerializerFactory(),
 108    lvMappingFactory.getDeserializerFactory());
 109   
 110    // paramMapper.put(lvMappingFactory.getJavaType(),lvMappingFactory.getXmlType());
 111    }
 112   
 113    }
 114   
 115  45 call = service.createCall();
 116   
 117  45 String lvUser = getProperties().getProperty(Property.SECURITY_USER);
 118  45 String lvPassWd = getProperties().getProperty(Property.SECURITY_PASSWD);
 119  45 if ((lvUser != null) && (lvPassWd != null)) {
 120  1 call.setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, lvUser);
 121  1 call.setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, lvPassWd);
 122    }
 123   
 124  45 String lvUrl = getInvocationStrategy().toString();
 125    if (log.isDebugEnabled()) { log.debug("Invoke with URL: " + lvUrl); }
 126    // System.out.println("URL: " + lvUrl);
 127  45 call.setTargetEndpointAddress(lvUrl);
 128    }
 129   
 130  61 call.removeAllParameters();
 131  61 call.setOperationName(new QName(pvMethod.getName()));
 132   
 133    // if (pvMethod != null && pvMethod.getParameterTypes() != null) {
 134  61 for (int i = 0; i < pvMethod.getParameterTypes().length; i++) {
 135  81 Class lvArgClass = pvMethod.getParameterTypes()[i];
 136  81 if (lvArgClass.equals(Object.class)) {
 137  3 lvArgClass = pvArgs[i].getClass();
 138    }
 139  81 QName lvParamXmlType = getXMLTypeByClass(lvArgClass);
 140  81 call.addParameter("arg" + i, lvParamXmlType, lvArgClass, ParameterMode.IN);
 141    }
 142    // }
 143   
 144  61 Class lvReturnType = pvMethod.getReturnType();
 145  61 QName lvXmlReturnType = getXMLTypeByClass(lvReturnType);
 146  61 call.setReturnType(lvXmlReturnType);
 147   
 148  61 Object result = null;
 149  61 try {
 150  61 result = call.invoke(pvArgs);
 151    } catch (Exception e) {
 152  3 Throwable lvThrowable = Util.findDeepestThrowable(e);
 153  3 throw (Exception) lvThrowable;
 154    }
 155   
 156  58 return result;
 157    }
 158   
 159    }