Author: mmerz
Date: Wed Apr 27 11:40:21 2005
New Revision: 165025

URL: http://svn.apache.org/viewcvs?rev=165025&view=rev
Log:
Fixed issues with RPC/encoding.


Contribuor: Daryoush Mehrtash

Modified:
    
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
    
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
    
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java

Modified: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
 (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
 Wed Apr 27 11:40:21 2005
@@ -43,6 +43,7 @@
 import org.apache.axis.description.OperationDesc;
 import org.apache.axis.description.ParameterDesc;
 import org.apache.axis.description.ServiceDesc;
+import org.apache.beehive.wsm.axis.databinding.SystemTypeLookupService;
 import org.apache.beehive.wsm.model.BeehiveWsMethodMetadata;
 import org.apache.beehive.wsm.model.BeehiveWsParameterMetadata;
 import org.apache.beehive.wsm.model.BeehiveWsTypeMetadata;
@@ -50,7 +51,6 @@
 import org.apache.beehive.wsm.model.jsr181.Jsr181ParameterMetadataImpl;
 //import org.apache.beehive.wsm.jsr181.model.jsr181.Jsr181TypeMetadataImpl;
 import org.apache.beehive.wsm.model.wsdl.XmlBeanWSDLProcessor;
-import org.apache.beehive.wsm.wsdl.WSDLProcessor;
 import org.apache.beehive.wsm.wsdl.Wsdl2AJava;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
@@ -79,9 +79,10 @@
             
             StringWriter result = new StringWriter();
             //FileInputStream src = new FileInputStream("temp.wsdl");
-            StringBufferInputStream src = new StringBufferInputStream(theWSDL);
-            WSDLProcessor wsdlProc = new XmlBeanWSDLProcessor();
-            BeehiveWsTypeMetadata om = wsdlProc.createObjectModel(src);
+                       
+               XmlBeanWSDLProcessor wsdlProc = new XmlBeanWSDLProcessor(new 
StringBufferInputStream(theWSDL));
+                       
+                       BeehiveWsTypeMetadata om = wsdlProc.getObjectModel(new 
SystemTypeLookupService());
             
             Collection<? extends BeehiveWsMethodMetadata> methods 
=om.getMethods();
             System.out.println("Size of my mehtod list: " + 
om.getMethods().size());

Modified: 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
 (original)
+++ 
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
 Wed Apr 27 11:40:21 2005
@@ -36,6 +36,7 @@
 import org.apache.axis.description.OperationDesc;
 import org.apache.axis.description.ParameterDesc;
 import org.apache.axis.description.ServiceDesc;
+import org.apache.beehive.wsm.axis.databinding.SystemTypeLookupService;
 import org.apache.beehive.wsm.model.BeehiveWsMethodMetadata;
 import org.apache.beehive.wsm.model.BeehiveWsParameterMetadata;
 import org.apache.beehive.wsm.model.BeehiveWsTypeMetadata;
@@ -62,8 +63,9 @@
         Class clazz = Class.forName(CLASSNAME);
         serverModel = Jsr181ObjectModelStore.load(clazz);
         
-        XmlBeanWSDLProcessor xbwp = new XmlBeanWSDLProcessor();
-        clientModel = xbwp.createObjectModel(new FileInputStream(f));
+        XmlBeanWSDLProcessor xbwp = new XmlBeanWSDLProcessor(new 
FileInputStream(f));
+               
+        clientModel = xbwp.getObjectModel(new SystemTypeLookupService());
         }
 
     public void tearDown() {

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
 Wed Apr 27 11:40:21 2005
@@ -287,7 +287,7 @@
             // + type.getCanonicalName() + " qname is: " + q);
             // }
 
-            BindingLookupService lookupService = new 
SystemTypeLookupService(tm);
+            BindingLookupService lookupService = new 
SystemTypeLookupService();  // move this to the constructor
             QName q = lookupService.class2qname(type, defaultNameSpace);
 
  

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
 Wed Apr 27 11:40:21 2005
@@ -22,53 +22,110 @@
 
 import javax.xml.namespace.QName;
 
-
-import org.apache.axis.encoding.TypeMapping;
+import org.apache.axis.description.TypeDesc;
+import org.apache.axis.utils.ClassUtils;
 import org.apache.axis.wsdl.fromJava.Namespaces;
 import org.apache.axis.wsdl.fromJava.Types;
+import org.apache.axis.wsdl.toJava.Utils;
 import org.apache.beehive.wsm.axis.registration.AxisTypeMappingMetaData;
 import org.apache.beehive.wsm.databinding.BindingLookupService;
-
-
+import org.apache.log4j.Logger;
 
 public class AxisTypeLookup implements BindingLookupService {
-       TypeMapping tm;
-       
-       
+       static Logger logger = Logger.getLogger(AxisTypeLookup.class);
+
        /**
         * @param tm
         */
-       public AxisTypeLookup(TypeMapping tm) {
+       public AxisTypeLookup() {
                super();
-               this.tm = tm;
        }
-       
-       /* (non-Javadoc)
+
+       /*
+        * (non-Javadoc)
+        * 
         * @see TypeLookUpServices#getClassQName(java.lang.Class)
         */
        public QName class2qname(Class cls) {
-        String namespace = Namespaces.makeNamespace(cls.getName());
-        if (namespace == null || namespace
-            .endsWith("DefaultNamespace")) {
-            namespace = "http://no.namespace.specified";;
-        }
-        return class2qname(cls, namespace);
+               if (cls.isArray())
+                       cls = cls.getComponentType();
+               TypeDesc td = TypeDesc.getTypeDescForClass(cls); // a class can
+               if (null != td) {
+                       return td.getXmlType();
+               } else {
+                       String namespace = 
Namespaces.makeNamespace(cls.getName());
+                       if (namespace == null || 
namespace.endsWith("DefaultNamespace")) {
+                               namespace = "http://no.namespace.specified";;
+                       }
+                       return class2qname(cls, namespace);
+               }
+
+       }
+
+       /**
+        * @param cls
+        * @param namespace
+        * @return
+        */
+       public QName class2qname(Class cls, String namespace) {
+               if (AxisTypeMappingMetaData.isBuiltInType(cls))
+                       return AxisTypeMappingMetaData.getBuiltInTypeQname(cls);
+               return new QName(namespace, Types.getLocalNameFromFullName(cls
+                               .getName()));
+       }
+
+       public Class qname2class(QName qType) {
+
+               if (qType == null) {
+                       return null;
+               }
+
+               String packageName = getPackageNameFromQName(qType);
+               String className;
+               if (packageName != null && packageName.length() > 0) {
+                       className = packageName + "."
+                                       + 
Utils.xmlNameToJavaClass(qType.getLocalPart());
+               } else {
+                       className = 
Utils.xmlNameToJavaClass(qType.getLocalPart());
+               }
+
+               Class javaType = null;
+
+               try {
+                       javaType = ClassUtils.forName(className);
+
+               } catch (ClassNotFoundException e) {
+                       System.out.println("Failed to find the class: " + 
className
+                                       + " No Axis generated classes was found 
for qname: "
+                                       + qType);
+               }
+
+               if (null != javaType)
+                       System.out.println("Found an Axis generated type for 
qname: "
+                                       + qType + " class: " + 
javaType.getCanonicalName());
+
+               return javaType;
+       }
 
+       private String getPackageNameFromQName(QName qType) {
+
+               // TODO: Later keep a cache of previous conversions, and return 
the
+               // result
+               // from cache if there is any.
+               String packageName = 
Utils.makePackageName(qType.getNamespaceURI());
+               packageName = normalizePackageName(packageName, '.');
+               return packageName;
        }
 
-    /**
-     * @param cls
-     * @param namespace
-     * @return
-     */
-    public QName class2qname(Class cls, String namespace) {
-        if(AxisTypeMappingMetaData.isBuiltInType(cls)) return 
AxisTypeMappingMetaData.getBuiltInTypeQname(cls);
-        return new QName(namespace,
-                              Types.getLocalNameFromFullName(cls.getName()));
-    }
-       
-          public Class qname2class(QName qType) {
-               return tm.getClassForQName(qType);
-          }
+       private static final char[] pkgSeparators = { '.', ':' };
+
+       private static String normalizePackageName(String pkg, char separator) {
+
+               for (int i = 0; i < pkgSeparators.length; i++) {
+                       pkg = pkg.replace(pkgSeparators[i], separator);
+               }
+
+               return pkg;
+       }
 
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
 Wed Apr 27 11:40:21 2005
@@ -29,52 +29,63 @@
 import org.apache.beehive.wsm.databinding.xmlbeans.XmlBeanTypeLookup;
 
 
-
 public class SystemTypeLookupService implements BindingLookupService {
 
-    List<BindingLookupService> lookupServiceList = new 
ArrayList<BindingLookupService>();
+       List<BindingLookupService> lookupServiceList = new 
ArrayList<BindingLookupService>();
+
        /**
         * 
         */
-       public SystemTypeLookupService(org.apache.axis.encoding.TypeMapping tm) 
{
-        lookupServiceList.add(new XmlBeanTypeLookup());
-        lookupServiceList.add(new AxisTypeLookup(tm));
+       public SystemTypeLookupService() {
+               lookupServiceList.add(new XmlBeanTypeLookup());
+               lookupServiceList.add(new AxisTypeLookup());
 
        }
-       /* (non-Javadoc)
+
+       /*
+        * (non-Javadoc)
+        * 
         * @see TypeLookUpServices#getClassQName(java.lang.Class)
         */
        public QName class2qname(Class cls) {
                QName qname = null;
-               
-               
-               for(BindingLookupService lookUpService : lookupServiceList) {
-                       if( null != (qname = lookUpService.class2qname(cls))) 
break;
+
+               for (BindingLookupService lookUpService : lookupServiceList) {
+                       if (null != (qname = lookUpService.class2qname(cls)))
+                               break;
                }
                return qname;
        }
-    
-    
-    /* (non-Javadoc)
-     * @see TypeLookUpServices#getClassQName(java.lang.Class)
-     */
-    public QName class2qname(Class cls, String namespace) {
-        QName qname = null;
- 
-        
-        for(BindingLookupService lookUpService : lookupServiceList) {
-            if( null != (qname = lookUpService.class2qname(cls, namespace))) 
break;
-        }
-        return qname;
-    }
-       /* (non-Javadoc)
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see TypeLookUpServices#getClassQName(java.lang.Class)
+        */
+       public QName class2qname(Class cls, String namespace) {
+               QName qname = null;
+
+               for (BindingLookupService lookUpService : lookupServiceList) {
+                       if (null != (qname = lookUpService.class2qname(cls, 
namespace)))
+                               break;
+               }
+               return qname;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
         * @see TypeLookUpServices#Qname2Class(javax.xml.namespace.QName)
         */
        public Class qname2class(QName qname) {
                Class cls = null;
-               for(BindingLookupService lookUpService : lookupServiceList) {
-                       if( null != (cls = lookUpService.qname2class(qname))) 
break;
+               for (BindingLookupService lookUpService : lookupServiceList) {
+                       if (null != (cls = lookUpService.qname2class(qname)))
+                               break;
                }
-               return cls;     }
+               if (null == cls)
+                       cls = Object.class;
+               return cls;
+       }
 
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
 Wed Apr 27 11:40:21 2005
@@ -28,6 +28,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.jws.soap.SOAPBinding;
 import javax.xml.namespace.QName;
 
 import org.apache.axis.Constants;
@@ -44,6 +45,8 @@
 import org.apache.axis.encoding.ser.BeanSerializerFactory;
 import org.apache.axis.types.HexBinary;
 import org.apache.axis.utils.BeanPropertyDescriptor;
+import org.apache.beehive.wsm.axis.ant.AxisTypeGeneratorTask;
+import org.apache.beehive.wsm.axis.databinding.AxisTypeLookup;
 import org.apache.beehive.wsm.axis.util.encoding.XmlBeanDeserializerFactory;
 import org.apache.beehive.wsm.axis.util.encoding.XmlBeanSerializerFactory;
 import org.apache.beehive.wsm.databinding.BindingLookupService;
@@ -74,7 +77,8 @@
      * @param cls
      * @param q
      */
-    protected void registerClassAsWithDefaultSearialization(Class cls, QName 
q) {
+    protected void registerClassAsWithDefaultSearialization(Class cls, QName 
q, SOAPBinding.Style style,
+                       SOAPBinding.Use use) {
         try {
             logger.debug("Assigned Default Serialization to  class: " + 
cls.getCanonicalName()
                     + " qname:" + q);
@@ -84,7 +88,9 @@
                                                                 // descriptors
             TypeDesc superTd = null;
             BeanPropertyDescriptor[] superPd = null;
+                       boolean shoudRegisterFields = false;
             if (null == td) {
+                               shoudRegisterFields = true;
                 td = new TypeDesc(cls);
                 Class supa = cls.getSuperclass();
                 if ((supa != null) && (supa != java.lang.Object.class)
@@ -92,7 +98,7 @@
                         && (supa != java.lang.Throwable.class)
                         && (supa != java.rmi.RemoteException.class)
                         && (supa != org.apache.axis.AxisFault.class)) {
-                    registerType(supa);
+                    registerType(supa, style, use);
                     superTd = TypeDesc.getTypeDescForClass(supa);
                     if (superTd != null) {
                         superPd = superTd.getPropertyDescriptors();
@@ -100,9 +106,7 @@
                 }
                 td.setXmlType(q);
                 TypeDesc.registerTypeDescForClass(cls, td);
-            } else {
-                td = null;
-            }
+            } 
             mTypeMapping.register(cls, q, new BeanSerializerFactory(cls, q),
             /*
              * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- should check that the type
@@ -117,9 +121,9 @@
                 if (!(subType.isPrimitive()
                         || subType.getName().startsWith("java.") || subType
                         .getName().startsWith("javax."))) {
-                    registerType(subType);
+                    registerType(subType, style, use);
                 }
-                if (td != null) {
+                if (shoudRegisterFields) {
                     String ns = q.getNamespaceURI();
                     if (superTd != null && superPd != null) {
                         for (int j = 0; j < superPd.length; j++) {
@@ -201,9 +205,12 @@
      * @param cls
      * @param q
      */
-    protected void registerClassAsArray(Class cls, QName q) {
+    protected void registerClassAsSoapEncodedArray(Class cls, QName q) {
         logger.debug("Assigned Array Serialization to  class: " + 
cls.getCanonicalName()
-                + " qname:" + q);       mTypeMapping.register(cls, q, new 
ArraySerializerFactory(cls, q),
+                + " qname:" + q + " Array element qname: " + 
lookupService.class2qname(cls.getComponentType()));      
+                               
+               
+               mTypeMapping.register(cls, q, new 
ArraySerializerFactory(lookupService.class2qname(cls.getComponentType())),
                 new ArrayDeserializerFactory());
     }
 

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
 Wed Apr 27 11:40:21 2005
@@ -21,6 +21,7 @@
 
 
 import javax.xml.namespace.QName;
+
 /*
  * There are varieties of XML-Java binding (XMLBeans, Axis, Castor, etc) 
  * implementations, each with its own nuances. 

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
 Wed Apr 27 11:40:21 2005
@@ -22,9 +22,11 @@
 import java.io.InputStream;
 import java.io.IOException;
 import java.lang.reflect.Array;
+import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,6 +35,7 @@
 import javax.jws.soap.SOAPBinding;
 import javax.xml.namespace.QName;
 
+import org.apache.beehive.wsm.databinding.BindingLookupService;
 import org.apache.beehive.wsm.util.TypeMappingUtil;
 import org.apache.beehive.wsm.util.XmlBeanTypeMappingUtil;
 import org.apache.beehive.wsm.wsdl.WSDLProcessor;
@@ -46,6 +49,9 @@
 import org.apache.beehive.wsm.model.jsr181.Jsr181TypeMetadataImpl;
 import org.apache.beehive.wsm.model.jsr181.SOAPBindingInfo;
 import org.apache.xmlbeans.SchemaType;
+import org.apache.xmlbeans.SchemaTypeLoader;
+import org.apache.xmlbeans.XmlBeans;
+import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
 import org.xmlsoap.schemas.wsdl.DefinitionsDocument;
@@ -68,6 +74,7 @@
 import org.apache.xmlbeans.impl.xb.xsdschema.Element;
 import org.apache.xmlbeans.impl.xb.xsdschema.Group;
 import org.apache.xmlbeans.impl.xb.xsdschema.ComplexType;
+import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument;
 import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument.Schema;
 
 
/*******************************************************************************
@@ -76,28 +83,17 @@
  * 
  * @author Jonathan Colwell
  */
-public class XmlBeanWSDLProcessor implements WSDLProcessor {
+public class XmlBeanWSDLProcessor {
 
-  private TypeMappingUtil mTmu;
+  private BindingLookupService lookupService;
+  DefinitionsDocument defDoc;
 
-  public BeehiveWsTypeMetadata createObjectModel(InputStream wsdlStream)
-      throws Exception {
-
-    DefinitionsDocument defDoc = parseWSDL(wsdlStream);
-    return toWebServiceMetadata(defDoc);
 
-  }
 
-  public void setTypeMappingUtil(TypeMappingUtil tmu) {
-    mTmu = tmu;
-  }
-
-  public TypeMappingUtil getTypeMappingUtil() {
-    if (mTmu == null) {
-      mTmu = new XmlBeanTypeMappingUtil();
-    }
-    return mTmu;
-  }
+       public QName getServiceName() {
+               TService[] services = defDoc.getDefinitions().getServiceArray();
+               return new QName(services[0].getName());
+       }
 
   public static final String TRANSPORT = 
"http://schemas.xmlsoap.org/soap/http";;
 
@@ -107,8 +103,10 @@
 
   public static final String WSDLSOAPNS = 
"http://schemas.xmlsoap.org/wsdl/soap/";;
 
-  public BeehiveWsTypeMetadata toWebServiceMetadata(DefinitionsDocument defDoc)
+  public BeehiveWsTypeMetadata getObjectModel(BindingLookupService 
lookupService)
       throws Exception {
+       this.lookupService = lookupService;
+
     BeehiveWsTypeMetadata wsm = new Jsr181TypeMetadataImpl();
     Map<String, BeehiveWsMethodMetadata> methodMap = new HashMap<String, 
BeehiveWsMethodMetadata>();
     TDefinitions defs = defDoc.getDefinitions();
@@ -331,7 +329,7 @@
           // we know we are document, and thus literal. and most
           // likely using xml beans, but can use axis too.
           QName element = messagePart.getElement();
-          Class javaType = getTypeMappingUtil().q2Class(element);
+          Class javaType = findClassForQname(element);
           // in case of xmlbeans(or other registered types) we don't
           // need
           // to dig any further
@@ -425,7 +423,7 @@
           wpm.setWpName(messagePart.getName());
           QName type = messagePart.getType();
           wpm.setXmlType(type);
-          wpm.setJavaType(getTypeMappingUtil().q2Class(type));
+          wpm.setJavaType(findClassForQname(type));
           /*
            * System.out.println(wpm.getWpName() + " of type " +
            * wpm.getJavaType());
@@ -437,6 +435,12 @@
 
   }
 
+
+private Class findClassForQname(QName element) {
+       //return new XmlBeanTypeMappingUtil().q2Class(element);
+       return lookupService.qname2class(element);
+}
+
   // To detect the wrapped walk the message parts, if there is a part that has 
name="parameters"
   // or if there is a part that its element name is the same as the operation 
name, return true.
   // NOTE:  for MIME multiparts, or when there are headers the tBind should be 
checked to determine
@@ -445,6 +449,7 @@
   // TODO: the logic here may not work with MIME types, verify later.
   private boolean isWrapped( String operationName, TPart[] messagePart,  
TBinding tBind,boolean isOutputParameters) {
          for( TPart message : messagePart) {
+                 if( !message.isSetElement()) return false;  // RPC-Encoded
                  if( true       == unwrapMessagePart(operationName, 
isOutputParameters, message)) return true;
          }
          return false;
@@ -501,7 +506,7 @@
 
     } else
       throw new RuntimeException("invalid element: " + el);
-    Class javaType = getTypeMappingUtil().q2Class(xmlType);
+    Class javaType = findClassForQname(xmlType);
     if (isArray) {
       // create an array of the type, then get its type.
       Object realType = Array.newInstance(javaType, 1);
@@ -605,10 +610,10 @@
 
  
 
-  public BeehiveWsTypeMetadata loadWebServiceMetadataFromWSDL(String 
wsdlLocation)
-      throws Exception {
-    return toWebServiceMetadata(parseWSDL(wsdlLocation));
-  }
+//  public BeehiveWsTypeMetadata loadWebServiceMetadataFromWSDL(String 
wsdlLocation)
+//      throws Exception {
+//    return toWebServiceMetadata(parseWSDL(wsdlLocation));
+//  }
 
   public static DefinitionsDocument parseWSDL(String wsdlLocation)
       throws IOException, MalformedURLException, XmlException {
@@ -723,4 +728,14 @@
     }
     return castKids;
   }
+
+       public XmlBeanWSDLProcessor( InputStream wsdlStream) throws 
MalformedURLException, IOException, XmlException {
+               super();
+               this.defDoc = parseWSDL(wsdlStream);
+
+       }
+       
+       private XmlBeanWSDLProcessor() {
+         // no default constrcutor!
+       }
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
 Wed Apr 27 11:40:21 2005
@@ -32,233 +32,251 @@
 
 import org.apache.log4j.*;
 
+import javax.jws.soap.SOAPBinding;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.encoding.TypeMapping;
 import javax.xml.rpc.holders.Holder;
 
-
 import org.apache.beehive.wsm.databinding.BindingLookupService;
 import org.apache.beehive.wsm.databinding.GenericHolder;
 
 public abstract class TypeRegistrar {
-    static Logger logger = Logger.getLogger(TypeRegistrar.class);
+       static Logger logger = Logger.getLogger(TypeRegistrar.class);
 
-    protected TypeMapping mTypeMapping;
+       protected TypeMapping mTypeMapping;
 
-    protected BindingLookupService lookupService;
+       protected BindingLookupService lookupService;
 
- 
-    /**
-     * @param typeMapping
-     * @param lookupService
-     */
-    public TypeRegistrar(TypeMapping typeMapping,
-            BindingLookupService lookupService) {
-        super();
-        mTypeMapping = typeMapping;
-        this.lookupService = lookupService;
-     }
-
-
-    /**
-     * @param cls
-     * @return QName
-     */
-    protected abstract QName getRegisteredQName(Class cls);
-
-    /**
-     * @param cls
-     * @param q
-     */
-    abstract protected void registerClassAsWithDefaultSearialization(Class cls,
-            QName q);
-
-    /**
-     * @param cls
-     * @param q
-     */
-    abstract protected void registerClassAsXMLBeans(Class cls, QName q);
-
-    /**
-     * @param cls
-     * @param q
-     * @throws ClassNotFoundException
-     * @throws NoSuchMethodException
-     * @throws InstantiationException
-     * @throws IllegalAccessException
-     * @throws InvocationTargetException
-     */
-    abstract protected void registerClassAsDataHandler(Class cls, QName q)
-            throws ClassNotFoundException, NoSuchMethodException,
-            InstantiationException, IllegalAccessException,
-            InvocationTargetException;
-
-    /**
-     * @param cls
-     * @param q
-     */
-    abstract protected void registerClassAsArray(Class cls, QName q);
-
-    /**
-     * @param cls
-     * @param q
-     * @return boolean
-     */
-    abstract protected boolean classIsRegistered(Class cls, QName q);
-
-    /**
-     * @return QName
-     */
-    abstract public QName getVoidType();
-    
-    abstract protected boolean isBuiltInType(Class cls);
-    abstract protected QName getBuiltInTypeQname(Class cls);
-
-
-    public QName registerType(Class cls) {
-        return registerType(cls, lookupService.class2qname(cls));
-    }
-
-    public QName registerType(Class cls, QName q) {
-        try {
-            logger.debug("Register class: " + cls.getCanonicalName()
-                    + " qName: " + q);
+       /**
+        * @param typeMapping
+        * @param lookupService
+        */
+       public TypeRegistrar(TypeMapping typeMapping,
+                       BindingLookupService lookupService) {
+               super();
+               mTypeMapping = typeMapping;
+               this.lookupService = lookupService;
+       }
+
+       /**
+        * @param cls
+        * @return QName
+        */
+       protected abstract QName getRegisteredQName(Class cls);
+
+       /**
+        * @param cls
+        * @param q
+        */
+       abstract protected void registerClassAsWithDefaultSearialization(Class 
cls,
+                       QName q, SOAPBinding.Style style,
+                       SOAPBinding.Use use);
+
+       /**
+        * @param cls
+        * @param q
+        */
+       abstract protected void registerClassAsXMLBeans(Class cls, QName q);
+
+       /**
+        * @param cls
+        * @param q
+        * @throws ClassNotFoundException
+        * @throws NoSuchMethodException
+        * @throws InstantiationException
+        * @throws IllegalAccessException
+        * @throws InvocationTargetException
+        */
+       abstract protected void registerClassAsDataHandler(Class cls, QName q)
+                       throws ClassNotFoundException, NoSuchMethodException,
+                       InstantiationException, IllegalAccessException,
+                       InvocationTargetException;
+
+       /**
+        * @param cls
+        * @param q
+        */
+       abstract protected void registerClassAsSoapEncodedArray(Class cls, 
QName q);
+
+       /**
+        * @param cls
+        * @param q
+        * @return boolean
+        */
+       abstract protected boolean classIsRegistered(Class cls, QName q);
+
+       /**
+        * @return QName
+        */
+       abstract public QName getVoidType();
+
+       abstract protected boolean isBuiltInType(Class cls);
+
+       abstract protected QName getBuiltInTypeQname(Class cls);
+
+       public QName registerType(Class cls, SOAPBinding.Style style,
+                       SOAPBinding.Use use) {
+               QName q;
+               if (SOAPBinding.Use.ENCODED == use && cls.isArray()) {
+                       q = lookupService.class2qname(cls.getComponentType());
+               }
+               else {
+                       q = lookupService.class2qname(cls);
+               }
+               return registerType(cls, q, style, use);
+       }
+
+       public QName registerType(Class cls, QName q, SOAPBinding.Style style,
+                       SOAPBinding.Use use) {
+               try {
+                       logger.debug("Register class: " + cls.getCanonicalName()
+                                       + " qName: " + q);
                        if (Void.TYPE.equals(cls))
-                return null;
-                       
-            if (isBuiltInType(cls))
-                return getBuiltInTypeQname(cls);
-            if (q == null)
-                throw new RuntimeException(
-                        "Invalid registeration requestion qname is null");
-            
-            
-            if (cls.isArray()) {
-//                if (!classIsRegistered(cls, q)) {
-//                    registerClassAsArray(cls, q);
-//                }
-                q = registerType(cls.getComponentType(), q);
-                // TODO: fix the expected type thing for arrays.
-                // if (expectedType != null) {
-                // q = expectedType;
-                // }
-            } else if (!classIsRegistered(cls, q)) { 
-                if (org.apache.xmlbeans.XmlObject.class.isAssignableFrom(cls)) 
{
-                    registerClassAsXMLBeans(cls, q);
-                }
-                /*
-                 * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- these datahandler 
using
-                 * classes are generally already registered but just in case...
-                 */
-                else if (isActivationEnabled()
-                        && (java.awt.Image.class.isAssignableFrom(cls)
-                                || getMultipartClass().isAssignableFrom(cls) 
|| getDataHandlerClass()
-                                .isAssignableFrom(cls))) {
-                    try {
-                        registerClassAsDataHandler(cls, q);
-                    } catch (Exception e) {
-                        /*
-                         * FIXME [EMAIL PROTECTED] 2004-Oct-08 -- log this
-                         * properly
-                         */
-                        e.printStackTrace();
-                    }
-                } else if (!Remote.class.isAssignableFrom(cls)
-                /*
-                 * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- java.rmi.Remote is
-                 * prohibited by the jax-rpc spec.
-                 */
-
-                /*
-                 * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- restricting against 
File
-                 * since, it doesn't make sense to serialize as a bean. That 
and
-                 * it causes an infinite loop as it keeps returning itself from
-                 * the getAbsoluteFile and getCanonicalFile calls
-                 */
-                && !File.class.isAssignableFrom(cls)) {
-                    registerClassAsWithDefaultSearialization(cls, q);
-                } else {
-                    throw new RuntimeException("failed to register "
-                            + cls.getName()
-                            + " as a valid web service datatype,"
-                            + " consider using a custom type mapping");
-                }
-            }
-            // }
-            // }
-            logger.info("Registered class: " + cls.getCanonicalName()
-                    + " qName: " + q);
-            return q;
-        } catch (RuntimeException e) {
-            logger.error("Failed to register class: " + cls.getCanonicalName()
-                    + " type: " + q.getNamespaceURI() + ":" + 
q.getLocalPart());
-
-            e.printStackTrace();
-            throw e;
-        }
-    } // public Class q2Class(QName qType) { //
-
-
-    private boolean isActivationEnabled() {
-        return null != getDataHandlerClass() && null != getMultipartClass();
-    }
-
-    private Class getDataHandlerClass() {
-        try {
-            return getClass().getClassLoader().loadClass(
-                    "javax.activation.DataHandler");
-        } catch (Exception e) {
-        }
-        return null;
-    }
-
-    private Class getMultipartClass() {
-        try {
-            return getClass().getClassLoader().loadClass(
-                    "javax.mail.internet.MimeMultipart");
-        } catch (Exception e) {
-        }
-        return null;
-    }
-
-
-    /**
-     * @param t
-     * @throws Exception
-     */
-    static public Class getHoldersValueClass(Type t) {
-        Class res = null;
-        
-        if (t instanceof ParameterizedType) {
-            ParameterizedType pt = (ParameterizedType)t;
-            Type raw = pt.getRawType();
-            if( GenericHolder.class.isAssignableFrom((Class)raw)) {
-                Type[] typeArgs = pt.getActualTypeArguments();
-                               if(typeArgs[0] instanceof GenericArrayType) {
-                                       Class arrayElementType =  (Class) 
((GenericArrayType)typeArgs[0]).getGenericComponentType();
+                               return null;
+
+                       if (isBuiltInType(cls))
+                               return getBuiltInTypeQname(cls);
+                       if (q == null)
+                               throw new RuntimeException(
+                                               "Invalid registeration 
requestion qname is null");
+
+                       if (cls.isArray()) {
+                               if (SOAPBinding.Use.ENCODED == use) {
+
+                                       // The Qname modification was needed to 
run the GoogleThe qname of the array must be different from the qname of the 
element.
+                                       // I don't think the qname really 
matters, as the array qname wont be in the message
+                                       // The qname of the array is available 
in the WSDL, but at this point we don't
+                                       // have the information, I have added 
"Array" at the end of the qname, it can
+                                       // be anything else and the code seems 
to work (from the client side).
+                                       // if this needs to be the real name of 
the array, somehow WSDL information
+                                       // must be made available to this 
method.
+                                       QName arrayQname = new 
QName(q.getNamespaceURI(), q.getLocalPart()+"Array"); 
+
+                                       if (!classIsRegistered(cls, arrayQname))
+                                               
registerClassAsSoapEncodedArray(cls, arrayQname);
+                               }
+                               // incase of literal, or encoded register the 
class also
+                               q = registerType(cls.getComponentType(), q, 
style, use);
+
+                       } else if (!classIsRegistered(cls, q)) {
+                               if 
(org.apache.xmlbeans.XmlObject.class.isAssignableFrom(cls)) {
+                                       registerClassAsXMLBeans(cls, q);
+                               }
+                               /*
+                                * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- these 
datahandler using
+                                * classes are generally already registered but 
just in case...
+                                */
+                               else if (isActivationEnabled()
+                                               && 
(java.awt.Image.class.isAssignableFrom(cls)
+                                                               || 
getMultipartClass().isAssignableFrom(cls) || getDataHandlerClass()
+                                                               
.isAssignableFrom(cls))) {
+                                       try {
+                                               registerClassAsDataHandler(cls, 
q);
+                                       } catch (Exception e) {
+                                               /*
+                                                * FIXME [EMAIL PROTECTED] 
2004-Oct-08 -- log this
+                                                * properly
+                                                */
+                                               e.printStackTrace();
+                                       }
+                               } else if (!Remote.class.isAssignableFrom(cls)
+                               /*
+                                * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- 
java.rmi.Remote is
+                                * prohibited by the jax-rpc spec.
+                                */
+
+                               /*
+                                * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- 
restricting against File
+                                * since, it doesn't make sense to serialize as 
a bean. That and
+                                * it causes an infinite loop as it keeps 
returning itself from
+                                * the getAbsoluteFile and getCanonicalFile 
calls
+                                */
+                               && !File.class.isAssignableFrom(cls)) {
+                                       
registerClassAsWithDefaultSearialization(cls, q, style, use);
+                               } else {
+                                       throw new RuntimeException("failed to 
register "
+                                                       + cls.getName()
+                                                       + " as a valid web 
service datatype,"
+                                                       + " consider using a 
custom type mapping");
+                               }
+                       }
+                       // }
+                       // }
+                       logger.info("Registered class: " + 
cls.getCanonicalName()
+                                       + " qName: " + q);
+                       return q;
+               } catch (RuntimeException e) {
+                       logger.error("Failed to register class: " + 
cls.getCanonicalName()
+                                       + " type: " + q.getNamespaceURI() + ":" 
+ q.getLocalPart());
+
+                       e.printStackTrace();
+                       throw e;
+               }
+       } // public Class q2Class(QName qType) { //
+
+       private boolean isActivationEnabled() {
+               return null != getDataHandlerClass() && null != 
getMultipartClass();
+       }
+
+       private Class getDataHandlerClass() {
+               try {
+                       return getClass().getClassLoader().loadClass(
+                                       "javax.activation.DataHandler");
+               } catch (Exception e) {
+               }
+               return null;
+       }
+
+       private Class getMultipartClass() {
+               try {
+                       return getClass().getClassLoader().loadClass(
+                                       "javax.mail.internet.MimeMultipart");
+               } catch (Exception e) {
+               }
+               return null;
+       }
+
+       /**
+        * @param t
+        * @throws Exception
+        */
+       static public Class getHoldersValueClass(Type t) {
+               Class res = null;
+
+               if (t instanceof ParameterizedType) {
+                       ParameterizedType pt = (ParameterizedType) t;
+                       Type raw = pt.getRawType();
+                       if (GenericHolder.class.isAssignableFrom((Class) raw)) {
+                               Type[] typeArgs = pt.getActualTypeArguments();
+                               if (typeArgs[0] instanceof GenericArrayType) {
+                                       Class arrayElementType = (Class) 
((GenericArrayType) typeArgs[0])
+                                                       
.getGenericComponentType();
                                        res = 
Array.newInstance(arrayElementType, 0).getClass();
-                               } else { 
+                               } else {
                                        res = (Class) typeArgs[0];
                                }
-            }else {
-                throw new RuntimeException("Invalid parameterized type for 
holder: " + t);
-            }
- 
-        } else if (t instanceof Class)  {
-            if(Holder.class.isAssignableFrom((Class)t)) {
-                // if type is not a holder type, there is no point to dig any 
deeper
-                Field[] publicFields = ((Class)t).getFields();
-                for (int i = 0; i < publicFields.length; i++) {
-                    if (0 == "value".compareTo(publicFields[i].getName())) {
-                        res = publicFields[i].getType();
-                         break;
-                    }
-                }
-            } else {
-                throw new RuntimeException("Invalid class.  Type: " + t + " is 
not a holder.");
-            }
-        }
-        // other wise just return the type
-        return res;
-    }
+                       } else {
+                               throw new RuntimeException(
+                                               "Invalid parameterized type for 
holder: " + t);
+                       }
+
+               } else if (t instanceof Class) {
+                       if (Holder.class.isAssignableFrom((Class) t)) {
+                               // if type is not a holder type, there is no 
point to dig any
+                               // deeper
+                               Field[] publicFields = ((Class) t).getFields();
+                               for (int i = 0; i < publicFields.length; i++) {
+                                       if (0 == 
"value".compareTo(publicFields[i].getName())) {
+                                               res = publicFields[i].getType();
+                                               break;
+                                       }
+                               }
+                       } else {
+                               throw new RuntimeException("Invalid class.  
Type: " + t
+                                               + " is not a holder.");
+                       }
+               }
+               // other wise just return the type
+               return res;
+       }
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
 Wed Apr 27 11:40:21 2005
@@ -48,6 +48,7 @@
     DefinitionsDocument defDoc;
     TTypes tt;
     Schema schema;
+       TService[] services;
  
     /**
      * @param stream
@@ -63,6 +64,8 @@
         defDoc = DefinitionsDocument.Factory.parse(stream);
         tt = defDoc.getDefinitions().getTypesArray(0);
         schema = new Schema(tt);
+        services = defDoc.getDefinitions().getServiceArray();
+                
     }
     /**
      * @return Returns the schema.
@@ -73,7 +76,6 @@
     
     public String getSoapAddressLocation() throws IllegalAccessException {
         String location = null;
-         TService[] services = defDoc.getDefinitions().getServiceArray();
         if (services.length > 0) {
             TPort port = services[0].getPortArray(0);
             if(null != port) {
@@ -89,5 +91,8 @@
         }
          return location;
     }
+       
+       
+
 
 }

Modified: 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
--- 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java
 (original)
+++ 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java
 Wed Apr 27 11:40:21 2005
@@ -26,6 +26,7 @@
 import java.io.Writer;
 import java.util.Properties;
 
+
 import org.apache.beehive.wsm.model.BeehiveWsTypeMetadata;
 import org.apache.beehive.wsm.model.wsdl.XmlBeanWSDLProcessor;
 import org.apache.velocity.Template;
@@ -98,8 +99,16 @@
                        String baseSrcDir) throws Exception {
 
                InputStream wsdl = new FileInputStream(wsdlFileName);
-               WSDLProcessor processor = new XmlBeanWSDLProcessor();
-               BeehiveWsTypeMetadata om = processor.createObjectModel(wsdl);
+               XmlBeanWSDLProcessor processor = new XmlBeanWSDLProcessor(wsdl);
+
+               
+               BeehiveWsTypeMetadata om = null;  
+               
+               //TODO:  Move this class to the axis package and uncomment the 
following two lines.
+               //SystemTypeLookupService lookupService = new 
SystemTypeLookupService();
+               //processor.getObjectModel(lookupService);
+               
+               
                String className = om.getWsName();
                String packageName = "web"; // Later see if the target name 
service is
                                            // better option
@@ -127,8 +136,10 @@
        public void generateAnnotatedJavaFromWSDL(InputStream wsdl, Writer w)
                        throws Exception {
 
-               WSDLProcessor processor = new XmlBeanWSDLProcessor();
-               BeehiveWsTypeMetadata om = processor.createObjectModel(wsdl);
+               XmlBeanWSDLProcessor processor = new XmlBeanWSDLProcessor(wsdl);
+               BeehiveWsTypeMetadata om = null;
+//       TODO THIS NEED TO BE FIXED.  THE PROBLEM IS THAT THE LOOK UP NEED 
+//      AXISLOOK UP AND THIS PACKAGE INS IN NON_AXIS!  om = 
processor.getObjectModel();
                generateAnnotatedJavaFromOM(om, w);
        }
 


Reply via email to