Author: djencks
Date: Mon Apr  4 10:53:58 2005
New Revision: 160071

URL: http://svn.apache.org/viewcvs?view=rev&rev=160071
Log:
fix a few bugs, mostly regarding confusing elements and their type

Added:
    geronimo/trunk/modules/axis-builder/src/test-resources/schema/schema4.xsd
Modified:
    
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java
    
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
    
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java
    
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
    
geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ParsingTest.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=160070&r2=160071
==============================================================================
--- 
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
 Mon Apr  4 10:53:58 2005
@@ -235,6 +235,7 @@
         Map exceptionMap = WSDescriptorParser.getExceptionMap(mapping);
         Map schemaTypeKeyToSchemaTypeMap = 
WSDescriptorParser.buildSchemaTypeKeyToSchemaTypeMap(definition);
         Map complexTypeMap = 
WSDescriptorParser.getComplexTypesInWsdl(schemaTypeKeyToSchemaTypeMap);
+        Map elementMap = 
WSDescriptorParser.getElementToTypeMap(schemaTypeKeyToSchemaTypeMap);
 
         Map wsdlPortMap = service.getPorts();
         for (Iterator iterator = wsdlPortMap.entrySet().iterator(); 
iterator.hasNext();) {
@@ -260,7 +261,7 @@
             if (endpointMappings.length == 0) {
                 doLightweightMapping(service.getQName(), portType, mapping, 
classLoader, context, module, operations, binding, portStyle, soapVersion, 
operationInfos, schemaTypeKeyToSchemaTypeMap, portName, serviceImpl, location, 
handlerInfos, seiPortNameToFactoryMap, seiClassNameToFactoryMap, 
credentialsName);
             } else {
-                doHeavyweightMapping(service.getQName(), portType, 
endpointMappings, classLoader, context, module, operations, binding, portStyle, 
soapVersion, exceptionMap, complexTypeMap, mapping, operationInfos, 
schemaTypeKeyToSchemaTypeMap, portName, serviceImpl, location, handlerInfos, 
seiPortNameToFactoryMap, seiClassNameToFactoryMap, credentialsName);
+                doHeavyweightMapping(service.getQName(), portType, 
endpointMappings, classLoader, context, module, operations, binding, portStyle, 
soapVersion, exceptionMap, complexTypeMap, elementMap, mapping, operationInfos, 
schemaTypeKeyToSchemaTypeMap, portName, serviceImpl, location, handlerInfos, 
seiPortNameToFactoryMap, seiClassNameToFactoryMap, credentialsName);
             }
         }
     }
@@ -302,7 +303,7 @@
         return location;
     }
 
-    private void doHeavyweightMapping(QName serviceName, PortType portType, 
ServiceEndpointInterfaceMappingType[] endpointMappings, ClassLoader 
classLoader, DeploymentContext context, Module module, List operations, Binding 
binding, Style portStyle, SOAPConstants soapVersion, Map exceptionMap, Map 
complexTypeMap, JavaWsdlMappingType mapping, OperationInfo[] operationInfos, 
Map schemaTypeKeyToSchemaTypeMap, String portName, Object serviceImpl, URL 
location, List handlerInfos, Map seiPortNameToFactoryMap, Map 
seiClassNameToFactoryMap, String credentialsName) throws DeploymentException {
+    private void doHeavyweightMapping(QName serviceName, PortType portType, 
ServiceEndpointInterfaceMappingType[] endpointMappings, ClassLoader 
classLoader, DeploymentContext context, Module module, List operations, Binding 
binding, Style portStyle, SOAPConstants soapVersion, Map exceptionMap, Map 
complexTypeMap, Map elementMap, JavaWsdlMappingType mapping, OperationInfo[] 
operationInfos, Map schemaTypeKeyToSchemaTypeMap, String portName, Object 
serviceImpl, URL location, List handlerInfos, Map seiPortNameToFactoryMap, Map 
seiClassNameToFactoryMap, String credentialsName) throws DeploymentException {
         Class serviceEndpointInterface;
         SEIFactory seiFactory;
         //complete jaxrpc mapping file supplied
@@ -321,9 +322,23 @@
         for (Iterator ops = operations.iterator(); ops.hasNext();) {
             Operation operation = (Operation) ops.next();
             String operationName = operation.getName();
-            BindingOperation bindingOperation = 
binding.getBindingOperation(operationName, operation.getInput().getName(), 
operation.getOutput() == null ? null : operation.getOutput().getName());
+            //the obvious method seems to be buggy
+//            BindingOperation bindingOperation = 
binding.getBindingOperation(operationName, operation.getInput().getName(), 
operation.getOutput() == null ? null : operation.getOutput().getName());
+            BindingOperation bindingOperation = null;
+            List bops = binding.getBindingOperations();
+            for (Iterator iterator = bops.iterator(); iterator.hasNext();) {
+                BindingOperation bindingOperation1 = (BindingOperation) 
iterator.next();
+                if (bindingOperation1.getOperation().equals(operation)) {
+                    bindingOperation = bindingOperation1;
+                    break;
+                }
+            }
+            if (bindingOperation == null) {
+                throw new DeploymentException("No BindingOperation for 
operation: " + operationName + ", input: " + operation.getInput().getName() + 
", output: " + (operation.getOutput() == null ? "<none>" : 
operation.getOutput().getName()));
+            }
             ServiceEndpointMethodMappingType methodMapping = 
WSDescriptorParser.getMethodMappingForOperation(operationName, methodMappings);
-            OperationInfo operationInfo = 
buildOperationInfoHeavyweight(methodMapping, bindingOperation, portStyle, 
soapVersion, exceptionMap, complexTypeMap, mapping, classLoader, 
enhancedServiceEndpointClass);
+            HeavyweightOperationDescBuilder operationDescBuilder = new 
HeavyweightOperationDescBuilder(bindingOperation, mapping, methodMapping, 
portStyle, exceptionMap, complexTypeMap, elementMap, classLoader, 
enhancedServiceEndpointClass);
+            OperationInfo operationInfo = 
operationDescBuilder.buildOperationInfo(soapVersion);
             operationInfos[i++] = operationInfo;
         }
         JavaXmlTypeMappingType[] javaXmlTypeMappings = 
mapping.getJavaXmlTypeMappingArray();
@@ -514,11 +529,6 @@
 
     public OperationInfo buildOperationInfoLightweight(Method method, 
BindingOperation bindingOperation, Style defaultStyle, SOAPConstants 
soapVersion) throws DeploymentException {
         LightweightOperationDescBuilder operationDescBuilder = new 
LightweightOperationDescBuilder(bindingOperation, method);
-        return operationDescBuilder.buildOperationInfo(soapVersion);
-    }
-
-    public OperationInfo 
buildOperationInfoHeavyweight(ServiceEndpointMethodMappingType methodMapping, 
BindingOperation bindingOperation, Style defaultStyle, SOAPConstants 
soapVersion, Map exceptionMap, Map complexTypeMap, JavaWsdlMappingType mapping, 
ClassLoader classLoader, Class serviceEndpointInterface) throws 
DeploymentException {
-        HeavyweightOperationDescBuilder operationDescBuilder = new 
HeavyweightOperationDescBuilder(bindingOperation, mapping, methodMapping, 
defaultStyle, exceptionMap, complexTypeMap, classLoader, 
serviceEndpointInterface);
         return operationDescBuilder.buildOperationInfo(soapVersion);
     }
 

Modified: 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
URL: 
http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java?view=diff&r1=160070&r2=160071
==============================================================================
--- 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
 (original)
+++ 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
 Mon Apr  4 10:53:58 2005
@@ -16,23 +16,6 @@
  */
 package org.apache.geronimo.axis.builder;
 
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.jar.JarFile;
-import java.io.Serializable;
-import javax.wsdl.*;
-import javax.wsdl.extensions.soap.SOAPAddress;
-import javax.wsdl.extensions.soap.SOAPBinding;
-import javax.wsdl.extensions.soap.SOAPBody;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.handler.HandlerInfo;
-
 import org.apache.axis.constants.Style;
 import org.apache.axis.constants.Use;
 import org.apache.axis.description.JavaServiceDesc;
@@ -42,18 +25,27 @@
 import org.apache.axis.encoding.TypeMapping;
 import org.apache.axis.encoding.TypeMappingRegistryImpl;
 import org.apache.axis.encoding.ser.*;
+import org.apache.geronimo.axis.server.ReadOnlyServiceDesc;
+import org.apache.geronimo.axis.server.ServiceInfo;
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.deployment.util.DeploymentUtil;
 import org.apache.geronimo.kernel.ClassLoading;
-import org.apache.geronimo.xbeans.j2ee.JavaXmlTypeMappingType;
-import org.apache.geronimo.xbeans.j2ee.ServiceEndpointMethodMappingType;
-import org.apache.geronimo.xbeans.j2ee.PortComponentHandlerType;
-import org.apache.geronimo.xbeans.j2ee.ParamValueType;
-import org.apache.geronimo.xbeans.j2ee.XsdQNameType;
-import org.apache.geronimo.axis.server.ReadOnlyServiceDesc;
-import org.apache.geronimo.axis.server.ServiceInfo;
+import org.apache.geronimo.xbeans.j2ee.*;
 import org.apache.xmlbeans.SchemaType;
 
+import javax.wsdl.*;
+import javax.wsdl.extensions.soap.SOAPAddress;
+import javax.wsdl.extensions.soap.SOAPBinding;
+import javax.wsdl.extensions.soap.SOAPBody;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.handler.HandlerInfo;
+import java.lang.String;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.*;
+import java.util.jar.JarFile;
+
 /**
  * @version $Rev$ $Date$
  */
@@ -158,7 +150,7 @@
         Map exceptionMap = 
WSDescriptorParser.getExceptionMap(portInfo.getJavaWsdlMapping());
         Map schemaTypeKeyToSchemaTypeMap = 
WSDescriptorParser.buildSchemaTypeKeyToSchemaTypeMap(portInfo.getDefinition());
         Map complexTypeMap = 
WSDescriptorParser.getComplexTypesInWsdl(schemaTypeKeyToSchemaTypeMap);
-
+        Map elementMap = 
WSDescriptorParser.getElementToTypeMap(schemaTypeKeyToSchemaTypeMap);
 
         JavaServiceDesc serviceDesc = new JavaServiceDesc();
 
@@ -187,7 +179,7 @@
             validateLightweightMapping(portInfo.getDefinition());
         }
 
-        buildOperations(binding, serviceEndpointInterface, isLightweight, 
portInfo, exceptionMap, complexTypeMap, classLoader, serviceDesc);
+        buildOperations(binding, serviceEndpointInterface, isLightweight, 
portInfo, exceptionMap, complexTypeMap, elementMap, classLoader, serviceDesc);
 
         TypeMappingRegistryImpl tmr = new TypeMappingRegistryImpl();
         tmr.doRegisterFromVersion("1.3");
@@ -304,7 +296,7 @@
         }
     }
 
-    private static void buildOperations(Binding binding, Class 
serviceEndpointInterface, boolean lightweight, PortInfo portInfo, Map 
exceptionMap, Map complexTypeMap, ClassLoader classLoader, JavaServiceDesc 
serviceDesc) throws DeploymentException {
+    private static void buildOperations(Binding binding, Class 
serviceEndpointInterface, boolean lightweight, PortInfo portInfo, Map 
exceptionMap, Map complexTypeMap, Map elementMap, ClassLoader classLoader, 
JavaServiceDesc serviceDesc) throws DeploymentException {
         List bindingOperations = binding.getBindingOperations();
         for (int i = 0; i < bindingOperations.size(); i++) {
             BindingOperation bindingOperation = (BindingOperation) 
bindingOperations.get(i);
@@ -317,7 +309,7 @@
                 String operationName = 
bindingOperation.getOperation().getName();
                 ServiceEndpointMethodMappingType[] methodMappings = 
portInfo.getServiceEndpointInterfaceMapping().getServiceEndpointMethodMappingArray();
                 ServiceEndpointMethodMappingType methodMapping = 
WSDescriptorParser.getMethodMappingForOperation(operationName, methodMappings);
-                operationDescBuilder = new 
HeavyweightOperationDescBuilder(bindingOperation, 
portInfo.getJavaWsdlMapping(), methodMapping, Style.RPC, exceptionMap, 
complexTypeMap, classLoader, serviceEndpointInterface);
+                operationDescBuilder = new 
HeavyweightOperationDescBuilder(bindingOperation, 
portInfo.getJavaWsdlMapping(), methodMapping, Style.RPC, exceptionMap, 
complexTypeMap, elementMap, classLoader, serviceEndpointInterface);
             }
 
             
serviceDesc.addOperationDesc(operationDescBuilder.buildOperationDesc());

Modified: 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java
URL: 
http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java?view=diff&r1=160070&r2=160071
==============================================================================
--- 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java
 (original)
+++ 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java
 Mon Apr  4 10:53:58 2005
@@ -71,6 +71,7 @@
     private final Style defaultStyle;
     private final Map exceptionMap;
     private final Map complexTypeMap;
+    private final Map elementMap;
     private final ClassLoader classLoader;
 
     /* Keep track of in and out parameter names so we can verify that
@@ -80,13 +81,14 @@
     private final Set outParamNames = new HashSet();
     private final Class serviceEndpointInterface;
 
-    public HeavyweightOperationDescBuilder(BindingOperation bindingOperation, 
JavaWsdlMappingType mapping, ServiceEndpointMethodMappingType methodMapping, 
Style defaultStyle, Map exceptionMap, Map complexTypeMap, ClassLoader 
classLoader, Class serviceEndpointInterface) throws DeploymentException {
+    public HeavyweightOperationDescBuilder(BindingOperation bindingOperation, 
JavaWsdlMappingType mapping, ServiceEndpointMethodMappingType methodMapping, 
Style defaultStyle, Map exceptionMap, Map complexTypeMap, Map elementMap, 
ClassLoader classLoader, Class serviceEndpointInterface) throws 
DeploymentException {
         super(bindingOperation);
         this.mapping = mapping;
         this.methodMapping = methodMapping;
         this.defaultStyle = defaultStyle;
         this.exceptionMap = exceptionMap;
         this.complexTypeMap = complexTypeMap;
+        this.elementMap = elementMap;
         this.classLoader = classLoader;
         this.serviceEndpointInterface = serviceEndpointInterface;
         BindingInput bindingInput = bindingOperation.getBindingInput();
@@ -123,7 +125,7 @@
         }
         built = true;
 
-        operationDesc.setName( operationName );
+        operationDesc.setName(operationName);
         
         // Set to 'document' or 'rpc'
         Style style = Style.getStyle(soapOperation.getStyle(), defaultStyle);
@@ -176,12 +178,12 @@
             String args = "(";
             for (int i = 0; i < paramTypes.length; i++) {
                 args += paramTypes[i].getName();
-                if (i < paramTypes.length - 1){
+                if (i < paramTypes.length - 1) {
                     args += ",";
                 }
             }
             args += ")";
-            
+
             throw new DeploymentException("Mapping references non-existent 
method in service-endpoint: " + methodName + args);
         }
 
@@ -255,8 +257,20 @@
         } else {
             part = (Part) message.getOrderedParts(null).iterator().next();
         }
-        QName faultTypeQName = part.getElementName() == null ? 
part.getTypeName() : part.getElementName();
-        boolean isComplex = faultTypeQName != null && 
complexTypeMap.containsKey(faultTypeQName);
+        QName faultTypeQName;// = part.getElementName() == null ? 
part.getTypeName() : part.getElementName();
+        if (part.getElementName() == null) {
+            faultTypeQName = part.getTypeName();
+            if (faultTypeQName == null) {
+                throw new DeploymentException("Neither type nor element name 
supplied for part: " + part);
+            }
+        } else {
+            faultTypeQName = (QName) elementMap.get(part.getElementName());
+            if (faultTypeQName == null) {
+                throw new DeploymentException("Can not find type for: element: 
" + part.getElementName() + ", known elements: " + elementMap);
+            }
+        }
+        SchemaType complexType = (SchemaType) 
complexTypeMap.get(faultTypeQName);
+        boolean isComplex = complexType != null;
         FaultDesc faultDesc = new FaultDesc(faultQName, className, 
faultTypeQName, isComplex);
 
         //constructor parameters
@@ -264,7 +278,6 @@
             if (!isComplex) {
                 throw new DeploymentException("ConstructorParameterOrder can 
only be set for complex types, not " + faultTypeQName);
             }
-            SchemaType complexType = (SchemaType) 
complexTypeMap.get(faultTypeQName);
             Map elementMap = new HashMap();
             SchemaProperty[] properties = complexType.getProperties();
             for (int i = 0; i < properties.length; i++) {
@@ -295,10 +308,10 @@
                     } catch (ClassNotFoundException e) {
                         throw new DeploymentException("Could not load 
exception constructor parameter", e);
                     }
-                } else if (qnameToClassMap.containsKey(elementType)){
+                } else if (qnameToClassMap.containsKey(elementType)) {
                     javaElementType = (Class) qnameToClassMap.get(elementType);
                 } else {
-                    throw new DeploymentException("Unknown type: " +  
elementType);
+                    throw new DeploymentException("Unknown type: " + 
elementType);
                 }
                 //todo faultTypeQName is speculative
                 //todo outheader might be true!
@@ -401,7 +414,7 @@
             if (!wsdlMessageQName.equals(output.getQName())) {
                 throw new DeploymentException("QName of output message: " + 
output.getQName() +
                         " does not match mapping message QName: " + 
wsdlMessageQName + " for operation " + operationName);
-             }
+            }
             part = output.getPart(wsdlMessagePartName);
             if (part == null) {
                 throw new DeploymentException("No part for wsdlMessagePartName 
" + wsdlMessagePartName + " in output message for operation " + operationName);

Modified: 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
URL: 
http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java?view=diff&r1=160070&r2=160071
==============================================================================
--- 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
 (original)
+++ 
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
 Mon Apr  4 10:53:58 2005
@@ -521,6 +521,21 @@
         return complexTypeMap;
     }
 
+    public static Map getElementToTypeMap(Map schemaTypeKeyToSchemaTypeMap) {
+        Map elementToTypeMap = new HashMap();
+        for (Iterator iterator = 
schemaTypeKeyToSchemaTypeMap.entrySet().iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            SchemaTypeKey key = (SchemaTypeKey) entry.getKey();
+            if (key.isElement()) {
+                QName elementQName = key.getqName();
+                SchemaType schemaType = (SchemaType) entry.getValue();
+                QName typeQName = schemaType.getName();
+                elementToTypeMap.put(elementQName, typeQName);
+            }
+        }
+        return elementToTypeMap;
+    }
+
     public static Map getExceptionMap(JavaWsdlMappingType mapping) {
         Map exceptionMap = new HashMap();
         if (mapping != null) {

Added: geronimo/trunk/modules/axis-builder/src/test-resources/schema/schema4.xsd
URL: 
http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/test-resources/schema/schema4.xsd?view=auto&rev=160071
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/test-resources/schema/schema4.xsd 
(added)
+++ geronimo/trunk/modules/axis-builder/src/test-resources/schema/schema4.xsd 
Mon Apr  4 10:53:58 2005
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<schema targetNamespace="elementtest"
+    xmlns:elementtest="elementtest"
+    xmlns="http://www.w3.org/2001/XMLSchema";>
+    <element name="teststring" type="elementtest:stringtest"/>
+    <complexType name="stringtest">
+        <sequence>
+            <element name="value" type="string"/>
+        </sequence>
+    </complexType>
+</schema>

Modified: 
geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ParsingTest.java
URL: 
http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ParsingTest.java?view=diff&r1=160070&r2=160071
==============================================================================
--- 
geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ParsingTest.java
 (original)
+++ 
geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ParsingTest.java
 Mon Apr  4 10:53:58 2005
@@ -84,4 +84,15 @@
         return map;
     }
 
+    public void testElementToTypeMapping() throws Exception {
+        File schema1 = new File(basedir, 
"src/test-resources/schema/schema4.xsd");
+        System.out.println("SCHEMA 4");
+        Map map = parse(schema1);
+        assertEquals(3, map.size());
+        Map elements = WSDescriptorParser.getElementToTypeMap(map);
+        System.out.println("ELEMENT MAP");
+        System.out.println(elements);
+        assertEquals(1, elements.size());
+    }
+
 }


Reply via email to