Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 30453 invoked from network); 31 Jan 2005 02:10:00 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 31 Jan 2005 02:09:59 -0000 Received: (qmail 29139 invoked by uid 500); 31 Jan 2005 02:09:59 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 29122 invoked by uid 500); 31 Jan 2005 02:09:59 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: dev@geronimo.apache.org Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 29108 invoked by uid 99); 31 Jan 2005 02:09:59 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Sun, 30 Jan 2005 18:09:58 -0800 Received: (qmail 30447 invoked by uid 65534); 31 Jan 2005 02:09:57 -0000 Message-ID: <20050131020957.30446.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Mailer: svnmailer-1.0.0-dev Date: Mon, 31 Jan 2005 02:09:57 -0000 Subject: 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 To: scm@geronimo.apache.org From: djencks@apache.org X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Author: djencks Date: Sun Jan 30 18:09:55 2005 New Revision: 149201 URL: http://svn.apache.org/viewcvs?view=3Drev&rev=3D149201 Log: some progress on type mapping Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/b= uilder/AxisBuilder.java geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/b= uilder/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=3Ddiff&r1=3D149= 200&r2=3D149201 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/b= uilder/AxisBuilder.java (original) +++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/b= uilder/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 =3D buildOperationInfo(met= hod, bindingOperation, portStyle, soapVersion); operationInfos[i++] =3D operationInfo; } + JavaXmlTypeMappingType[] javaXmlTypeMappings =3D mapping.g= etJavaXmlTypeMappingArray(); List typeMappings =3D new ArrayList(); + for (int j =3D 0; j < javaXmlTypeMappings.length; j++) { + JavaXmlTypeMappingType javaXmlTypeMapping =3D javaXmlT= ypeMappings[j]; + //default settings + Class serializerFactoryClass =3D BeanSerializerFactory= .class; + Class deserializerFactoryClass =3D BeanDeserializerFac= tory.class; + + String className =3D javaXmlTypeMapping.getJavaType().= getStringValue().trim(); + + //TODO plain primitive types -- although these should = not show up I think. + if (className.indexOf("[") > -1) { + serializerFactoryClass =3D ArraySerializerFactory.= class; + deserializerFactoryClass =3D ArrayDeserializerFact= ory.class; + className =3D getArrayClassName(className); + } + Class clazz =3D null; + try { + clazz =3D classloader.loadClass(className); + } catch (ClassNotFoundException e) { + throw new DeploymentException("could not load clas= s for classname: " + className, e); + } + TypeMappingInfo typeMappingInfo =3D null; + if (javaXmlTypeMapping.isSetRootTypeQname()) { + QName typeName =3D javaXmlTypeMapping.getRootTypeQ= name().getQNameValue(); + typeMappingInfo =3D new TypeMappingInfo(clazz, typ= eName, serializerFactoryClass, deserializerFactoryClass); + } else if (javaXmlTypeMapping.isSetAnonymousTypeQname(= )) { + String anonTypeQNameString =3D javaXmlTypeMapping.= getAnonymousTypeQname().getStringValue(); + int pos =3D anonTypeQNameString.lastIndexOf(":"); + if (pos =3D=3D -1) { + throw new DeploymentException("anon QName is i= nvalid, no final ':' " + anonTypeQNameString); + } + //this appears to be ignored... + QName typeName =3D new QName(anonTypeQNameString.s= ubstring(0, pos), anonTypeQNameString.substring(pos + 1)); + typeMappingInfo =3D new TypeMappingInfo(clazz, typ= eName, serializerFactoryClass, deserializerFactoryClass); + } + typeMappings.add(typeMappingInfo); + + + } seiFactory =3D createSEIFactory(enhancedServiceEndpointCla= ss, serviceImpl, typeMappings, location, operationInfos, context, classload= er); } seiPortNameToFactoryMap.put(portName, seiFactory); seiClassNameToFactoryMap.put(serviceEndpointInterface.getName(= ), seiFactory); } + } + + String getArrayClassName(String className) { + int pos =3D className.indexOf("["); + String baseType =3D className.substring(0, pos).trim(); + StringBuffer buf =3D new StringBuffer(className.length()); + buf.append("["); + while ((pos =3D 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 =3D buf.toString(); + return className; } =20 private Class[] getParameterTypes(ServiceEndpointMethodMappingType met= hodMapping, 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=3Ddiff= &r1=3D149200&r2=3D149201 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/b= uilder/ServiceReferenceTest.java (original) +++ geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/b= uilder/ServiceReferenceTest.java Sun Jan 30 18:09:55 2005 @@ -111,6 +111,14 @@ recursiveDelete(tmpbasedir); } =20 + public void testGetArrayClassName() throws Exception { + AxisBuilder builder =3D new AxisBuilder(); + assertEquals("[Ljava.lang.Object;", builder.getArrayClassName("jav= a=2Elang.Object[]")); + assertEquals("[Ljava.lang.Object;", builder.getArrayClassName("jav= a=2Elang.Object [ ] ")); + assertEquals("[[Ljava.lang.Object;", builder.getArrayClassName("ja= va.lang.Object [ ] []")); + + } + public void testServiceRefCreation() throws Exception { AxisBuilder builder =3D new AxisBuilder(); =20