You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by cs...@apache.org on 2006/01/23 17:26:17 UTC

svn commit: r371574 - in /beehive/trunk/system-controls: src/webservice/control/org/apache/beehive/controls/system/webservice/generator/ src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/ src/webservice/control/org/apache/beeh...

Author: cschoett
Date: Mon Jan 23 08:25:59 2006
New Revision: 371574

URL: http://svn.apache.org/viewcvs?rev=371574&view=rev
Log:
Added serialization test to wsc drt, also some cleanup done on typemapping from this weekend.

Added:
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/GenericHolder.java   (with props)
    beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/WscSerializationTest.java   (with props)
Modified:
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/ParameterInfo.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/TypeRegistrar.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java
    beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisCall.java
    beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java
    beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/holders/HolderUtilsTest.java
    beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitBareWsdlTest.java
    beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitWrapWsdlTest.java
    beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromRpcLitWsdlTest.java
    beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/doclitwrapped/pojo/HeaderObjectDocLitEndpointTest.java
    beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpcenc/axisgen/HeaderObjectRpcEncEndpointTest.java
    beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpclit/pojo/HeaderObjectRpcLitEndpointTest.java

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/ParameterInfo.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/ParameterInfo.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/ParameterInfo.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/ParameterInfo.java Mon Jan 23 08:25:59 2006
@@ -18,6 +18,8 @@
 
 package org.apache.beehive.controls.system.webservice.generator;
 
+import org.apache.beehive.controls.system.webservice.utils.HolderUtils;
+
 import javax.xml.namespace.QName;
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -85,47 +87,11 @@
      */
     private String resolveParameterType(String typeName, ParamMode paramMode) {
         if (paramMode == ParamMode.INOUT || paramMode == ParamMode.OUT)
-            return getHolderForType(typeName);
+            return HolderUtils.getHolderForClass(typeName);
         else {
             if (typeName.startsWith("java.lang."))
                 typeName = typeName.substring(typeName.lastIndexOf('.')+1);
             return typeName;
         }
-    }
-
-    /**
-     * Find the holder type for a parameter with a mode of OUT or INOUT.
-     * @param typeName the class name of the parameter
-     * @return A String containing the fully qualified holder class name.
-     */
-    private String getHolderForType(String typeName) {
-        /* todo: arbitrary array support */
-        if (typeName.equals(int.class.getName()))
-            return "javax.xml.rpc.holders.IntHolder";
-        else if (typeName.equals(boolean.class.getName()))
-            return "javax.xml.rpc.holders.BooleanHolder";
-        else if (typeName.equals("[B"))
-            return "javax.xml.rpc.holders.ByteArrayHolder";
-        else if (typeName.equals(byte.class.getName()))
-            return "javax.xml.rpc.holders.ByteHolder";
-        else if (typeName.equals(double.class.getName()))
-            return "javax.xml.rpc.holders.DoubleHolder";
-        else if (typeName.equals(float.class.getName()))
-            return "javax.xml.rpc.holders.FloatHolder";
-        else if (typeName.equals(long.class.getName()))
-            return "javax.xml.rpc.holders.LongHolder";
-        else if (typeName.equals(short.class.getName()))
-            return "javax.xml.rpc.holders.ShortHolder";
-        else if (typeName.equals(String.class.getName()))
-            return "javax.xml.rpc.holders.StringHolder";
-        else if (typeName.equals(BigDecimal.class.getName()))
-            return "javax.xml.rpc.holders.BigDecimalHolder";
-        else if (typeName.equals(BigInteger.class.getName()))
-            return "javax.xml.rpc.holders.BigIntegerHolder";
-        else if (typeName.equals(Calendar.class.getName()))
-            return "javax.xml.rpc.holders.CalendarHolder";
-        else if (typeName.equals(QName.class.getName()))
-            return "javax.xml.rpc.holders.QNameHolder";
-        else return "org.apache.beehive.wsm.util.GenericHolder<" + typeName + ">";
     }
 }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java Mon Jan 23 08:25:59 2006
@@ -21,6 +21,7 @@
 import javax.xml.namespace.QName;
 import javax.xml.rpc.Call;
 import javax.xml.rpc.holders.Holder;
+import javax.jws.soap.SOAPBinding;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
@@ -67,6 +68,11 @@
     protected Call _call;
 
     /**
+     * Type registrar, set by concrete implementation of this class.
+     */
+    protected TypeRegistrar _typeRegistrar;
+
+    /**
      * Wsdl operation object model this call was configured with.
      */
     private WsdlOperation _op;
@@ -169,18 +175,6 @@
                                      WsdlOperation.SOAPBindingStyle style, WsdlOperation.SOAPBindingUse use);
 
     /**
-     * Register a type.
-     *
-     * @param typeClass Class of type to register.
-     * @param xmlName   XML type of class to register.
-     * @param style     SOAPBinding style.
-     * @param use       SOAPBinding use.
-     * @return QName of the registered type.
-     */
-    abstract protected QName registerType(Class typeClass, QName xmlName,
-                                          WsdlOperation.SOAPBindingStyle style, WsdlOperation.SOAPBindingUse use);
-
-    /**
      * Set the service port name for the call (abstract).  May be necessary to support JAX-RPC handlers.
      *
      * @param portQName QName of the service port.
@@ -190,6 +184,31 @@
     /* -----------------------------   Protected Methods ------------------------- */
 
     /**
+     * Register a type.
+     *
+     * @param typeClass
+     * @param xmlName
+     * @param style
+     * @param use
+     * @return QName
+     */
+    protected QName registerType(Class typeClass,
+                                 QName xmlName,
+                                 WsdlOperation.SOAPBindingStyle style,
+                                 WsdlOperation.SOAPBindingUse use) {
+        if (_typeRegistrar == null) {
+            throw new RuntimeException("TypeRegistrar was not initialized correctly.");
+        }
+
+        SOAPBinding.Style jaxrpcStyle =
+                (style == WsdlOperation.SOAPBindingStyle.DOCUMENT) ? SOAPBinding.Style.DOCUMENT : SOAPBinding.Style.RPC;
+        SOAPBinding.Use jaxrpcUse =
+                (use == WsdlOperation.SOAPBindingUse.LITERAL) ? SOAPBinding.Use.LITERAL : SOAPBinding.Use.ENCODED;
+
+        return _typeRegistrar.registerType(typeClass, xmlName, jaxrpcStyle, jaxrpcUse);
+    }
+
+    /**
      * Mark this call as a oneway call (no return value).  See JSR181 specification for details.
      *
      * @param isOneWay true if one way.
@@ -283,13 +302,15 @@
         return pList.toArray();
     }
 
+    /* -----------------------------   Private Methods ------------------------- */
+
     /**
      * After a Call has been invoked it is necessary to map values for OUT and INOUT mode parameters back
      * into their Holders from the arg list to the Call.
      *
      * @param args The argument list which the Call was invoked with.
      */
-    protected void setHolderValues(Object[] args) {
+    private void setHolderValues(Object[] args) {
         Map outParams = _call.getOutputParams();
         if (outParams.isEmpty()) {
             return;
@@ -320,8 +341,6 @@
         }
     }
 
-    /* -----------------------------   Protected Methods ------------------------- */
-
     /**
      * Set the parameter list for this call.
      *
@@ -354,7 +373,7 @@
 
         WsdlOpParameter.ParameterMode mode = opParam.getMode();
         if (mode != WsdlOpParameter.ParameterMode.IN && Holder.class.isAssignableFrom(javaType)) {
-            javaType = TypeRegistrar.getHoldersValueClass(genericType);
+            javaType = HolderUtils.getHoldersValueClass(genericType);
         }
 
         QName registeredTypeQName = registerType(javaType, opParam.getXmlType(),

Added: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/GenericHolder.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/GenericHolder.java?rev=371574&view=auto
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/GenericHolder.java (added)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/GenericHolder.java Mon Jan 23 08:25:59 2006
@@ -0,0 +1,42 @@
+/*
+ * 
+ * Copyright 2001-2004 The Apache Software Foundation.
+ * 
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * 
+ */
+package org.apache.beehive.controls.system.webservice.utils;
+
+import javax.xml.rpc.holders.Holder;
+
+/**
+ * Class that supports holding a value of some generic type.
+ */
+public class GenericHolder<T>
+    implements Holder {
+
+    public T value;
+
+    // The blank constructore is made private so that the value is always set in the holder.  The type of the value
+    // is used by the service control to determine the type of class conversion it would need to stuff value to the
+    // holder from the soap message result.    The only way I have been able to get the type of the Value is by
+    // looking at its class, which requires that  for the value class to have been instantiated.
+    private GenericHolder() {
+    }
+
+    public GenericHolder(T value) {
+        this.value = value;
+    }
+}

Propchange: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/GenericHolder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java Mon Jan 23 08:25:59 2006
@@ -18,21 +18,65 @@
 package org.apache.beehive.controls.system.webservice.utils;
 
 import javax.xml.rpc.holders.Holder;
+import javax.xml.namespace.QName;
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
+import java.lang.reflect.Type;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.GenericArrayType;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Map;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 /**
  * Utilities for moving values into and out of jaxrpc Holders.
  */
 public class HolderUtils {
 
+    private static Map<String, String> _holderMappings;
+    static {
+        _holderMappings = new HashMap<String, String>();
+        _holderMappings.put(BigDecimal.class.getName(), "javax.xml.rpc.holders.BigDecimalHolder");
+        _holderMappings.put(BigInteger.class.getName(), "javax.xml.rpc.holders.BigIntegerHolder");
+        _holderMappings.put(boolean.class.getName(), "javax.xml.rpc.holders.BooleanHolder");
+        _holderMappings.put(Boolean.class.getName(), "javax.xml.rpc.holders.BooleanWrapperHolder");
+        _holderMappings.put(byte.class.getName(), "javax.xml.rpc.holders.ByteHolder");
+        _holderMappings.put(Byte.class.getName(), "javax.xml.rpc.holders.ByteWrapperHolder");
+        _holderMappings.put(Calendar.class.getName(), "javax.xml.rpc.holders.CalendarHolder");
+        _holderMappings.put(double.class.getName(), "javax.xml.rpc.holders.DoubleHolder");
+        _holderMappings.put(Double.class.getName(), "javax.xml.rpc.holders.DoubleWrapperHolder");
+        _holderMappings.put(float.class.getName(), "javax.xml.rpc.holders.FloatHolder");
+        _holderMappings.put(Float.class.getName(), "javax.xml.rpc.holders.FloatWrapperHolder");
+        _holderMappings.put(Integer.class.getName(), "javax.xml.rpc.holders.IntegerWrapperHolder");
+        _holderMappings.put(int.class.getName(),  "javax.xml.rpc.holders.IntHolder");
+        _holderMappings.put(long.class.getName(), "javax.xml.rpc.holders.LongHolder");
+        _holderMappings.put(Long.class.getName(), "javax.xml.rpc.holders.LongWrapperHolder");
+        _holderMappings.put(QName.class.getName(), "javax.xml.rpc.holders.QNameHolder");
+        _holderMappings.put(short.class.getName(), "javax.xml.rpc.holders.ShortHolder");
+        _holderMappings.put(Short.class.getName(),  "javax.xml.rpc.holders.ShortWrapperHolder");
+        _holderMappings.put(String.class.getName(), "javax.xml.rpc.holders.StringHolder");
+    }
+
+    /**
+     * Attempt to map a class name to a jax-rpc holder type.  If a match cannot be found map
+     * to the GenericHolder class.
+     * @param className Name of class.
+     * @return String
+     */
+    public static String getHolderForClass(String className) {
+        if (_holderMappings.containsKey(className)) {
+            return _holderMappings.get(className);
+        }
+        else {
+            return "org.apache.beehive.controls.system.webservice.utils.GenericHolder<" + className + ">";
+        }
+    }
+
     /**
      * Stuff a value into a holder class.
      *
@@ -62,6 +106,49 @@
 
         Object convertedValue = convertToHolderType(value, classOfValueFieldInHolder);
         setFieldInObject(valueField, holder, convertedValue);
+    }
+
+    /**
+     * Type the class of the Holder's value field.
+     *
+     * @param t Holder type.
+     * @return Class of the holder's value field.
+     */
+    public static 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 {
+                    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)) {
+                Field[] publicFields = ((Class) t).getFields();
+                for (int i = 0; i < publicFields.length; i++) {
+                    if (publicFields[i].getName().equals("value")) {
+                        return publicFields[i].getType();
+                    }
+                }
+            }
+            else {
+                throw new RuntimeException("Invalid class.  Type: " + t + " is not a holder.");
+            }
+        }
+        return res;
     }
 
     /**

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/TypeRegistrar.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/TypeRegistrar.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/TypeRegistrar.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/TypeRegistrar.java Mon Jan 23 08:25:59 2006
@@ -19,219 +19,146 @@
  */
 package org.apache.beehive.controls.system.webservice.utils;
 
-import java.io.File;
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.rmi.Remote;
+import org.apache.beehive.wsm.databinding.BindingLookupStrategy;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import javax.jws.soap.SOAPBinding;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.encoding.TypeMapping;
 import javax.xml.rpc.encoding.XMLType;
-import javax.xml.rpc.holders.Holder;
-
-import org.apache.beehive.wsm.databinding.BindingLookupStrategy;
-import org.apache.beehive.wsm.util.GenericHolder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import java.io.File;
+import java.rmi.Remote;
 
+/**
+ * Abstract base class for registering types with underlying JAX-RPC client implementation.
+ */
 public abstract class TypeRegistrar {
 
-    private static Log LOGGER = LogFactory.getLog(TypeRegistrar.class);
+    private static final Log LOGGER = LogFactory.getLog(TypeRegistrar.class);
+    private static Class XMLOBJECT_CLASS;
+
+    // check to see if xmlbeans is present
+    static {
+        try {
+            XMLOBJECT_CLASS = Class.forName("org.apache.xmlbeans.XmlObject");
+        }
+        catch (ClassNotFoundException e) {
+            // just means xmlbeans is not present at runtime.
+            XMLOBJECT_CLASS = null;
+        }
+    }
 
-    /* todo: need to figure out how to protect these since they're used by subclasses */
-    protected TypeMapping mTypeMapping;
-    protected BindingLookupStrategy _lookupStrategy;
+    protected final TypeMapping _typeMapping;
+    private final BindingLookupStrategy _lookupStrategy;
 
     /**
+     * Create a new TypeRegistrar.
+     *
+     * @param typeMapping
+     * @param lookupStrategy
      */
-    public TypeRegistrar(TypeMapping typeMapping, BindingLookupStrategy lookupStrategy) {
-        super();
-        mTypeMapping = typeMapping;
-        this._lookupStrategy = lookupStrategy;
+    protected TypeRegistrar(TypeMapping typeMapping, BindingLookupStrategy lookupStrategy) {
+        _typeMapping = typeMapping;
+        _lookupStrategy = lookupStrategy;
     }
 
     /**
+     * Register a type.
+     *
+     * @param cls     Class to register.
+     * @param xmlType XmlType of the class.
+     * @param style   Style of the web service.
+     * @param use     Use of the web service.
+     * @return QName of the registered type.
      */
-    public abstract QName getVoidType();
+    public QName registerType(Class cls, QName xmlType, SOAPBinding.Style style, SOAPBinding.Use use) {
 
-    public QName registerType(Class cls, SOAPBinding.Style style, SOAPBinding.Use use) {
-        QName q;
-        if(SOAPBinding.Use.ENCODED == use && cls.isArray()) {
-            q = _lookupStrategy.class2qname(cls.getComponentType());
-        }
-        else {
-            q = _lookupStrategy.class2qname(cls);
+        LOGGER.debug("Register class: " + cls.getCanonicalName() + " qName: " + xmlType);
+        if (xmlType == null) {
+            throw new RuntimeException("Invalid registeration request: xmlType is null!");
         }
-        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 (_typeMapping.isRegistered(cls, xmlType)) {
+            return xmlType;
+        }
 
-            QName builtInQName = getBuiltInTypeQname(cls);
-            if(builtInQName != null)
-                return builtInQName;
-
-            if(q == null)
-                throw new RuntimeException("Invalid registeration requestion qname is null");
-
-            if(cls.isArray()) {
-                if (SOAPBinding.Use.ENCODED == use) {
-                    if(!classIsRegistered(cls, q)) {
-                        registerClassAsSoapEncodedArray(cls, q);
-                    }
-                } else {
-                    q = registerType(cls.getComponentType(), q, style, use);
-                   if (SOAPBinding.Style.RPC == style) {
-                       q = XMLType.SOAP_ARRAY;
-                   }
-                }
+        if (cls.isArray()) {
+            if (SOAPBinding.Use.ENCODED == use) {
+                registerAsSoapEncodedArray(cls, xmlType, _lookupStrategy.class2qname(cls.getComponentType()));
+                return xmlType;
             }
-            else if(!classIsRegistered(cls, q)) {
-
-                if(org.apache.xmlbeans.XmlObject.class.isAssignableFrom(cls)) {
-                    registerClassAsXMLBeans(cls, q);
-                }
-                /*
-                 * NOTE jcolwell@bea.com 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) {
-                        e.printStackTrace();
-                    }
-                }
-                /*
-                 * NOTE jcolwell@bea.com 2004-Oct-11 -- java.rmi.Remote is
-                 * prohibited by the jax-rpc spec.
-                 */
-                /*
-                 * NOTE jcolwell@bea.com 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
-                 */
-                else if(!Remote.class.isAssignableFrom(cls) && !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");
+            else {
+                xmlType = registerType(cls.getComponentType(), style, use);
+                if (SOAPBinding.Style.RPC == style) {
+                    xmlType = XMLType.SOAP_ARRAY;
                 }
+                return xmlType;
             }
-            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;
+
+        if (XMLOBJECT_CLASS != null && XMLOBJECT_CLASS.isAssignableFrom(cls)) {
+            registerAsXMLBean(cls, xmlType);
+            return xmlType;
+        }
+        else if (!Remote.class.isAssignableFrom(cls) && !File.class.isAssignableFrom(cls)) {
+            registerWithDefaultSerialization(cls, xmlType, style, use);
+            return xmlType;
+        }
+        else {
+            throw new RuntimeException("failed to register "
+                    + cls.getName()
+                    + " as a valid web service datatype,"
+                    + " consider using a custom type mapping.");
         }
     }
 
     /**
+     * Register a type without knowing the QName of the xmltype.
+     *
+     * @param cls   Class to register.
+     * @param style Service style.
+     * @param use   Service use.
+     * @return QName registered for the class.
      */
-    public static Class getHoldersValueClass(Type t) {
-        Class res = null;
+    protected QName registerType(Class cls, SOAPBinding.Style style, SOAPBinding.Use use) {
 
-        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 res = (Class)typeArgs[0];
-            }
-            else throw new RuntimeException("Invalid parameterized type for holder: " + t);
+        QName q;
+        if (SOAPBinding.Use.ENCODED == use && cls.isArray()) {
+            q = _lookupStrategy.class2qname(cls.getComponentType());
         }
-        else if(t instanceof Class) {
-            if(Holder.class.isAssignableFrom((Class)t)) {
-                Field[] publicFields = ((Class)t).getFields();
-                for(int i = 0; i < publicFields.length; i++) {
-                    if(publicFields[i].getName().equals("value"))
-                        return publicFields[i].getType();
-                }
-            }
-            else throw new RuntimeException("Invalid class.  Type: " + t + " is not a holder.");
+        else {
+            q = _lookupStrategy.class2qname(cls);
         }
-
-        return res;
+        return registerType(cls, q, style, use);
     }
 
     /**
+     * Register a class using the default serialization mechanism of the JAX-RPC client.
+     *
+     * @param cls     Class to register.
+     * @param xmlType Xml type of the class.
+     * @param style   Service style.
+     * @param use     Service use.
      */
-    protected abstract QName getRegisteredQName(Class cls);
-
-    /**
-     */
-    protected abstract void registerClassAsWithDefaultSearialization(Class cls,
-                                                                     QName q,
-                                                                     SOAPBinding.Style style,
-                                                                     SOAPBinding.Use use);
-
-    /**
-     */
-    protected abstract void registerClassAsXMLBeans(Class cls, QName q);
-
-    /**
-     */
-    protected abstract void registerClassAsDataHandler(Class cls, QName q)
-        throws ClassNotFoundException,
-        NoSuchMethodException,
-        InstantiationException,
-        IllegalAccessException,
-        InvocationTargetException;
+    protected abstract void registerWithDefaultSerialization(Class cls, QName xmlType,
+                                                             SOAPBinding.Style style,
+                                                             SOAPBinding.Use use);
 
     /**
+     * Register a class for XmlBean serialization.
+     *
+     * @param cls     Class to register.
+     * @param xmlType Xml type of the class.
      */
-    protected abstract void registerClassAsSoapEncodedArray(Class cls, QName q);
+    protected abstract void registerAsXMLBean(Class cls, QName xmlType);
 
     /**
+     * Register a class as a soap encoded array.
+     *
+     * @param cls           Class to register.
+     * @param xmlType       Xml type of the class.
+     * @param componentType Component type of the array.
      */
-    protected abstract boolean classIsRegistered(Class cls, QName q);
-
-    protected abstract QName getBuiltInTypeQname(Class cls);
-
-    private boolean isActivationEnabled() {
-        return null != getDataHandlerClass() && null != getMultipartClass();
-    }
-
-    private Class getDataHandlerClass() {
-        try {
-            return getClass().getClassLoader().loadClass("javax.activation.DataHandler");
-        }
-        /* ignore: datahandler support will be disabled */
-        catch(ClassNotFoundException e) {}
-        return null;
-    }
-
-    private Class getMultipartClass() {
-        try {
-            return getClass().getClassLoader().loadClass("javax.mail.internet.MimeMultipart");
-        }
-        /* ignore: datahandler support will be disabled */
-        catch(ClassNotFoundException e) {}
-        return null;
-    }
+    protected abstract void registerAsSoapEncodedArray(Class cls, QName xmlType, QName componentType);
 }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java Mon Jan 23 08:25:59 2006
@@ -27,15 +27,16 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.io.Serializable;
 
 /**
  */
-public final class WsdlNamespaceResolver
+public final class WsdlNamespaceResolver implements Serializable
 {
 
-    final private HashSet<String> _elementFormQualifiedNamespaces;
-    final private Map/*<String, String>*/ _prefixMappings;
-    final private String _targetNamespace;
+    private HashSet<String> _elementFormQualifiedNamespaces;
+    private Map/*<String, String>*/ _prefixMappings;
+    private String _targetNamespace;
 
 
     WsdlNamespaceResolver(Definition wsdlDefinition) {

Modified: beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisCall.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisCall.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisCall.java (original)
+++ beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisCall.java Mon Jan 23 08:25:59 2006
@@ -17,7 +17,6 @@
  */
 package org.apache.beehive.controls.system.jaxrpc;
 
-import javax.jws.soap.SOAPBinding;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.ParameterMode;
 import javax.xml.rpc.Service;
@@ -38,7 +37,7 @@
 public final class AxisCall
     extends GenericCall {
 
-    private AxisTypeRegistrar _typeRegistrar;
+    private final BindingLookupStrategy _bindingLookupStrategy;
 
     /**
      * Create a new ScAxisCall instance.
@@ -49,10 +48,10 @@
     public AxisCall(Service service)
         throws ServiceException {
         TypeMapping typeMapping = service.getTypeMappingRegistry().getDefaultTypeMapping();
-        BindingLookupStrategy bindingLookupStrategy = createAxisBindingLookupStrategy();
+        _bindingLookupStrategy = (new AxisBindingLookupFactory()).getInstance();
 
         _call = service.createCall();
-        _typeRegistrar = new AxisTypeRegistrar(typeMapping, bindingLookupStrategy);
+        _typeRegistrar = new AxisTypeRegistrar(typeMapping, _bindingLookupStrategy);
     }
 
     /* -----------------------------   Protected Methods ------------------------- */
@@ -72,9 +71,7 @@
                             WsdlOperation.SOAPBindingStyle style,
                             WsdlOperation.SOAPBindingUse use) {
 
-        BindingLookupStrategy bindingLookupStrategy = createAxisBindingLookupStrategy();
-        Class javaType = bindingLookupStrategy.qname2class(xmlType);
-
+        Class javaType = _bindingLookupStrategy.qname2class(xmlType);
         QName registeredTypeQName = registerType(javaType, xmlType, style, use);
         ((org.apache.axis.client.Call) _call).addFault(faultName, javaType, registeredTypeQName, isComplexType);
     }
@@ -88,41 +85,27 @@
      * @param mode       Mode of the parameter.
      * @param isHeader   True if this parameter should be placed in the header of the SOAP message.
      */
-    protected void addParameter(QName paramName, Class paramClass, QName xmlType, WsdlOpParameter.ParameterMode mode, boolean isHeader) {
+    protected void addParameter(QName paramName, Class paramClass, QName xmlType,
+                                WsdlOpParameter.ParameterMode mode, boolean isHeader) {
 
         ParameterMode jaxrpcMode;
-        if (mode == WsdlOpParameter.ParameterMode.IN)
+        if (mode == WsdlOpParameter.ParameterMode.IN) {
             jaxrpcMode = ParameterMode.IN;
-        else if (mode == WsdlOpParameter.ParameterMode.INOUT)
+        }
+        else if (mode == WsdlOpParameter.ParameterMode.INOUT) {
             jaxrpcMode = ParameterMode.INOUT;
-        else
+        }
+        else {
             jaxrpcMode = ParameterMode.OUT;
+        }
 
         org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)_call;
-        if (isHeader)
+        if (isHeader) {
             axisCall.addParameterAsHeader(paramName, xmlType, paramClass, jaxrpcMode, jaxrpcMode);
-        else axisCall.addParameter(paramName, xmlType, paramClass, jaxrpcMode);
-    }
-
-    /**
-     * Register a type.
-     *
-     * @param typeClass
-     * @param xmlName
-     * @param style
-     * @param use
-     * @return QName
-     */
-    protected QName registerType(Class typeClass,
-                                 QName xmlName,
-                                 WsdlOperation.SOAPBindingStyle style,
-                                 WsdlOperation.SOAPBindingUse use) {
-        SOAPBinding.Style jaxrpcStyle =
-                (style == WsdlOperation.SOAPBindingStyle.DOCUMENT) ? SOAPBinding.Style.DOCUMENT : SOAPBinding.Style.RPC;
-        SOAPBinding.Use jaxrpcUse =
-                (use == WsdlOperation.SOAPBindingUse.LITERAL) ? SOAPBinding.Use.LITERAL : SOAPBinding.Use.ENCODED;
-
-        return _typeRegistrar.registerType(typeClass, xmlName, jaxrpcStyle, jaxrpcUse);
+        }
+        else {
+            axisCall.addParameter(paramName, xmlType, paramClass, jaxrpcMode);
+        }
     }
 
     /**
@@ -149,9 +132,12 @@
      * @param xmlReturnType Xml return type.
      */
     protected void setReturnType(Class returnType, QName xmlReturnType) {
-        if (!_isOneWay && returnType != void.class)
+        if (!_isOneWay && returnType != void.class) {
             super.setReturnType(returnType, xmlReturnType);
-        else _call.setReturnType(XMLType.AXIS_VOID);
+        }
+        else {
+            _call.setReturnType(XMLType.AXIS_VOID);
+        }
     }
 
     /**
@@ -161,9 +147,5 @@
      */
     protected void setServicePortName(QName portQName) {
         _call.setProperty(org.apache.axis.client.Call.WSDL_PORT_NAME, portQName);
-    }
-
-    private BindingLookupStrategy createAxisBindingLookupStrategy() {
-        return (new AxisBindingLookupFactory()).getInstance();
     }
 }

Modified: beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java (original)
+++ beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java Mon Jan 23 08:25:59 2006
@@ -15,20 +15,7 @@
  */
 package org.apache.beehive.controls.system.jaxrpc;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Collection;
-import java.util.Map;
-import javax.jws.soap.SOAPBinding;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.encoding.TypeMapping;
-
-import org.apache.axis.description.ElementDesc;
-import org.apache.axis.description.FieldDesc;
 import org.apache.axis.description.TypeDesc;
-import org.apache.axis.encoding.DeserializerFactory;
-import org.apache.axis.encoding.SerializerFactory;
-import org.apache.axis.encoding.XMLType;
 import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
 import org.apache.axis.encoding.ser.ArraySerializerFactory;
 import org.apache.axis.encoding.ser.BeanDeserializerFactory;
@@ -37,149 +24,85 @@
 import org.apache.beehive.controls.system.webservice.utils.TypeRegistrar;
 import org.apache.beehive.wsm.axis.util.encoding.XmlBeanDeserializerFactory;
 import org.apache.beehive.wsm.axis.util.encoding.XmlBeanSerializerFactory;
-import org.apache.beehive.wsm.axis.registration.AxisTypeMappingMetaData;
 import org.apache.beehive.wsm.databinding.BindingLookupStrategy;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import javax.jws.soap.SOAPBinding;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.encoding.TypeMapping;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Axis client implementation of type registrar.
+ */
 public class AxisTypeRegistrar
-    extends TypeRegistrar {
+        extends TypeRegistrar {
 
     private static Log LOGGER = LogFactory.getLog(AxisTypeRegistrar.class);
 
+    /**
+     * Create a new AxisTypeRegistrar.
+     *
+     * @param tm             A JAX-RPC type mapping instance.
+     * @param lookupStrategy Lookup strategy for mapping java -> xml types.
+     */
     public AxisTypeRegistrar(TypeMapping tm, BindingLookupStrategy lookupStrategy) {
         super(tm, lookupStrategy);
     }
 
-    public QName getVoidType() {
-        return XMLType.AXIS_VOID;
-    }
-
-    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);
-            TypeDesc td = TypeDesc.getTypeDescForClass(cls);
-            // a class can provide its own 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)
-                    && (supa != java.lang.Exception.class)
-                    && (supa != java.lang.Throwable.class)
-                    && (supa != java.rmi.RemoteException.class)
-                    && (supa != org.apache.axis.AxisFault.class)) {
-
-                    registerType(supa, style, use);
-                    superTd = TypeDesc.getTypeDescForClass(supa);
-                    if(superTd != null) {
-                        superPd = superTd.getPropertyDescriptors();
-                    }
-                }
-                td.setXmlType(q);
-                TypeDesc.registerTypeDescForClass(cls, td);
-            }
-            mTypeMapping.register(cls, q, new BeanSerializerFactory(cls, q),
-                                  /*
-                                  * NOTE jcolwell@bea.com 2004-Oct-11 -- should check that the type
-                                  * to deserialize has a default contructor but with this setup there
-                                  * is no way to know if it is used only in serialization.
-                                  */
-                                  new BeanDeserializerFactory(cls, q));
-
-            Map serProps = BeanDeserializerFactory.getProperties(cls, null);
-            for(BeanPropertyDescriptor beanProps : (Collection<BeanPropertyDescriptor>)serProps.values()) {
-                Class subType = beanProps.getType();
-                if(!(subType.isPrimitive()
-                    || subType.getName().startsWith("java.")
-                    || subType.getName().startsWith("javax."))) {
-                    registerType(subType, style, use);
-                }
-                if(shoudRegisterFields) {
-                    String ns = q.getNamespaceURI();
-                    if(superTd != null && superPd != null) {
-                        for(int j = 0; j < superPd.length; j++) {
-                            if(beanProps.getName()
-                                .equals(superPd[j].getName())) {
-                                ns = superTd.getXmlType().getNamespaceURI();
-                                break;
-                            }
-                        }
-                    }
-                    FieldDesc fd = new ElementDesc();
-                    fd.setJavaType(subType);
-                    fd.setFieldName(beanProps.getName());
-                    fd.setXmlName(new QName(ns, beanProps.getName()));
-                    // NOTE jcolwell@bea.com 2004-Oct-28 -- might
-                    // need
-                    // to do more to ensure a useful type QName.
-                    fd.setXmlType(getRegisteredQName(subType));
-                    ((ElementDesc)fd).setNillable(true);
-                    // mmerz@apache.com 2005-Mar-09: required since Axis 1.2RC3
-                    // to allow for null values in complex objects; note that
-                    // there is no (JSR-181) annotation that allows configuring
-                    // this value.
-
-                    td.addFieldDesc(fd);
-                }
-            }
-        }
-        catch(RuntimeException e) {
-            LOGGER.error("Error in registering class: " + cls.getCanonicalName() + " qname:" + q);
-            e.printStackTrace();
-            throw e;
+    /**
+     * Register a type with default serialization, in the case of AXIS this would be the BeanSerializer.
+     *
+     * @param cls Class to register.
+     * @param xmlType Xml name of the class.
+     * @param style Style of the service.
+     * @param use Use of the service.
+     */
+    protected void registerWithDefaultSerialization(Class cls, QName xmlType,
+                                                    SOAPBinding.Style style, SOAPBinding.Use use) {
+
+        LOGGER.debug("Assigned Default Serialization to  class: " + cls.getCanonicalName() + " qname:" + xmlType);
+
+        _typeMapping.register(cls, xmlType,
+                              new BeanSerializerFactory(cls, xmlType),
+                              new BeanDeserializerFactory(cls, xmlType));
+
+        Map classProperties = BeanDeserializerFactory.getProperties(cls, TypeDesc.getTypeDescForClass(cls));
+        Collection beanPropertyDescriptors = classProperties.values();
+        for (Object o : beanPropertyDescriptors) {
+            registerType(((BeanPropertyDescriptor) o).getType(), style, use);
         }
     }
 
-    protected void registerClassAsXMLBeans(Class cls, QName q) {
-        LOGGER.debug("Assigned XMLBeans Serialization to  class: " + cls.getCanonicalName() + " qname:" + q);
-        // todo: the XmlBeanSerializerFactory is available in Axis 1.2.1:1
-        mTypeMapping.register(cls, q, new XmlBeanSerializerFactory(cls, q), new XmlBeanDeserializerFactory(cls, q));
-    }
-
-    protected void registerClassAsDataHandler(Class cls, QName q)
-        throws ClassNotFoundException, NoSuchMethodException,
-        InstantiationException, IllegalAccessException,
-        InvocationTargetException {
-        LOGGER.debug("Assigned DataHandler to  class: " + cls.getCanonicalName() + " qname:" + q);
-        /*
-         * NOTE jcolwell@bea.com 2004-Oct-08 -- doing reflection here in case
-         * AXIS was built without attachment support.
-         */
-        ClassLoader cl = getClass().getClassLoader();
-        Class<SerializerFactory> sfClass =
-            (Class<SerializerFactory>)cl.loadClass("org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory");
-        Class<DeserializerFactory> dsfClass =
-            (Class<DeserializerFactory>)cl.loadClass("org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory");
-        Constructor<SerializerFactory> sfCon = sfClass.getConstructor(Class.class, QName.class);
-        Constructor<DeserializerFactory> dsfCon = dsfClass.getConstructor(Class.class, QName.class);
-        SerializerFactory sf = sfCon.newInstance(cls, q);
-        DeserializerFactory dsf = dsfCon.newInstance(cls, q);
-        mTypeMapping.register(cls, q, sf, dsf);
-    }
-
-    protected void registerClassAsSoapEncodedArray(Class cls, QName q) {
-        LOGGER.debug("Assigned Array Serialization to  class: " + cls.getCanonicalName()
-            + " qname:" + q + " Array element qname: " + _lookupStrategy.class2qname(cls.getComponentType()));
+    /**
+     * Register a type as an XmlBean.
+     * @param cls Class to register.
+     * @param xmlType Xml name of the class.
+     */
+    protected void registerAsXMLBean(Class cls, QName xmlType) {
+
+        // todo: the XmlBeanSerializerFactory is available in Axis 1.2.1
+        LOGGER.debug("Assigned XMLBeans Serialization to  class: " + cls.getCanonicalName() + " qname:" + xmlType);
+        _typeMapping.register(cls, xmlType,
+                              new XmlBeanSerializerFactory(cls, xmlType),
+                              new XmlBeanDeserializerFactory(cls, xmlType));
+    }
+
+    /**
+     * Register a type as a SOAP encoded array.
+     * @param cls Class to register.
+     * @param xmlType Xml name of the class.
+     * @param componentType Component type of the array.
+     */
+    protected void registerAsSoapEncodedArray(Class cls, QName xmlType, QName componentType) {
+        LOGGER.debug("Assigned Array Serialization to  class: "  + cls.getCanonicalName()
+                + " qname:"  + xmlType
+                + " Array element qname: "  + componentType);
 
-        mTypeMapping.register(cls, q, new ArraySerializerFactory(_lookupStrategy.class2qname(cls.getComponentType())),
+        _typeMapping.register(cls, xmlType,
+                              new ArraySerializerFactory(componentType),
                               new ArrayDeserializerFactory());
-    }
-
-    protected boolean classIsRegistered(Class cls, QName q) {
-        return mTypeMapping.isRegistered(cls, q);
-    }
-
-    protected QName getRegisteredQName(Class cls) {
-        QName currentQName = ((org.apache.axis.encoding.TypeMapping)mTypeMapping).getTypeQName(cls);
-        return currentQName;
-    }
-
-    protected QName getBuiltInTypeQname(Class cls) {
-        return AxisTypeMappingMetaData.getBuiltInTypeQname(cls);
     }
 }

Modified: beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/holders/HolderUtilsTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/holders/HolderUtilsTest.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/holders/HolderUtilsTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/holders/HolderUtilsTest.java Mon Jan 23 08:25:59 2006
@@ -21,7 +21,7 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 import org.apache.beehive.controls.system.webservice.utils.HolderUtils;
-import org.apache.beehive.wsm.util.GenericHolder;
+import org.apache.beehive.controls.system.webservice.utils.GenericHolder;
 
 import javax.xml.rpc.holders.IntHolder;
 import javax.xml.rpc.holders.BigDecimalHolder;
@@ -39,7 +39,7 @@
         HolderUtils.stuffHolderValue(ih, null);
         assertEquals(0, ih.value);
 
-        HolderUtils.stuffHolderValue(ih, new Integer(8));
+        HolderUtils.stuffHolderValue(ih, 8);
         assertEquals(8, ih.value);
 
         HolderUtils.stuffHolderValue(ih, 9);
@@ -51,11 +51,11 @@
         HolderUtils.stuffHolderValue(ih, null);
         assertNull(ih.value);
 
-        HolderUtils.stuffHolderValue(ih, new Integer(5));
-        assertEquals(5, ih.value.intValue());
+        HolderUtils.stuffHolderValue(ih, 5);
+        assertEquals(5, (int)ih.value);
 
         HolderUtils.stuffHolderValue(ih, 4);
-        assertEquals(4, ih.value.intValue());
+        assertEquals(4, (int)ih.value);
     }
 
     public void testStuffBigDecimalHolder() throws Exception {

Modified: beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitBareWsdlTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitBareWsdlTest.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitBareWsdlTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitBareWsdlTest.java Mon Jan 23 08:25:59 2006
@@ -23,7 +23,7 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 import org.apache.beehive.controls.system.webservice.ServiceControl;
-import org.apache.beehive.wsm.util.GenericHolder;
+import org.apache.beehive.controls.system.webservice.utils.GenericHolder;
 
 /**
  * Test wsc generation from a doc/lit/bar web service wsdl.

Modified: beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitWrapWsdlTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitWrapWsdlTest.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitWrapWsdlTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromDocLitWrapWsdlTest.java Mon Jan 23 08:25:59 2006
@@ -20,8 +20,7 @@
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
-import org.apache.beehive.controls.system.webservice.ServiceControl;
-import org.apache.beehive.wsm.util.GenericHolder;
+import org.apache.beehive.controls.system.webservice.utils.GenericHolder;
 
 import javax.xml.rpc.holders.IntHolder;
 import java.lang.reflect.Method;

Modified: beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromRpcLitWsdlTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromRpcLitWsdlTest.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromRpcLitWsdlTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/junit/src/org/apache/beehive/controls/system/webservice/tests/wscgen/WscGenFromRpcLitWsdlTest.java Mon Jan 23 08:25:59 2006
@@ -19,8 +19,7 @@
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
-import org.apache.beehive.controls.system.webservice.ServiceControl;
-import org.apache.beehive.wsm.util.GenericHolder;
+import org.apache.beehive.controls.system.webservice.utils.GenericHolder;
 
 import java.lang.reflect.Method;
 

Added: beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/WscSerializationTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/WscSerializationTest.java?rev=371574&view=auto
==============================================================================
--- beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/WscSerializationTest.java (added)
+++ beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/WscSerializationTest.java Mon Jan 23 08:25:59 2006
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.beehive.controls.system.webservice.units;
+
+import java.io.ObjectOutputStream;
+import java.io.FileOutputStream;
+import java.io.ObjectInputStream;
+import java.io.FileInputStream;
+import java.io.File;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.context.ControlContainerContext;
+import org.apache.beehive.controls.test.junit.ControlTestCase;
+import org.apache.beehive.controls.test.container.ControlTestContainerContext;
+
+/**
+ * Serialization test for the WSC.  Serialize and deserialize a wsc and make sure
+ * it still functions.
+ */
+public class WscSerializationTest
+    extends ControlTestCase {
+
+    @Control
+    public schematypestest.SoapMarshallingDocLitWrappedService _client;
+
+    public void setUp() {
+       // intentially not calling super()
+    }
+
+    public void tearDown() {
+        // intentially not calling super()
+    }
+
+    /**
+     * Echo boolean.
+     * @throws Exception
+     */
+    public void testSerialization() throws Exception {
+
+        //
+        // start the context
+        //
+        getControlContainerContextManager().beginContext();
+
+        initializeControls();
+        assertNotNull(_client);
+
+        assertEquals(6, _client.echoint(6));
+
+        ControlContainerContext ccc = getControlContainerContext();
+
+        //
+        // end the context
+        //
+        getControlContainerContextManager().endContext();
+
+        //
+        // serialize the wsc
+        //
+        File serFile = File.createTempFile("wsc", "ser");
+        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(serFile));
+        ControlTestContainerContext ctcc = (ControlTestContainerContext)ccc;
+        ctcc.writeChildren(oos);
+        oos.close();
+
+        //
+        // deserialize the ctcc contents
+        //
+        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(serFile));
+        ctcc.readChildren(ois);
+        ois.close();
+        serFile.delete();
+
+        //
+        // find the deserialized instance in the ctcc
+        //
+        Object[] ctrls = ctcc.toArray();
+        schematypestest.SoapMarshallingDocLitWrappedService deserializedControl = null;
+        for (Object c : ctrls) {
+            if (c instanceof schematypestest.SoapMarshallingDocLitWrappedService && !c.equals(_client)) {
+                deserializedControl = (schematypestest.SoapMarshallingDocLitWrappedService)c;
+                break;
+            }
+        }
+
+        //
+        // start the context
+        //
+        getControlContainerContextManager().beginContext();
+
+        assertNotNull(deserializedControl);
+        assertFalse(deserializedControl == _client);
+        assertEquals(7, _client.echoint(7));
+
+        getControlContainerContextManager().endContext();
+    }
+
+    public static Test suite() { return new TestSuite(WscSerializationTest.class); }
+
+    public static void main(String[] args) { junit.textui.TestRunner.run(suite()); }
+}
\ No newline at end of file

Propchange: beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/WscSerializationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/doclitwrapped/pojo/HeaderObjectDocLitEndpointTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/doclitwrapped/pojo/HeaderObjectDocLitEndpointTest.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/doclitwrapped/pojo/HeaderObjectDocLitEndpointTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/doclitwrapped/pojo/HeaderObjectDocLitEndpointTest.java Mon Jan 23 08:25:59 2006
@@ -21,7 +21,7 @@
 import junit.framework.TestSuite;
 import org.apache.beehive.controls.api.bean.Control;
 import org.apache.beehive.controls.test.junit.ControlTestCase;
-import org.apache.beehive.wsm.util.GenericHolder;
+import org.apache.beehive.controls.system.webservice.utils.GenericHolder;
 import header.HeaderAddress;
 
 /**
@@ -43,7 +43,7 @@
         header.HeaderAddress param = new header.HeaderAddress();
         h.setCity("Denver");
 
-        GenericHolder<HeaderAddress> gh = new GenericHolder<header.HeaderAddress>(h);
+        GenericHolder<HeaderAddress> gh = new GenericHolder<HeaderAddress>(h);
         header.HeaderAddress result = client.echoObject(gh, param);
 
         assertEquals(param.getCity(), result.getCity());

Modified: beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpcenc/axisgen/HeaderObjectRpcEncEndpointTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpcenc/axisgen/HeaderObjectRpcEncEndpointTest.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpcenc/axisgen/HeaderObjectRpcEncEndpointTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpcenc/axisgen/HeaderObjectRpcEncEndpointTest.java Mon Jan 23 08:25:59 2006
@@ -21,7 +21,8 @@
 import junit.framework.TestSuite;
 import org.apache.beehive.controls.api.bean.Control;
 import org.apache.beehive.controls.test.junit.ControlTestCase;
-import org.apache.beehive.wsm.util.GenericHolder;
+import org.apache.beehive.controls.system.webservice.utils.GenericHolder;
+import header.HeaderAddressAxisgen;
 
 /**
  * Header tests for rpc/enc services.
@@ -42,7 +43,7 @@
         header.HeaderAddressAxisgen param = new header.HeaderAddressAxisgen();
         h.setCity("Denver");
 
-        GenericHolder<header.HeaderAddressAxisgen> gh = new GenericHolder<header.HeaderAddressAxisgen>(h);
+        GenericHolder<header.HeaderAddressAxisgen> gh = new GenericHolder<HeaderAddressAxisgen>(h);
         header.HeaderAddressAxisgen result = client.echoObject(gh, param);
 
         assertEquals(param.getCity(), result.getCity());

Modified: beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpclit/pojo/HeaderObjectRpcLitEndpointTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpclit/pojo/HeaderObjectRpcLitEndpointTest.java?rev=371574&r1=371573&r2=371574&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpclit/pojo/HeaderObjectRpcLitEndpointTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/webapp/tests/org/apache/beehive/controls/system/webservice/units/rpclit/pojo/HeaderObjectRpcLitEndpointTest.java Mon Jan 23 08:25:59 2006
@@ -21,7 +21,7 @@
 import junit.framework.TestSuite;
 import org.apache.beehive.controls.api.bean.Control;
 import org.apache.beehive.controls.test.junit.ControlTestCase;
-import org.apache.beehive.wsm.util.GenericHolder;
+import org.apache.beehive.controls.system.webservice.utils.GenericHolder;
 import header.HeaderAddress;
 
 /**
@@ -43,7 +43,7 @@
         header.HeaderAddress param = new header.HeaderAddress();
         h.setCity("Denver");
 
-        GenericHolder<HeaderAddress> gh = new GenericHolder<header.HeaderAddress>(h);
+        GenericHolder<HeaderAddress> gh = new GenericHolder<HeaderAddress>(h);
         header.HeaderAddress result = client.echoObject(gh, param);
 
         assertEquals(param.getCity(), result.getCity());