You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by na...@apache.org on 2006/04/25 05:40:39 UTC

svn commit: r396765 - in /webservices/axis/trunk/c/src/cbindings: ./ client/

Author: nadiramra
Date: Mon Apr 24 20:40:37 2006
New Revision: 396765

URL: http://svn.apache.org/viewcvs?rev=396765&view=rev
Log:
C support fixes/enhancements.

Added:
    webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.cpp
    webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.hpp
Modified:
    webservices/axis/trunk/c/src/cbindings/AxisC.cpp
    webservices/axis/trunk/c/src/cbindings/AxisObjectContainer.hpp
    webservices/axis/trunk/c/src/cbindings/BasicNodeC.cpp
    webservices/axis/trunk/c/src/cbindings/IHeaderBlockC.cpp
    webservices/axis/trunk/c/src/cbindings/IWrapperSoapDeSerializerC.cpp
    webservices/axis/trunk/c/src/cbindings/IWrapperSoapSerializerC.cpp
    webservices/axis/trunk/c/src/cbindings/client/CallC.cpp
    webservices/axis/trunk/c/src/cbindings/client/StubC.cpp

Modified: webservices/axis/trunk/c/src/cbindings/AxisC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/AxisC.cpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/AxisC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/AxisC.cpp Mon Apr 24 20:40:37 2006
@@ -24,7 +24,6 @@
 #include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
-#include <axis/AxisUserAPIArrays.h>
 #include <axis/TypeMapping.h>
 
 

Modified: webservices/axis/trunk/c/src/cbindings/AxisObjectContainer.hpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/AxisObjectContainer.hpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/AxisObjectContainer.hpp (original)
+++ webservices/axis/trunk/c/src/cbindings/AxisObjectContainer.hpp Mon Apr 24 20:40:37 2006
@@ -1,6 +1,6 @@
 /*
- *   Copyright 2003-2004 The Apache Software Foundation.
-// (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved
+ *   Copyright 2006-2006 The Apache Software Foundation.
+// (c) Copyright IBM Corp. 2006, 2006 All Rights Reserved
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.

Added: webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.cpp?rev=396765&view=auto
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.cpp (added)
+++ webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.cpp Mon Apr 24 20:40:37 2006
@@ -0,0 +1,422 @@
+/* -*- C++ -*- */
+/*
+ *   Copyright 2006-2006 The Apache Software Foundation.
+// (c) Copyright IBM Corp. 2006, 2006 All Rights Reserved
+ *
+ *   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.
+ *
+ */
+
+#include "AxisObjectConverter.hpp"
+
+AXIS_CPP_NAMESPACE_START
+
+AxiscAnyType *
+AxisObjectConverter::cppAnyTypeToC(AnyType *objAnyType, 
+                                   AxiscAnyType *cAnyType, 
+                                   bool deleteObj)
+{
+    return NULL;
+}
+
+Axisc_Array *
+AxisObjectConverter::cppArrayToC(Axis_Array *objArray, 
+                                 Axisc_Array *cArray, 
+                                 bool deleteObj)
+{    
+    // If nothing to transform, return
+    if (objArray == NULL)
+        return cArray;
+             
+    // Allocate cbinding array and initialize
+    if (cArray == NULL)
+        cArray = (Axisc_Array *)axiscAxisNew(XSDC_ARRAY, 0);
+    
+    // Get object array stuff
+    XSDTYPE m_Type;
+    int     m_Size;
+    void ** m_Array = objArray->get(m_Size, m_Type);
+    
+    cArray->m_Size = m_Size;
+    cArray->m_Type = (AXISC_XSDTYPE)m_Type;
+    
+    // Now generate the array
+    if (m_Array != NULL && m_Size > 0)
+    {
+        cArray->m_Array = new void*[m_Size];
+        
+        for (int count = 0 ; count < m_Size ; count++)
+        {
+            if ( m_Array[count] == NULL)
+            {
+                cArray->m_Array[count] = NULL;
+                continue;
+            }
+    
+            switch (m_Type)
+            {
+                case XSD_DURATION:
+                {
+                    ((xsd__duration**) cArray->m_Array)[count] = new xsd__duration();
+                    *((xsd__duration**)cArray->m_Array)[count] = *((xsd__duration**) m_Array)[count];
+                    break;
+                }
+                case XSD_DATETIME:
+                {
+                    ((xsd__dateTime**) cArray->m_Array)[count] = new xsd__dateTime();
+                    *((xsd__dateTime**)cArray->m_Array)[count] = *((xsd__dateTime**) m_Array)[count];
+                    break;
+                }
+                case XSD_TIME:
+                {
+                    ((xsd__time**) cArray->m_Array)[count] = new xsd__time();
+                    *((xsd__time**)cArray->m_Array)[count] = *((xsd__time**) m_Array)[count];
+                    break;
+                }
+                case XSD_DATE:
+                {
+                    ((xsd__date**) cArray->m_Array)[count] = new xsd__date();
+                    *((xsd__date**)cArray->m_Array)[count] = *((xsd__date**) m_Array)[count];
+                    break;
+                }
+                case XSD_GYEARMONTH:
+                {
+                    ((xsd__gYearMonth**) cArray->m_Array)[count] = new xsd__gYearMonth();
+                    *((xsd__gYearMonth**)cArray->m_Array)[count] = *((xsd__gYearMonth**) m_Array)[count];
+                    break;
+                }           
+                case XSD_GYEAR:
+                {
+                    ((xsd__gYear**) cArray->m_Array)[count] = new xsd__gYear();
+                    *((xsd__gYear**)cArray->m_Array)[count] = *((xsd__gYear**) m_Array)[count];
+                    break;
+                }
+                case XSD_GMONTHDAY:
+                {
+                    ((xsd__gMonthDay**) cArray->m_Array)[count] = new xsd__gMonthDay();
+                    *((xsd__gMonthDay**)cArray->m_Array)[count] = *((xsd__gMonthDay**) m_Array)[count];
+                    break;
+                }
+                case XSD_GDAY:
+                {
+                    ((xsd__gDay**) cArray->m_Array)[count] = new xsd__gDay();
+                    *((xsd__gDay**)cArray->m_Array)[count] = *((xsd__gDay**) m_Array)[count];
+                    break;
+                }
+                case XSD_GMONTH:
+                {
+                    ((xsd__gMonth**) cArray->m_Array)[count] = new xsd__gMonth();
+                    *((xsd__gMonth**)cArray->m_Array)[count] = *((xsd__gMonth**) m_Array)[count];
+                    break;
+                }
+                case XSD_STRING:
+                {
+                    ((xsd__string*) cArray->m_Array)[count] = new char[strlen(((xsd__string*) m_Array)[count])+1];
+                    strcpy(((xsd__string*) cArray->m_Array)[count], ((xsd__string*) m_Array)[count]);
+                    break;
+                }
+                case XSD_NORMALIZEDSTRING:
+                {
+                    ((xsd__normalizedString*) cArray->m_Array)[count] = new char[strlen(((xsd__normalizedString*) m_Array)[count])+1];
+                    strcpy(((xsd__normalizedString*) cArray->m_Array)[count], ((xsd__normalizedString*) m_Array)[count]);
+                    break;
+                }
+                case XSD_TOKEN:
+                {
+                    ((xsd__token*) cArray->m_Array)[count] = new char[strlen(((xsd__token*) m_Array)[count])+1];
+                    strcpy(((xsd__token*) cArray->m_Array)[count], ((xsd__token*) m_Array)[count]);
+                    break;
+                }
+                case XSD_LANGUAGE:
+                {
+                    ((xsd__language*) cArray->m_Array)[count] = new char[strlen(((xsd__language*) m_Array)[count])+1];
+                    strcpy(((xsd__language*) cArray->m_Array)[count], ((xsd__language*) m_Array)[count]);
+                    break;
+                }
+                case XSD_NAME:
+                {
+                    ((xsd__Name*) cArray->m_Array)[count] = new char[strlen(((xsd__Name*) m_Array)[count])+1];
+                    strcpy(((xsd__Name*) cArray->m_Array)[count], ((xsd__Name*) m_Array)[count]);
+                    break;
+                }
+                case XSD_NCNAME:
+                {
+                    ((xsd__NCName*) cArray->m_Array)[count] = new char[strlen(((xsd__NCName*) m_Array)[count])+1];
+                    strcpy(((xsd__NCName*) cArray->m_Array)[count], ((xsd__NCName*) m_Array)[count]);
+                    break;
+                }
+                case XSD_ID:
+                {
+                    ((xsd__ID*) cArray->m_Array)[count] = new char[strlen(((xsd__ID*) m_Array)[count])+1];
+                    strcpy(((xsd__ID*) cArray->m_Array)[count], ((xsd__ID*) m_Array)[count]);
+                    break;
+                }
+                case XSD_IDREF:
+                {
+                    ((xsd__IDREF*) cArray->m_Array)[count] = new char[strlen(((xsd__IDREF*) m_Array)[count])+1];
+                    strcpy(((xsd__IDREF*) cArray->m_Array)[count], ((xsd__IDREF*) m_Array)[count]);
+                    break;
+                }
+                case XSD_IDREFS:
+                {
+                    ((xsd__IDREFS*) cArray->m_Array)[count] = new char[strlen(((xsd__IDREFS*) m_Array)[count])+1];
+                    strcpy(((xsd__IDREFS*) cArray->m_Array)[count], ((xsd__IDREFS*) m_Array)[count]);
+                    break;
+                }
+                case XSD_ENTITY:
+                {
+                    ((xsd__ENTITY*) cArray->m_Array)[count] = new char[strlen(((xsd__ENTITY*) m_Array)[count])+1];
+                    strcpy(((xsd__ENTITY*) cArray->m_Array)[count], ((xsd__ENTITY*) m_Array)[count]);
+                    break;
+                }
+                case XSD_ENTITIES:
+                {
+                    ((xsd__ENTITIES*) cArray->m_Array)[count] = new char[strlen(((xsd__ENTITIES*) m_Array)[count])+1];
+                    strcpy(((xsd__ENTITIES*) cArray->m_Array)[count], ((xsd__ENTITIES*) m_Array)[count]);
+                    break;
+                }
+                case XSD_NMTOKEN:
+                {
+                    ((xsd__NMTOKEN*) cArray->m_Array)[count] = new char[strlen(((xsd__NMTOKEN*) m_Array)[count])+1];
+                    strcpy(((xsd__NMTOKEN*) cArray->m_Array)[count], ((xsd__NMTOKEN*) m_Array)[count]);
+                    break;
+                }
+                case XSD_NMTOKENS:
+                {
+                    ((xsd__NMTOKENS*) cArray->m_Array)[count] = new char[strlen(((xsd__NMTOKENS*) m_Array)[count])+1];
+                    strcpy(((xsd__NMTOKENS*) cArray->m_Array)[count], ((xsd__NMTOKENS*) m_Array)[count]);
+                    break;
+                }
+                case XSD_BOOLEAN:
+                {
+                    ((xsd__boolean**) cArray->m_Array)[count] = new xsd__boolean();
+                    *((xsd__boolean**)cArray->m_Array)[count] = *((xsd__boolean**) m_Array)[count];
+                    break;
+                }
+                case XSD_BASE64BINARY:
+                {
+                    // TODO
+                    ((xsdc__base64Binary**) cArray->m_Array)[count] = new xsdc__base64Binary();
+                    *((xsdc__base64Binary**)cArray->m_Array)[count] = *((xsdc__base64Binary**) m_Array)[count];
+                    break;
+                }
+                case XSD_HEXBINARY:
+                {
+                    // TODO
+                    ((xsdc__hexBinary**) cArray->m_Array)[count] = new xsdc__hexBinary();
+                    *((xsdc__hexBinary**)cArray->m_Array)[count] = *((xsdc__hexBinary**) m_Array)[count];
+                    break;
+                }
+                case XSD_FLOAT:
+                {
+                    ((xsd__float**) cArray->m_Array)[count] = new xsd__float();
+                    *((xsd__float**)cArray->m_Array)[count] = *((xsd__float**) m_Array)[count];
+                    break;
+                }
+                case XSD_DECIMAL:
+                {
+                    ((xsd__decimal**) cArray->m_Array)[count] = new xsd__decimal();
+                    *((xsd__decimal**)cArray->m_Array)[count] = *((xsd__decimal**) m_Array)[count];
+                    break;
+                }
+                case XSD_INTEGER:
+                {
+                    ((xsd__integer**) cArray->m_Array)[count] = new xsd__integer();
+                    *((xsd__integer**)cArray->m_Array)[count] = *((xsd__integer**) m_Array)[count];
+                    break;
+                }
+                case XSD_NONPOSITIVEINTEGER:
+                {
+                    ((xsd__nonPositiveInteger**) cArray->m_Array)[count] = new xsd__nonPositiveInteger();
+                    *((xsd__nonPositiveInteger**)cArray->m_Array)[count] = *((xsd__nonPositiveInteger**) m_Array)[count];
+                    break;
+                }
+                case XSD_NEGATIVEINTEGER:
+                {
+                    ((xsd__negativeInteger**) cArray->m_Array)[count] = new xsd__negativeInteger();
+                    *((xsd__negativeInteger**)cArray->m_Array)[count] = *((xsd__negativeInteger**) m_Array)[count];
+                    break;
+                }
+                case XSD_LONG:
+                {
+                    ((xsd__long**) cArray->m_Array)[count] = new xsd__long();
+                    *((xsd__long**)cArray->m_Array)[count] = *((xsd__long**) m_Array)[count];
+                    break;
+                }
+                case XSD_INT:
+                {
+                    ((xsd__int**) cArray->m_Array)[count] = new xsd__int();
+                    *((xsd__int**)cArray->m_Array)[count] = *((xsd__int**) m_Array)[count];
+                    break;
+                }
+                case XSD_SHORT:
+                {
+                    ((xsd__short**) cArray->m_Array)[count] = new xsd__short();
+                    *((xsd__short**)cArray->m_Array)[count] = *((xsd__short**) m_Array)[count];
+                    break;
+                }
+                case XSD_BYTE:
+                {
+                    ((xsd__byte**) cArray->m_Array)[count] = new xsd__byte();
+                    *((xsd__byte**)cArray->m_Array)[count] = *((xsd__byte**) m_Array)[count];
+                    break;
+                }
+                case XSD_NONNEGATIVEINTEGER:
+                {
+                    ((xsd__nonNegativeInteger**) cArray->m_Array)[count] = new xsd__nonNegativeInteger();
+                    *((xsd__nonNegativeInteger**)cArray->m_Array)[count] = *((xsd__nonNegativeInteger**) m_Array)[count];
+                    break;
+                }
+                case XSD_UNSIGNEDLONG:
+                {
+                    ((xsd__unsignedLong**) cArray->m_Array)[count] = new xsd__unsignedLong();
+                    *((xsd__unsignedLong**)cArray->m_Array)[count] = *((xsd__unsignedLong**) m_Array)[count];
+                    break;
+                }
+                case XSD_UNSIGNEDINT:
+                {
+                    ((xsd__unsignedInt**) cArray->m_Array)[count] = new xsd__unsignedInt();
+                    *((xsd__unsignedInt**)cArray->m_Array)[count] = *((xsd__unsignedInt**) m_Array)[count];
+                    break;
+                }
+                case XSD_UNSIGNEDSHORT:
+                {
+                    ((xsd__unsignedShort**) cArray->m_Array)[count] = new xsd__unsignedShort();
+                    *((xsd__unsignedShort**)cArray->m_Array)[count] = *((xsd__unsignedShort**) m_Array)[count];
+                    break;
+                }
+                case XSD_UNSIGNEDBYTE:
+                {
+                    ((xsd__unsignedByte**) cArray->m_Array)[count] = new xsd__unsignedByte();
+                    *((xsd__unsignedByte**)cArray->m_Array)[count] = *((xsd__unsignedByte**) m_Array)[count];
+                    break;
+                }
+                case XSD_POSITIVEINTEGER:
+                {
+                    ((xsd__positiveInteger**) cArray->m_Array)[count] = new xsd__positiveInteger();
+                    *((xsd__positiveInteger**)cArray->m_Array)[count] = *((xsd__positiveInteger**) m_Array)[count];
+                    break;
+                }
+                case XSD_DOUBLE:
+                {
+                    ((xsd__double**) cArray->m_Array)[count] = new xsd__double();
+                    *((xsd__double**)cArray->m_Array)[count] = *((xsd__double**) m_Array)[count];
+                    break;
+                }
+                case XSD_ANYURI:
+                {
+                    ((xsd__anyURI*) cArray->m_Array)[count] = new char[strlen(((xsd__anyURI*) m_Array)[count])+1];
+                    strcpy(((xsd__anyURI*) cArray->m_Array)[count], ((xsd__anyURI*) m_Array)[count]);
+                    break;
+                }
+                case XSD_QNAME:
+                {
+                    ((xsd__QName*) cArray->m_Array)[count] = new char[strlen(((xsd__QName*) m_Array)[count])+1];
+                    strcpy(((xsd__QName*) cArray->m_Array)[count], ((xsd__QName*) m_Array)[count]);
+                    break;
+                }
+                case XSD_NOTATION:
+                {
+                    ((xsd__NOTATION*) cArray->m_Array)[count] = new char[strlen(((xsd__NOTATION*) m_Array)[count])+1];
+                    strcpy(((xsd__NOTATION*) cArray->m_Array)[count], ((xsd__NOTATION*) m_Array)[count]);
+                    break;
+                }
+                case XSD_ARRAY:
+                {
+                    // TODO
+                    cArray->m_Array[count] = m_Array[count];
+                    break;
+                }
+                case USER_TYPE:
+                {
+                    // TODO
+                    cArray->m_Array[count] = m_Array[count];
+                    break;
+                }
+                case XSD_UNKNOWN:
+                case XSD_ANY:
+                case ATTACHMENT:
+                default:
+                    break;
+            } // end switch
+        } // end for loop
+    }
+    
+    // delete c++ object array if requested to do so before returning
+    if (deleteObj)
+        delete objArray;
+    
+    return cArray;
+}                      
+
+xsdc__base64Binary *
+AxisObjectConverter::cppBase64BinaryToC(xsd__base64Binary *objBase64Bin, 
+                                        xsdc__base64Binary *cBase64Bin, 
+                                        bool deleteObj)
+{
+    // Nothing to transform, return.       
+    if (!objBase64Bin)
+        return (xsdc__base64Binary *)NULL;
+    
+    // Get info from c++ Object
+    int base64BinaryDataSize;
+    xsd__unsignedByte *base64BinaryData = objBase64Bin->get(base64BinaryDataSize);
+                   
+    // Create c-style equivalent object
+    xsdc__base64Binary * pObjC = (xsdc__base64Binary *)axiscAxisNew(XSDC_BASE64BINARY, base64BinaryDataSize);
+    
+    // populate c-style object with data from c++ object
+    if (base64BinaryDataSize > 0)
+    {
+        memcpy(pObjC->__ptr, base64BinaryData, base64BinaryDataSize);
+        pObjC->__ptr[base64BinaryDataSize] = '\0';
+    }
+    
+    // Delete c++ object before returning c object
+    if (deleteObj)
+        delete objBase64Bin;       
+    
+    return pObjC;
+}
+
+xsdc__hexBinary *
+AxisObjectConverter::cppHexBinaryToC(xsd__hexBinary *objHexBin, 
+                                     xsdc__hexBinary *cHexBin, 
+                                     bool deleteObj)
+{
+    // If nothing to transform, return.
+    if (!objHexBin)
+        return (xsdc__hexBinary *)NULL;
+    
+    // Get info from c++ Object
+    int hexDataSize;
+    xsd__unsignedByte *hexData = objHexBin->get(hexDataSize);
+                   
+    // Create c-style equivalent object
+    xsdc__hexBinary * pObjC = (xsdc__hexBinary *)axiscAxisNew(XSDC_HEXBINARY, hexDataSize);
+    
+    // populate c-style object with data from c++ object
+    if (hexDataSize > 0)
+    {
+        memcpy(pObjC->__ptr, hexData, hexDataSize);
+        pObjC->__ptr[hexDataSize] = '\0';
+    }
+    
+    // Delete c++ object before returning c object
+    if (deleteObj)
+        delete objHexBin;    
+           
+    return pObjC;
+}
+
+AXIS_CPP_NAMESPACE_END

Added: webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.hpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.hpp?rev=396765&view=auto
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.hpp (added)
+++ webservices/axis/trunk/c/src/cbindings/AxisObjectConverter.hpp Mon Apr 24 20:40:37 2006
@@ -0,0 +1,100 @@
+/*
+ *   Copyright 2006-2006 The Apache Software Foundation.
+// (c) Copyright IBM Corp. 2006, 2006 All Rights Reserved
+ *
+ *   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.
+ */
+
+#if !defined(_AXISOBJECTCONVERTER_HPP_OF_AXIS_INCLUDED_)
+#define _AXISOBJECTCONVERTER_HPP_OF_AXIS_INCLUDED_
+
+#include <axis/AxisUserAPI.hpp>
+#include <axis/AxisUserAPI.h>
+
+ /**
+  * @file AxisObjectConverter.hpp
+  * This file contains static methods to convert C++ objects into C objects and
+  * vice-versa.  Probably the best way would have been to add methods to the 
+  * C++ objects in order to do the conversion to C objects, but decision was 
+  * made to keep the C++ engine clean of C support. 
+  */
+AXIS_CPP_NAMESPACE_START
+class AxisObjectConverter
+{
+public :
+
+    /**
+     * Generate an AnyType C structure from the C++ object AnyType.  
+     * 
+     * @param objAnyType  - Pointer to C++ object AnyType. 
+     * @param cAnyType    - Pointer to C AnyType. If NULL, one will be allocated. 
+     * @param deleteObj   - Boolean value indicating whether C++ object should be 
+     *                      deleted after C equivalent has been generated.
+     * 
+     * @return            - Pointer to C AnyType.  If cAnyType is not NULL, then
+     *                      that is returned; otherwise, a new C AnyType will be returned.
+     */
+    static AxiscAnyType *cppAnyTypeToC(AnyType *objAnyType, 
+                                       AxiscAnyType *cAnyType, 
+                                       bool deleteObj=false);
+
+    /**
+     * Generate a C array from the C++ object array.  
+     * 
+     * @param objArray    - Pointer to C++ array. 
+     * @param cArray      - Pointer to C array. If NULL, one will be allocated. 
+     * @param deleteObj   - Boolean value indicating whether C++ object should be 
+     *                      deleted after C equivalent has been generated.
+     * 
+     * @return            - Pointer to C array.  If cArray is not NULL, then
+     *                      that is returned; otherwise, a new C array will be returned.
+     */
+    static Axisc_Array *cppArrayToC(Axis_Array *objArray, 
+                                    Axisc_Array *cArray, 
+                                    bool deleteObj=false);
+                                    
+    /**
+     * Generate a base64Binary C structure from the C++ object base64Binary.  
+     * 
+     * @param objBase64Bin- Pointer to C++ object base64Bin. 
+     * @param cBase64Bin  - Pointer to C base64Bin. If NULL, one will be allocated. 
+     * @param deleteObj   - Boolean value indicating whether C++ object should be 
+     *                      deleted after C equivalent has been generated.
+     * 
+     * @return            - Pointer to C base64Binary.  If cBase64Bin is not NULL, then
+     *                      that is returned; otherwise, a new C base64Bin will be returned.
+     */
+ 
+    static xsdc__base64Binary *cppBase64BinaryToC(xsd__base64Binary *objBase64Bin, 
+                                                  xsdc__base64Binary *cBase64Bin, 
+                                                  bool deleteObjArray=false);   
+                                           
+    /**
+     * Generate a hexBinary C structure from the C++ object hexBinary.  
+     * 
+     * @param objHexBin   - Pointer to C++ object hexBinary. 
+     * @param cHexBin     - Pointer to C hexBinary. If NULL, one will be allocated. 
+     * @param deleteObj   - Boolean value indicating whether C++ object should be 
+     *                      deleted after C equivalent has been generated.
+     * 
+     * @return            - Pointer to C hexBinary.  If cHexBinary is not NULL, then
+     *                      that is returned; otherwise, a new C hexBinary will be returned.
+     */
+    static xsdc__hexBinary *cppHexBinaryToC(xsd__hexBinary *objHexBin, 
+                                            xsdc__hexBinary *cHexBin, 
+                                            bool deleteObj=false);
+};
+
+AXIS_CPP_NAMESPACE_END
+
+#endif

Modified: webservices/axis/trunk/c/src/cbindings/BasicNodeC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/BasicNodeC.cpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/BasicNodeC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/BasicNodeC.cpp Mon Apr 24 20:40:37 2006
@@ -22,7 +22,6 @@
 #include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
-#include <axis/AxisUserAPIArrays.h>
 #include <axis/BasicNode.h>
 
 AXIS_CPP_NAMESPACE_USE

Modified: webservices/axis/trunk/c/src/cbindings/IHeaderBlockC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/IHeaderBlockC.cpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/IHeaderBlockC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/IHeaderBlockC.cpp Mon Apr 24 20:40:37 2006
@@ -23,7 +23,6 @@
 #include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
-#include <axis/AxisUserAPIArrays.h>
 #include <axis/BasicNode.h>
 #include <axis/SoapEnvVersions.h>
 #include <axis/IHeaderBlock.h>

Modified: webservices/axis/trunk/c/src/cbindings/IWrapperSoapDeSerializerC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/IWrapperSoapDeSerializerC.cpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/IWrapperSoapDeSerializerC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/IWrapperSoapDeSerializerC.cpp Mon Apr 24 20:40:37 2006
@@ -19,11 +19,11 @@
 #include <axis/AxisException.hpp>
 
 #include "AxisObjectContainer.hpp"
+#include "AxisObjectConverter.hpp"
 
 #include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
-#include <axis/AxisUserAPIArrays.h>
 #include <axis/BasicNode.h>
 #include <axis/SoapEnvVersions.h>
 #include <axis/IWrapperSoapDeSerializer.h>
@@ -32,341 +32,6 @@
 
 extern "C" {
 
-
-// Following helper function will create a C-binding type of array from a 
-// C++ array
-static Axisc_Array *generateCBindingArray(Axisc_Array *cArray, Axis_Array*objArray, bool deleteObjArray=false)
-{ 
-    // If nothing to transform, return
-    if (objArray == NULL)
-        return cArray;
-             
-    // Allocate cbinding array and initialize
-    if (cArray == NULL)
-        cArray = (Axisc_Array *)axiscAxisNew(XSDC_ARRAY, 0);
-    
-    // Get object array stuff
-    XSDTYPE m_Type;
-    int     m_Size;
-    void ** m_Array = objArray->get(m_Size, m_Type);
-    
-    cArray->m_Size = m_Size;
-    cArray->m_Type = (AXISC_XSDTYPE)m_Type;
-    
-    // Now generate the array
-    if (m_Array != NULL && m_Size > 0)
-    {
-        cArray->m_Array = new void*[m_Size];
-        
-        for (int count = 0 ; count < m_Size ; count++)
-        {
-            if ( m_Array[count] == NULL)
-            {
-                cArray->m_Array[count] = NULL;
-                continue;
-            }
-    
-            switch (m_Type)
-            {
-                case XSD_DURATION:
-                {
-                    ((xsd__duration**) cArray->m_Array)[count] = new xsd__duration();
-                    *((xsd__duration**)cArray->m_Array)[count] = *((xsd__duration**) m_Array)[count];
-                    break;
-                }
-                case XSD_DATETIME:
-                {
-                    ((xsd__dateTime**) cArray->m_Array)[count] = new xsd__dateTime();
-                    *((xsd__dateTime**)cArray->m_Array)[count] = *((xsd__dateTime**) m_Array)[count];
-                    break;
-                }
-                case XSD_TIME:
-                {
-                    ((xsd__time**) cArray->m_Array)[count] = new xsd__time();
-                    *((xsd__time**)cArray->m_Array)[count] = *((xsd__time**) m_Array)[count];
-                    break;
-                }
-                case XSD_DATE:
-                {
-                    ((xsd__date**) cArray->m_Array)[count] = new xsd__date();
-                    *((xsd__date**)cArray->m_Array)[count] = *((xsd__date**) m_Array)[count];
-                    break;
-                }
-                case XSD_GYEARMONTH:
-                {
-                    ((xsd__gYearMonth**) cArray->m_Array)[count] = new xsd__gYearMonth();
-                    *((xsd__gYearMonth**)cArray->m_Array)[count] = *((xsd__gYearMonth**) m_Array)[count];
-                    break;
-                }           
-                case XSD_GYEAR:
-                {
-                    ((xsd__gYear**) cArray->m_Array)[count] = new xsd__gYear();
-                    *((xsd__gYear**)cArray->m_Array)[count] = *((xsd__gYear**) m_Array)[count];
-                    break;
-                }
-                case XSD_GMONTHDAY:
-                {
-                    ((xsd__gMonthDay**) cArray->m_Array)[count] = new xsd__gMonthDay();
-                    *((xsd__gMonthDay**)cArray->m_Array)[count] = *((xsd__gMonthDay**) m_Array)[count];
-                    break;
-                }
-                case XSD_GDAY:
-                {
-                    ((xsd__gDay**) cArray->m_Array)[count] = new xsd__gDay();
-                    *((xsd__gDay**)cArray->m_Array)[count] = *((xsd__gDay**) m_Array)[count];
-                    break;
-                }
-                case XSD_GMONTH:
-                {
-                    ((xsd__gMonth**) cArray->m_Array)[count] = new xsd__gMonth();
-                    *((xsd__gMonth**)cArray->m_Array)[count] = *((xsd__gMonth**) m_Array)[count];
-                    break;
-                }
-                case XSD_STRING:
-                {
-                    ((xsd__string*) cArray->m_Array)[count] = new char[strlen(((xsd__string*) m_Array)[count])+1];
-                    strcpy(((xsd__string*) cArray->m_Array)[count], ((xsd__string*) m_Array)[count]);
-                    break;
-                }
-                case XSD_NORMALIZEDSTRING:
-                {
-                    ((xsd__normalizedString*) cArray->m_Array)[count] = new char[strlen(((xsd__normalizedString*) m_Array)[count])+1];
-                    strcpy(((xsd__normalizedString*) cArray->m_Array)[count], ((xsd__normalizedString*) m_Array)[count]);
-                    break;
-                }
-                case XSD_TOKEN:
-                {
-                    ((xsd__token*) cArray->m_Array)[count] = new char[strlen(((xsd__token*) m_Array)[count])+1];
-                    strcpy(((xsd__token*) cArray->m_Array)[count], ((xsd__token*) m_Array)[count]);
-                    break;
-                }
-                case XSD_LANGUAGE:
-                {
-                    ((xsd__language*) cArray->m_Array)[count] = new char[strlen(((xsd__language*) m_Array)[count])+1];
-                    strcpy(((xsd__language*) cArray->m_Array)[count], ((xsd__language*) m_Array)[count]);
-                    break;
-                }
-                case XSD_NAME:
-                {
-                    ((xsd__Name*) cArray->m_Array)[count] = new char[strlen(((xsd__Name*) m_Array)[count])+1];
-                    strcpy(((xsd__Name*) cArray->m_Array)[count], ((xsd__Name*) m_Array)[count]);
-                    break;
-                }
-                case XSD_NCNAME:
-                {
-                    ((xsd__NCName*) cArray->m_Array)[count] = new char[strlen(((xsd__NCName*) m_Array)[count])+1];
-                    strcpy(((xsd__NCName*) cArray->m_Array)[count], ((xsd__NCName*) m_Array)[count]);
-                    break;
-                }
-                case XSD_ID:
-                {
-                    ((xsd__ID*) cArray->m_Array)[count] = new char[strlen(((xsd__ID*) m_Array)[count])+1];
-                    strcpy(((xsd__ID*) cArray->m_Array)[count], ((xsd__ID*) m_Array)[count]);
-                    break;
-                }
-                case XSD_IDREF:
-                {
-                    ((xsd__IDREF*) cArray->m_Array)[count] = new char[strlen(((xsd__IDREF*) m_Array)[count])+1];
-                    strcpy(((xsd__IDREF*) cArray->m_Array)[count], ((xsd__IDREF*) m_Array)[count]);
-                    break;
-                }
-                case XSD_IDREFS:
-                {
-                    ((xsd__IDREFS*) cArray->m_Array)[count] = new char[strlen(((xsd__IDREFS*) m_Array)[count])+1];
-                    strcpy(((xsd__IDREFS*) cArray->m_Array)[count], ((xsd__IDREFS*) m_Array)[count]);
-                    break;
-                }
-                case XSD_ENTITY:
-                {
-                    ((xsd__ENTITY*) cArray->m_Array)[count] = new char[strlen(((xsd__ENTITY*) m_Array)[count])+1];
-                    strcpy(((xsd__ENTITY*) cArray->m_Array)[count], ((xsd__ENTITY*) m_Array)[count]);
-                    break;
-                }
-                case XSD_ENTITIES:
-                {
-                    ((xsd__ENTITIES*) cArray->m_Array)[count] = new char[strlen(((xsd__ENTITIES*) m_Array)[count])+1];
-                    strcpy(((xsd__ENTITIES*) cArray->m_Array)[count], ((xsd__ENTITIES*) m_Array)[count]);
-                    break;
-                }
-                case XSD_NMTOKEN:
-                {
-                    ((xsd__NMTOKEN*) cArray->m_Array)[count] = new char[strlen(((xsd__NMTOKEN*) m_Array)[count])+1];
-                    strcpy(((xsd__NMTOKEN*) cArray->m_Array)[count], ((xsd__NMTOKEN*) m_Array)[count]);
-                    break;
-                }
-                case XSD_NMTOKENS:
-                {
-                    ((xsd__NMTOKENS*) cArray->m_Array)[count] = new char[strlen(((xsd__NMTOKENS*) m_Array)[count])+1];
-                    strcpy(((xsd__NMTOKENS*) cArray->m_Array)[count], ((xsd__NMTOKENS*) m_Array)[count]);
-                    break;
-                }
-                case XSD_BOOLEAN:
-                {
-                    ((xsd__boolean**) cArray->m_Array)[count] = new xsd__boolean();
-                    *((xsd__boolean**)cArray->m_Array)[count] = *((xsd__boolean**) m_Array)[count];
-                    break;
-                }
-                case XSD_BASE64BINARY:
-                {
-                    // TODO
-                    ((xsdc__base64Binary**) cArray->m_Array)[count] = new xsdc__base64Binary();
-                    *((xsdc__base64Binary**)cArray->m_Array)[count] = *((xsdc__base64Binary**) m_Array)[count];
-                    break;
-                }
-                case XSD_HEXBINARY:
-                {
-                    // TODO
-                    ((xsdc__hexBinary**) cArray->m_Array)[count] = new xsdc__hexBinary();
-                    *((xsdc__hexBinary**)cArray->m_Array)[count] = *((xsdc__hexBinary**) m_Array)[count];
-                    break;
-                }
-                case XSD_FLOAT:
-                {
-                    ((xsd__float**) cArray->m_Array)[count] = new xsd__float();
-                    *((xsd__float**)cArray->m_Array)[count] = *((xsd__float**) m_Array)[count];
-                    break;
-                }
-                case XSD_DECIMAL:
-                {
-                    ((xsd__decimal**) cArray->m_Array)[count] = new xsd__decimal();
-                    *((xsd__decimal**)cArray->m_Array)[count] = *((xsd__decimal**) m_Array)[count];
-                    break;
-                }
-                case XSD_INTEGER:
-                {
-                    ((xsd__integer**) cArray->m_Array)[count] = new xsd__integer();
-                    *((xsd__integer**)cArray->m_Array)[count] = *((xsd__integer**) m_Array)[count];
-                    break;
-                }
-                case XSD_NONPOSITIVEINTEGER:
-                {
-                    ((xsd__nonPositiveInteger**) cArray->m_Array)[count] = new xsd__nonPositiveInteger();
-                    *((xsd__nonPositiveInteger**)cArray->m_Array)[count] = *((xsd__nonPositiveInteger**) m_Array)[count];
-                    break;
-                }
-                case XSD_NEGATIVEINTEGER:
-                {
-                    ((xsd__negativeInteger**) cArray->m_Array)[count] = new xsd__negativeInteger();
-                    *((xsd__negativeInteger**)cArray->m_Array)[count] = *((xsd__negativeInteger**) m_Array)[count];
-                    break;
-                }
-                case XSD_LONG:
-                {
-                    ((xsd__long**) cArray->m_Array)[count] = new xsd__long();
-                    *((xsd__long**)cArray->m_Array)[count] = *((xsd__long**) m_Array)[count];
-                    break;
-                }
-                case XSD_INT:
-                {
-                    ((xsd__int**) cArray->m_Array)[count] = new xsd__int();
-                    *((xsd__int**)cArray->m_Array)[count] = *((xsd__int**) m_Array)[count];
-                    break;
-                }
-                case XSD_SHORT:
-                {
-                    ((xsd__short**) cArray->m_Array)[count] = new xsd__short();
-                    *((xsd__short**)cArray->m_Array)[count] = *((xsd__short**) m_Array)[count];
-                    break;
-                }
-                case XSD_BYTE:
-                {
-                    ((xsd__byte**) cArray->m_Array)[count] = new xsd__byte();
-                    *((xsd__byte**)cArray->m_Array)[count] = *((xsd__byte**) m_Array)[count];
-                    break;
-                }
-                case XSD_NONNEGATIVEINTEGER:
-                {
-                    ((xsd__nonNegativeInteger**) cArray->m_Array)[count] = new xsd__nonNegativeInteger();
-                    *((xsd__nonNegativeInteger**)cArray->m_Array)[count] = *((xsd__nonNegativeInteger**) m_Array)[count];
-                    break;
-                }
-                case XSD_UNSIGNEDLONG:
-                {
-                    ((xsd__unsignedLong**) cArray->m_Array)[count] = new xsd__unsignedLong();
-                    *((xsd__unsignedLong**)cArray->m_Array)[count] = *((xsd__unsignedLong**) m_Array)[count];
-                    break;
-                }
-                case XSD_UNSIGNEDINT:
-                {
-                    ((xsd__unsignedInt**) cArray->m_Array)[count] = new xsd__unsignedInt();
-                    *((xsd__unsignedInt**)cArray->m_Array)[count] = *((xsd__unsignedInt**) m_Array)[count];
-                    break;
-                }
-                case XSD_UNSIGNEDSHORT:
-                {
-                    ((xsd__unsignedShort**) cArray->m_Array)[count] = new xsd__unsignedShort();
-                    *((xsd__unsignedShort**)cArray->m_Array)[count] = *((xsd__unsignedShort**) m_Array)[count];
-                    break;
-                }
-                case XSD_UNSIGNEDBYTE:
-                {
-                    ((xsd__unsignedByte**) cArray->m_Array)[count] = new xsd__unsignedByte();
-                    *((xsd__unsignedByte**)cArray->m_Array)[count] = *((xsd__unsignedByte**) m_Array)[count];
-                    break;
-                }
-                case XSD_POSITIVEINTEGER:
-                {
-                    ((xsd__positiveInteger**) cArray->m_Array)[count] = new xsd__positiveInteger();
-                    *((xsd__positiveInteger**)cArray->m_Array)[count] = *((xsd__positiveInteger**) m_Array)[count];
-                    break;
-                }
-                case XSD_DOUBLE:
-                {
-                    ((xsd__double**) cArray->m_Array)[count] = new xsd__double();
-                    *((xsd__double**)cArray->m_Array)[count] = *((xsd__double**) m_Array)[count];
-                    break;
-                }
-                case XSD_ANYURI:
-                {
-                    ((xsd__anyURI*) cArray->m_Array)[count] = new char[strlen(((xsd__anyURI*) m_Array)[count])+1];
-                    strcpy(((xsd__anyURI*) cArray->m_Array)[count], ((xsd__anyURI*) m_Array)[count]);
-                    break;
-                }
-                case XSD_QNAME:
-                {
-                    ((xsd__QName*) cArray->m_Array)[count] = new char[strlen(((xsd__QName*) m_Array)[count])+1];
-                    strcpy(((xsd__QName*) cArray->m_Array)[count], ((xsd__QName*) m_Array)[count]);
-                    break;
-                }
-                case XSD_NOTATION:
-                {
-                    ((xsd__NOTATION*) cArray->m_Array)[count] = new char[strlen(((xsd__NOTATION*) m_Array)[count])+1];
-                    strcpy(((xsd__NOTATION*) cArray->m_Array)[count], ((xsd__NOTATION*) m_Array)[count]);
-                    break;
-                }
-                case XSD_ARRAY:
-                {
-                    // TODO
-                    cArray->m_Array[count] = m_Array[count];
-                    break;
-                }
-                case USER_TYPE:
-                {
-                    // TODO
-                    cArray->m_Array[count] = m_Array[count];
-                    break;
-                }
-                case XSD_UNKNOWN:
-                case XSD_ANY:
-                case ATTACHMENT:
-                default:
-                    break;
-            } // end switch
-        } // end for loop
-    }
-    
-    // delete c++ object array if requested to do so before returning
-    if (deleteObjArray)
-        delete objArray;
-    
-    return cArray;
-}
-
-
-
-
-
-
 AXISC_STORAGE_CLASS_INFO 
 void axiscSoapDeSerializerDestroy(AXISCHANDLE wrapperSoapDeSerializer) 
 {
@@ -454,7 +119,7 @@
                                                   pDZFunct, pCreFunct, pDelFunct, pSizeFunct, 
                                                   pName, pNamespace);
         
-        return generateCBindingArray(pArray, pObjArray, false);
+        return AxisObjectConverter::cppArrayToC(pObjArray, pArray, false);
     }
     catch ( AxisException& e  )
     {
@@ -479,7 +144,8 @@
     try
     {
         Axis_Array* pObjArray = dz->getBasicArray((XSDTYPE)nType, pName, pNamespace);
-        return generateCBindingArray(NULL, pObjArray, true);
+        
+        return AxisObjectConverter::cppArrayToC(pObjArray, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -898,26 +564,7 @@
     {
         xsd__hexBinary * pObjCpp = dz->getElementAsHexBinary(pName, pNamespace);
         
-        if (!pObjCpp)
-            return (xsdc__hexBinary *)NULL;
-        
-        // Get info from c++ Object
-        int hexDataSize;
-        xsd__unsignedByte *hexData = pObjCpp->get(hexDataSize);
-                       
-        // Create c-style equivalent object
-        xsdc__hexBinary * pObjC = (xsdc__hexBinary *)axiscAxisNew(XSDC_HEXBINARY, hexDataSize);
-        
-        // populate c-style object with data from c++ object
-        if (hexDataSize > 0)
-        {
-            memcpy(pObjC->__ptr, hexData, hexDataSize);
-            pObjC->__ptr[hexDataSize] = '\0';
-        }
-        
-        // Delete c++ object before returning c object
-        delete pObjCpp;       
-        return pObjC;
+        return AxisObjectConverter::cppHexBinaryToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -942,26 +589,7 @@
     {
         xsd__base64Binary * pObjCpp = dz->getElementAsBase64Binary(pName, pNamespace);
         
-        if (!pObjCpp)
-            return (xsdc__base64Binary *)NULL;
-        
-        // Get info from c++ Object
-        int base64BinaryDataSize;
-        xsd__unsignedByte *base64BinaryData = pObjCpp->get(base64BinaryDataSize);
-                       
-        // Create c-style equivalent object
-        xsdc__base64Binary * pObjC = (xsdc__base64Binary *)axiscAxisNew(XSDC_BASE64BINARY, base64BinaryDataSize);
-        
-        // populate c-style object with data from c++ object
-        if (base64BinaryDataSize > 0)
-        {
-            memcpy(pObjC->__ptr, base64BinaryData, base64BinaryDataSize);
-            pObjC->__ptr[base64BinaryDataSize] = '\0';
-        }
-        
-        // Delete c++ object before returning c object
-        delete pObjCpp;       
-        return pObjC;
+        return AxisObjectConverter::cppBase64BinaryToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -1446,26 +1074,7 @@
     {
         xsd__hexBinary * pObjCpp = dz->getAttributeAsHexBinary(pName, pNamespace);
         
-        if (!pObjCpp)
-            return (xsdc__hexBinary *)NULL;
-        
-        // Get info from c++ Object
-        int hexDataSize;
-        xsd__unsignedByte *hexData = pObjCpp->get(hexDataSize);
-                       
-        // Create c-style equivalent object
-        xsdc__hexBinary * pObjC = (xsdc__hexBinary *)axiscAxisNew(XSDC_HEXBINARY, hexDataSize);
-        
-        // populate c-style object with data from c++ object
-        if (hexDataSize > 0)
-        {
-            memcpy(pObjC->__ptr, hexData, hexDataSize);
-            pObjC->__ptr[hexDataSize] = '\0';
-        }
-        
-        // Delete c++ object before returning c object
-        delete pObjCpp;       
-        return pObjC;        
+        return AxisObjectConverter::cppHexBinaryToC(pObjCpp, NULL, true);  
     }
     catch ( AxisException& e  )
     {
@@ -1490,26 +1099,7 @@
     {
         xsd__base64Binary * pObjCpp = dz->getAttributeAsBase64Binary(pName, pNamespace);
         
-        if (!pObjCpp)
-            return (xsdc__base64Binary *)NULL;
-        
-        // Get info from c++ Object
-        int base64BinaryDataSize;
-        xsd__unsignedByte *base64BinaryData = pObjCpp->get(base64BinaryDataSize);
-                       
-        // Create c-style equivalent object
-        xsdc__base64Binary * pObjC = (xsdc__base64Binary *)axiscAxisNew(XSDC_BASE64BINARY, base64BinaryDataSize);
-        
-        // populate c-style object with data from c++ object
-        if (base64BinaryDataSize > 0)
-        {
-            memcpy(pObjC->__ptr, base64BinaryData, base64BinaryDataSize);
-            pObjC->__ptr[base64BinaryDataSize] = '\0';
-        }
-        
-        // Delete c++ object before returning c object
-        delete pObjCpp;       
-        return pObjC;
+        return AxisObjectConverter::cppBase64BinaryToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -1727,7 +1317,9 @@
 
     try
     {
-        return (AxiscAnyType*)(dz->getAnyObject());
+        AnyType * pObjCpp = dz->getAnyObject();
+        
+        return AxisObjectConverter::cppAnyTypeToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {

Modified: webservices/axis/trunk/c/src/cbindings/IWrapperSoapSerializerC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/IWrapperSoapSerializerC.cpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/IWrapperSoapSerializerC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/IWrapperSoapSerializerC.cpp Mon Apr 24 20:40:37 2006
@@ -24,7 +24,6 @@
 #include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
-#include <axis/AxisUserAPIArrays.h>
 #include <axis/BasicNode.h>
 #include <axis/SoapEnvVersions.h>
 #include <axis/TypeMapping.h>

Modified: webservices/axis/trunk/c/src/cbindings/client/CallC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/client/CallC.cpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/client/CallC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/client/CallC.cpp Mon Apr 24 20:40:37 2006
@@ -19,11 +19,11 @@
 #include <axis/AxisException.hpp>
 
 #include "../AxisObjectContainer.hpp"
+#include "../AxisObjectConverter.hpp"
 
 #include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
-#include <axis/AxisUserAPIArrays.h>
 #include <axis/SoapEnvVersions.h>
 #include <axis/TypeMapping.h>
 #include <axis/WSDDDefines.h>
@@ -1003,10 +1003,9 @@
     
     try
     {
-        //TODO: Unimplemented
-        xsdc__hexBinary * hb = new xsdc__hexBinary();
-        memset(hb,0,sizeof(hb));
-        return hb;
+        xsd__hexBinary * pObjCpp = dc->getElementAsHexBinary(pName, pNamespace);
+        
+        return AxisObjectConverter::cppHexBinaryToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -1034,10 +1033,9 @@
     
     try
     {
-        //TODO: Unimplemented
-        xsdc__base64Binary * bb = new xsdc__base64Binary();
-        memset(bb,0,sizeof(bb));
-        return bb;
+        xsd__base64Binary * pObjCpp = c->getElementAsBase64Binary(pName, pNamespace);
+        
+        return AxisObjectConverter::cppBase64BinaryToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -1624,10 +1622,9 @@
     
     try
     {
-        //TODO: Unimplemented
-        xsdc__hexBinary * hb = new xsdc__hexBinary();
-        memset(hb,0,sizeof(hb));
-        return hb;
+        xsd__hexBinary * pObjCpp = c->getAttributeAsHexBinary(pName, pNamespace);
+        
+        return AxisObjectConverter::cppHexBinaryToC(pObjCpp, NULL, true);  
     }
     catch ( AxisException& e  )
     {
@@ -1655,10 +1652,9 @@
     
     try
     {
-        //TODO: Unimplemented
-        xsdc__base64Binary *bb = new xsdc__base64Binary();
-        memset(bb,0,sizeof(bb));
-        return bb;
+        xsd__base64Binary * pObjCpp = c->getAttributeAsBase64Binary(pName, pNamespace);
+        
+        return AxisObjectConverter::cppBase64BinaryToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -1834,15 +1830,16 @@
     try
     {
     	Axis_Array ObjArray;
-    	Axis_Array *pObjArray = NULL;
+    	Axis_Array *pObjArray;
     	
     	if (pArray)
-    	{
     		ObjArray.set(pArray->m_Array, pArray->m_Size, (XSDTYPE)pArray->m_Type);
-    		pObjArray = &ObjArray;
-        }
         
-    	c->getCmplxArray(&ObjArray, pDZFunct, pCreFunct,pDelFunct,pSizeFunct, pName, pNamespace); 
+    	pObjArray = c->getCmplxArray(&ObjArray, 
+    	                             pDZFunct, pCreFunct,pDelFunct,pSizeFunct, 
+    	                             pName, pNamespace); 
+    	                             
+    	return AxisObjectConverter::cppArrayToC(pObjArray, pArray, false);
     }
     catch ( AxisException& e  )
     {
@@ -1871,9 +1868,9 @@
     
     try
     {
-        //TODO: Unimplemented
-        Axisc_Array* aa = (Axisc_Array *)NULL;
-        return aa;
+    	Axis_Array *pObjArray = c->getBasicArray(nType, pName, pNamespace);
+    	
+    	return AxisObjectConverter::cppArrayToC(pObjArray, NULL, true);
     }
     catch ( AxisException& e  )
     {
@@ -2008,7 +2005,9 @@
     
     try
     {
-        return (AxiscAnyType*)(c->getAnyObject());
+        AnyType * pObjCpp = c->getAnyObject();
+        
+        return AxisObjectConverter::cppAnyTypeToC(pObjCpp, NULL, true);
     }
     catch ( AxisException& e  )
     {

Modified: webservices/axis/trunk/c/src/cbindings/client/StubC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/client/StubC.cpp?rev=396765&r1=396764&r2=396765&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/client/StubC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/client/StubC.cpp Mon Apr 24 20:40:37 2006
@@ -23,7 +23,6 @@
 #include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
-#include <axis/AxisUserAPIArrays.h>
 #include <axis/client/Stub.h>
 
 AXIS_CPP_NAMESPACE_START