You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2005/01/31 03:09:57 UTC
svn commit: r149201 - in geronimo/trunk/modules/axis-builder/src:
java/org/apache/geronimo/axis/builder/AxisBuilder.java
test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java
Author: djencks
Date: Sun Jan 30 18:09:55 2005
New Revision: 149201
URL: http://svn.apache.org/viewcvs?view=rev&rev=149201
Log:
some progress on type mapping
Modified:
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java
geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java
Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java?view=diff&r1=149200&r2=149201
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java Sun Jan 30 18:09:55 2005
@@ -66,6 +66,10 @@
import org.apache.axis.enum.Style;
import org.apache.axis.enum.Use;
import org.apache.axis.soap.SOAPConstants;
+import org.apache.axis.encoding.ser.BeanSerializerFactory;
+import org.apache.axis.encoding.ser.BeanDeserializerFactory;
+import org.apache.axis.encoding.ser.ArraySerializerFactory;
+import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
import org.apache.geronimo.axis.client.GenericServiceEndpointWrapper;
import org.apache.geronimo.axis.client.NoOverrideCallbackFilter;
import org.apache.geronimo.axis.client.OperationInfo;
@@ -75,6 +79,7 @@
import org.apache.geronimo.axis.client.ServiceImpl;
import org.apache.geronimo.axis.client.ServiceMethodInterceptor;
import org.apache.geronimo.axis.client.ServiceReference;
+import org.apache.geronimo.axis.client.TypeMappingInfo;
import org.apache.geronimo.common.DeploymentException;
import org.apache.geronimo.deployment.DeploymentContext;
import org.apache.geronimo.gbean.GBeanInfo;
@@ -88,6 +93,7 @@
import org.apache.geronimo.xbeans.j2ee.MethodParamPartsMappingType;
import org.apache.geronimo.xbeans.j2ee.ServiceEndpointInterfaceMappingType;
import org.apache.geronimo.xbeans.j2ee.ServiceEndpointMethodMappingType;
+import org.apache.geronimo.xbeans.j2ee.JavaXmlTypeMappingType;
import org.apache.xmlbeans.XmlException;
import org.objectweb.asm.Type;
import org.xml.sax.InputSource;
@@ -304,12 +310,68 @@
OperationInfo operationInfo = buildOperationInfo(method, bindingOperation, portStyle, soapVersion);
operationInfos[i++] = operationInfo;
}
+ JavaXmlTypeMappingType[] javaXmlTypeMappings = mapping.getJavaXmlTypeMappingArray();
List typeMappings = new ArrayList();
+ for (int j = 0; j < javaXmlTypeMappings.length; j++) {
+ JavaXmlTypeMappingType javaXmlTypeMapping = javaXmlTypeMappings[j];
+ //default settings
+ Class serializerFactoryClass = BeanSerializerFactory.class;
+ Class deserializerFactoryClass = BeanDeserializerFactory.class;
+
+ String className = javaXmlTypeMapping.getJavaType().getStringValue().trim();
+
+ //TODO plain primitive types -- although these should not show up I think.
+ if (className.indexOf("[") > -1) {
+ serializerFactoryClass = ArraySerializerFactory.class;
+ deserializerFactoryClass = ArrayDeserializerFactory.class;
+ className = getArrayClassName(className);
+ }
+ Class clazz = null;
+ try {
+ clazz = classloader.loadClass(className);
+ } catch (ClassNotFoundException e) {
+ throw new DeploymentException("could not load class for classname: " + className, e);
+ }
+ TypeMappingInfo typeMappingInfo = null;
+ if (javaXmlTypeMapping.isSetRootTypeQname()) {
+ QName typeName = javaXmlTypeMapping.getRootTypeQname().getQNameValue();
+ typeMappingInfo = new TypeMappingInfo(clazz, typeName, serializerFactoryClass, deserializerFactoryClass);
+ } else if (javaXmlTypeMapping.isSetAnonymousTypeQname()) {
+ String anonTypeQNameString = javaXmlTypeMapping.getAnonymousTypeQname().getStringValue();
+ int pos = anonTypeQNameString.lastIndexOf(":");
+ if (pos == -1) {
+ throw new DeploymentException("anon QName is invalid, no final ':' " + anonTypeQNameString);
+ }
+ //this appears to be ignored...
+ QName typeName = new QName(anonTypeQNameString.substring(0, pos), anonTypeQNameString.substring(pos + 1));
+ typeMappingInfo = new TypeMappingInfo(clazz, typeName, serializerFactoryClass, deserializerFactoryClass);
+ }
+ typeMappings.add(typeMappingInfo);
+
+
+ }
seiFactory = createSEIFactory(enhancedServiceEndpointClass, serviceImpl, typeMappings, location, operationInfos, context, classloader);
}
seiPortNameToFactoryMap.put(portName, seiFactory);
seiClassNameToFactoryMap.put(serviceEndpointInterface.getName(), seiFactory);
}
+ }
+
+ String getArrayClassName(String className) {
+ int pos = className.indexOf("[");
+ String baseType = className.substring(0, pos).trim();
+ StringBuffer buf = new StringBuffer(className.length());
+ buf.append("[");
+ while ((pos = className.indexOf("[", pos + 1)) > -1) {
+ buf.append("[");
+ }
+ if (false) { //is primitive type
+ //TODO arrays of primitive type
+ } else {
+ buf.append("L").append(baseType).append(";");
+ }
+ className = buf.toString();
+ return className;
}
private Class[] getParameterTypes(ServiceEndpointMethodMappingType methodMapping, ClassLoader classloader) throws DeploymentException {
Modified: geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java?view=diff&r1=149200&r2=149201
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java (original)
+++ geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java Sun Jan 30 18:09:55 2005
@@ -111,6 +111,14 @@
recursiveDelete(tmpbasedir);
}
+ public void testGetArrayClassName() throws Exception {
+ AxisBuilder builder = new AxisBuilder();
+ assertEquals("[Ljava.lang.Object;", builder.getArrayClassName("java.lang.Object[]"));
+ assertEquals("[Ljava.lang.Object;", builder.getArrayClassName("java.lang.Object [ ] "));
+ assertEquals("[[Ljava.lang.Object;", builder.getArrayClassName("java.lang.Object [ ] []"));
+
+ }
+
public void testServiceRefCreation() throws Exception {
AxisBuilder builder = new AxisBuilder();