Author: djencks Date: Thu Feb 3 11:49:13 2005 New Revision: 151214 URL: http://svn.apache.org/viewcvs?view=rev&rev=151214 Log: Fix some problems. Most calls seem to go out now. Use ClassLoading for class loading
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=151213&r2=151214 ============================================================================== --- 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 Thu Feb 3 11:49:13 2005 @@ -96,6 +96,7 @@ import org.apache.geronimo.xbeans.j2ee.ServiceEndpointMethodMappingType; import org.apache.geronimo.xbeans.j2ee.WsdlMessageMappingType; import org.apache.geronimo.xbeans.j2ee.WsdlReturnValueMappingType; +import org.apache.geronimo.kernel.ClassLoading; import org.apache.xmlbeans.XmlException; import org.objectweb.asm.Type; import org.xml.sax.InputSource; @@ -128,36 +129,40 @@ public Object createService(Class serviceInterface, URI wsdlURI, URI jaxrpcMappingURI, QName serviceQName, Map portComponentRefMap, List handlers, DeploymentContext deploymentContext, Module module, ClassLoader classLoader) throws DeploymentException { JarFile moduleFile = module.getModuleFile(); - JarWSDLLocator wsdlLocator = new JarWSDLLocator(moduleFile, wsdlURI); - WSDLFactory wsdlFactory = null; - try { - wsdlFactory = WSDLFactory.newInstance(); - } catch (WSDLException e) { - throw new DeploymentException("Could not create WSDLFactory", e); - } - WSDLReader wsdlReader = wsdlFactory.newWSDLReader(); Definition definition = null; - try { - definition = wsdlReader.readWSDL(wsdlLocator); - } catch (WSDLException e) { - throw new DeploymentException("Failed to read wsdl document", e); - } + JavaWsdlMappingType mapping = null; + if (wsdlURI != null) { + JarWSDLLocator wsdlLocator = new JarWSDLLocator(moduleFile, wsdlURI); + WSDLFactory wsdlFactory = null; + try { + wsdlFactory = WSDLFactory.newInstance(); + } catch (WSDLException e) { + throw new DeploymentException("Could not create WSDLFactory", e); + } + WSDLReader wsdlReader = wsdlFactory.newWSDLReader(); + definition = null; + try { + definition = wsdlReader.readWSDL(wsdlLocator); + } catch (WSDLException e) { + throw new DeploymentException("Failed to read wsdl document", e); + } - InputStream jaxrpcInputStream = null; - try { - jaxrpcInputStream = moduleFile.getInputStream(moduleFile.getEntry(jaxrpcMappingURI.toString())); - } catch (IOException e) { - throw new DeploymentException("Could not open stream to jaxrpc mapping document", e); - } - JavaWsdlMappingDocument mappingDocument = null; - try { - mappingDocument = JavaWsdlMappingDocument.Factory.parse(jaxrpcInputStream); - } catch (XmlException e) { - throw new DeploymentException("Could not parse jaxrpc mapping document", e); - } catch (IOException e) { - throw new DeploymentException("Could not read jaxrpc mapping document", e); + InputStream jaxrpcInputStream = null; + try { + jaxrpcInputStream = moduleFile.getInputStream(moduleFile.getEntry(jaxrpcMappingURI.toString())); + } catch (IOException e) { + throw new DeploymentException("Could not open stream to jaxrpc mapping document", e); + } + JavaWsdlMappingDocument mappingDocument = null; + try { + mappingDocument = JavaWsdlMappingDocument.Factory.parse(jaxrpcInputStream); + } catch (XmlException e) { + throw new DeploymentException("Could not parse jaxrpc mapping document", e); + } catch (IOException e) { + throw new DeploymentException("Could not read jaxrpc mapping document", e); + } + mapping = mappingDocument.getJavaWsdlMapping(); } - JavaWsdlMappingType mapping = mappingDocument.getJavaWsdlMapping(); Object service = createService(serviceInterface, definition, mapping, serviceQName, SOAP_VERSION, deploymentContext, module, classLoader); ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -178,7 +183,9 @@ Map seiPortNameToFactoryMap = new HashMap(); Map seiClassNameToFactoryMap = new HashMap(); Object serviceInstance = createService(serviceInterface, seiPortNameToFactoryMap, seiClassNameToFactoryMap, context, module, classloader); - buildSEIFactoryMap(serviceInterface, definition, mapping, serviceQName, soapVersion, seiPortNameToFactoryMap, seiClassNameToFactoryMap, serviceInstance, context, module, classloader); + if (definition != null) { + buildSEIFactoryMap(serviceInterface, definition, mapping, serviceQName, soapVersion, seiPortNameToFactoryMap, seiClassNameToFactoryMap, serviceInstance, context, module, classloader); + } return serviceInstance; } @@ -308,7 +315,12 @@ String className = javaXmlTypeMapping.getJavaType().getStringValue().trim(); - Class clazz = convertJavaTypeName(className, classLoader); + Class clazz = null; + try { + clazz = ClassLoading.loadClass(className, classLoader); + } catch (ClassNotFoundException e) { + throw new DeploymentException("Could not load java type", e); + } if (clazz.isArray()) { serializerFactoryClass = ArraySerializerFactory.class; deserializerFactoryClass = ArrayDeserializerFactory.class; @@ -339,79 +351,6 @@ } } - Class convertJavaTypeName(String className, ClassLoader classLoader) throws DeploymentException { - int pos = className.indexOf("["); - if (pos > -1) { - 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 (baseType.equals("int")) { - buf.append("I"); - } else if (baseType.equals("boolean")) { - buf.append("Z"); - } else if (baseType.equals("byte")) { - buf.append("B"); - } else if (baseType.equals("char")) { - buf.append("C"); - } else if (baseType.equals("short")) { - buf.append("S"); - } else if (baseType.equals("double")) { - buf.append("D"); - } else if (baseType.equals("float")) { - buf.append("F"); - } else if (baseType.equals("long")) { - buf.append("J"); - } else { - buf.append("L").append(baseType).append(";"); - } - className = buf.toString(); - } else { - if (className.equals("int")) { - return int.class; - } else if (className.equals("boolean")) { - return boolean.class; - } else if (className.equals("byte")) { - return byte.class; - } else if (className.equals("char")) { - return char.class; - } else if (className.equals("short")) { - return short.class; - } else if (className.equals("double")) { - return double.class; - } else if (className.equals("float")) { - return float.class; - } else if (className.equals("long")) { - return long.class; - } else if (className.equals("void")) { - return void.class; - } - } - try { - return classLoader.loadClass(className); - } catch (ClassNotFoundException e) { - throw new DeploymentException("Could not load class ", e); - } - } - -// private Class[] getParameterTypes(ServiceEndpointMethodMappingType methodMapping, ClassLoader classloader) throws DeploymentException { -// MethodParamPartsMappingType[] paramMappings = methodMapping.getMethodParamPartsMappingArray(); -// Class[] types = new Class[paramMappings.length]; -// for (int i = 0; i < paramMappings.length; i++) { -// MethodParamPartsMappingType paramMapping = paramMappings[i]; -// String paramType = paramMapping.getParamType().getStringValue().trim(); -// try { -// types[i] = classloader.loadClass(paramType); -// } catch (ClassNotFoundException e) { -// throw new DeploymentException("Could not load param type", e); -// } -// } -// return types; -// } - private ServiceEndpointMethodMappingType getMethodMappingForOperation(Operation operation, ServiceEndpointMethodMappingType[] methodMappings) throws DeploymentException { String operationName = operation.getName(); for (int i = 0; i < methodMappings.length; i++) { @@ -640,6 +579,8 @@ Message inputMessage = operation.getInput().getMessage(); + boolean isWrappedElement = methodMapping.isSetWrappedElement(); + MethodParamPartsMappingType[] paramMappings = methodMapping.getMethodParamPartsMappingArray(); Type[] parameterASMTypes = new Type[paramMappings.length]; ParameterDesc[] parameterDescriptions = new ParameterDesc[paramMappings.length]; @@ -647,7 +588,12 @@ MethodParamPartsMappingType paramMapping = paramMappings[i]; int position = paramMapping.getParamPosition().getBigIntegerValue().intValue(); String paramJavaTypeName = paramMapping.getParamType().getStringValue().trim(); - Class paramJavaType = convertJavaTypeName(paramJavaTypeName, classLoader); + Class paramJavaType = null; + try { + paramJavaType = ClassLoading.loadClass(paramJavaTypeName, classLoader); + } catch (ClassNotFoundException e) { + throw new DeploymentException("could not load parameter type", e); + } WsdlMessageMappingType wsdlMessageMappingType = paramMapping.getWsdlMessageMapping(); String parameterMode = wsdlMessageMappingType.getParameterMode().getStringValue().trim(); @@ -666,7 +612,8 @@ // Message inputMessage = definition.getMessage(wsdlMessageQName); Part part = inputMessage.getPart(wsdlMessagePartName); //TODO this makes little sense but may be correct, see comments in axis Parameter class - QName partQName = part.getElementName(); + //the part name qname is really odd. + QName partQName = isWrappedElement? part.getElementName(): new QName("", part.getName()); QName partTypeQName = part.getTypeName(); ParameterDesc parameterDesc = new ParameterDesc(partQName, mode, partTypeQName, paramJavaType, inHeader, outHeader); @@ -684,7 +631,11 @@ if (methodMapping.isSetWsdlReturnValueMapping()) { WsdlReturnValueMappingType wsdlReturnValueMapping = methodMapping.getWsdlReturnValueMapping(); String returnClassName = wsdlReturnValueMapping.getMethodReturnValue().getStringValue().trim(); - returnClass = convertJavaTypeName(returnClassName, classLoader); + try { + returnClass = ClassLoading.loadClass(returnClassName, classLoader); + } catch (ClassNotFoundException e) { + throw new DeploymentException("Could not load return type", e); + } QName wsdlMessageQName = wsdlReturnValueMapping.getWsdlMessage().getQNameValue(); 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=151213&r2=151214 ============================================================================== --- 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 Thu Feb 3 11:49:13 2005 @@ -111,35 +111,6 @@ recursiveDelete(tmpbasedir); } - public void testGetArrayClassName() throws Exception { - AxisBuilder builder = new AxisBuilder(); - ClassLoader classLoader = this.getClass().getClassLoader(); - assertEquals(Object[].class, builder.convertJavaTypeName("java.lang.Object[]", classLoader)); - assertEquals(Object[].class, builder.convertJavaTypeName("java.lang.Object [ ] ", classLoader)); - assertEquals(Object[][].class, builder.convertJavaTypeName("java.lang.Object [ ] []", classLoader)); - - assertEquals(boolean[][].class, builder.convertJavaTypeName("boolean [ ] []", classLoader)); - assertEquals(byte[][].class, builder.convertJavaTypeName("byte [ ] []", classLoader)); - assertEquals(char[][].class, builder.convertJavaTypeName("char [ ] []", classLoader)); - assertEquals(double[][].class, builder.convertJavaTypeName("double [ ] []", classLoader)); - assertEquals(float[][].class, builder.convertJavaTypeName("float [ ] []", classLoader)); - assertEquals(int[][].class, builder.convertJavaTypeName("int [ ] []", classLoader)); - assertEquals(long[][].class, builder.convertJavaTypeName("long [ ] []", classLoader)); - assertEquals(short[][].class, builder.convertJavaTypeName("short [ ] []", classLoader)); - - assertEquals(boolean.class, builder.convertJavaTypeName("boolean", classLoader)); - assertEquals(byte.class, builder.convertJavaTypeName("byte", classLoader)); - assertEquals(char.class, builder.convertJavaTypeName("char", classLoader)); - assertEquals(double.class, builder.convertJavaTypeName("double", classLoader)); - assertEquals(float.class, builder.convertJavaTypeName("float", classLoader)); - assertEquals(int.class, builder.convertJavaTypeName("int", classLoader)); - assertEquals(long.class, builder.convertJavaTypeName("long", classLoader)); - assertEquals(short.class, builder.convertJavaTypeName("short", classLoader)); - assertEquals(void.class, builder.convertJavaTypeName("void", classLoader)); - - - } - public void testServiceRefCreation() throws Exception { AxisBuilder builder = new AxisBuilder();