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 di...@apache.org on 2005/01/25 13:04:52 UTC

cvs commit: ws-axis/c/src/soap/xsd/constraints Length.cpp Length.hpp

dicka       2005/01/25 04:04:52

  Modified:    c/src/soap Makefile.am
               c/src/soap/xsd AnyURI.cpp AnyURI.hpp Base64Binary.cpp
                        Base64Binary.hpp HexBinary.cpp HexBinary.hpp
                        NOTATION.cpp NOTATION.hpp String.cpp String.hpp
                        XSD_QName.cpp XSD_QName.hpp
               c/vc     AxisClientDLL.dsp AxisServerDLL.dsp
  Added:       c/src/soap/xsd/constraints Length.cpp Length.hpp
  Log:
  Adding constraint validation/processing to XSD SOAP objects.  Addition of Length constraint.
  
  Submitted by: Adrian Dick
  
  Revision  Changes    Path
  1.24      +1 -0      ws-axis/c/src/soap/Makefile.am
  
  Index: Makefile.am
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/Makefile.am,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- Makefile.am	24 Jan 2005 17:21:25 -0000	1.23
  +++ Makefile.am	25 Jan 2005 12:04:51 -0000	1.24
  @@ -48,6 +48,7 @@
           xsd/constraints/Pattern.cpp \
           xsd/constraints/MinLength.cpp \
           xsd/constraints/MaxLength.cpp \
  +        xsd/constraints/Length.cpp \
           xsd/constraints/MinInclusive.cpp \
           xsd/constraints/MinExclusive.cpp \
           xsd/constraints/MaxInclusive.cpp \
  
  
  
  1.7       +27 -0     ws-axis/c/src/soap/xsd/AnyURI.cpp
  
  Index: AnyURI.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/AnyURI.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- AnyURI.cpp	25 Jan 2005 11:26:38 -0000	1.6
  +++ AnyURI.cpp	25 Jan 2005 12:04:51 -0000	1.7
  @@ -61,6 +61,28 @@
               }
           }
           delete maxLength;
  +
  +        Length* length = getLength();
  +        if (length->isSet())
  +        {
  +            if (strlen(value) != (unsigned int) length->getLength())
  +            {
  +                AxisString exceptionMessage =
  +                "Length of value to be serialized is not the same as Length specified for this type.  Length = ";
  +                AxisChar* lengthAsString = new AxisChar[10];
  +                sprintf(lengthAsString, "%d", length->getLength());
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ", Length of value = ";
  +                sprintf(lengthAsString, "%d", strlen(value));
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ".";
  +                delete [] lengthAsString;
  +                
  +                throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
  +                    const_cast<AxisChar*>(exceptionMessage.c_str()));
  +            }
  +        }
  +        delete length;
                
   		AxisString valueAsString = value;
   		AxisChar* serializedValue = (AxisChar*) replaceReservedCharacters(valueAsString).c_str();
  @@ -95,6 +117,11 @@
       MaxLength* AnyURI::getMaxLength()
       {
           return new MaxLength();
  +    }
  +
  +    Length* AnyURI::getLength()
  +    {
  +        return new Length();
       }
   
   AXIS_CPP_NAMESPACE_END
  
  
  
  1.5       +7 -0      ws-axis/c/src/soap/xsd/AnyURI.hpp
  
  Index: AnyURI.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/AnyURI.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AnyURI.hpp	21 Jan 2005 15:06:56 -0000	1.4
  +++ AnyURI.hpp	25 Jan 2005 12:04:51 -0000	1.5
  @@ -25,6 +25,7 @@
   #include "IAnySimpleType.hpp"
   #include "constraints/MinLength.hpp"
   #include "constraints/MaxLength.hpp"
  +#include "constraints/Length.hpp"
   
   AXIS_CPP_NAMESPACE_START
   
  @@ -88,6 +89,12 @@
        */
       MaxLength* getMaxLength();
   
  +    /**
  +     * Creates a Length object, used to allocate storage.  By default the AnyURI
  +     * object does not have this specified, so this is an unset Length object.
  +     * @return An unset Length object
  +     */
  +    Length* getLength();
       
   private:
       AxisChar* m_AnyURI;
  
  
  
  1.8       +27 -0     ws-axis/c/src/soap/xsd/Base64Binary.cpp
  
  Index: Base64Binary.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/Base64Binary.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Base64Binary.cpp	21 Jan 2005 15:17:19 -0000	1.7
  +++ Base64Binary.cpp	25 Jan 2005 12:04:52 -0000	1.8
  @@ -71,6 +71,28 @@
               }
           }
           delete maxLength;
  +
  +        Length* length= getLength();
  +        if (length->isSet())
  +        {
  +            if (value->__size != length->getLength())
  +            {
  +                AxisString exceptionMessage =
  +                "Length of value to be serialized is not the same as Length specified for this type.  Length = ";
  +                AxisChar* lengthAsString = new AxisChar[10];
  +                sprintf(lengthAsString, "%d", length->getLength());
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ", Length of value = ";
  +                sprintf(lengthAsString, "%d", value->__size);
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ".";
  +                delete [] lengthAsString;
  +                
  +                throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
  +                    const_cast<AxisChar*>(exceptionMessage.c_str()));
  +            }
  +        }
  +        delete length;
        
   	    int len = apr_base64_encode_len (value->__size);	    
   	    AxisChar* serializedValue = new AxisChar[len + 1];
  @@ -109,6 +131,11 @@
       MaxLength* Base64Binary::getMaxLength()
       {
           return new MaxLength();
  +    }
  +
  +    Length* Base64Binary::getLength()
  +    {
  +        return new Length();
       }
   
   AXIS_CPP_NAMESPACE_END
  
  
  
  1.6       +8 -0      ws-axis/c/src/soap/xsd/Base64Binary.hpp
  
  Index: Base64Binary.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/Base64Binary.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Base64Binary.hpp	21 Jan 2005 15:06:56 -0000	1.5
  +++ Base64Binary.hpp	25 Jan 2005 12:04:52 -0000	1.6
  @@ -27,6 +27,7 @@
   #include <axis/AxisUserAPI.hpp>
   #include "constraints/MinLength.hpp"
   #include "constraints/MaxLength.hpp"
  +#include "constraints/Length.hpp"
   
   AXIS_CPP_NAMESPACE_START
   
  @@ -88,6 +89,13 @@
        * @return An unset MaxLength object
        */
       MaxLength* getMaxLength();
  +
  +    /**
  +     * Creates a Length object, used to allocate storage.  By default the Base64Binary
  +     * object does not have this specified, so this is an unset Length object.
  +     * @return An unset Length object
  +     */
  +    Length* getLength();
   
   private:
   	xsd__base64Binary* m_Base64Binary;
  
  
  
  1.10      +27 -0     ws-axis/c/src/soap/xsd/HexBinary.cpp
  
  Index: HexBinary.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/HexBinary.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- HexBinary.cpp	21 Jan 2005 15:17:19 -0000	1.9
  +++ HexBinary.cpp	25 Jan 2005 12:04:52 -0000	1.10
  @@ -70,6 +70,28 @@
               }
           }
           delete maxLength;
  +
  +        Length* length= getLength();
  +        if (length->isSet())
  +        {
  +            if (value->__size != length->getLength())
  +            {
  +                AxisString exceptionMessage =
  +                "Length of value to be serialized is not the same as Length specified for this type.  Length = ";
  +                AxisChar* lengthAsString = new AxisChar[10];
  +                sprintf(lengthAsString, "%d", length->getLength());
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ", Length of value = ";
  +                sprintf(lengthAsString, "%d", value->__size);
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ".";
  +                delete [] lengthAsString;
  +                
  +                throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
  +                    const_cast<AxisChar*>(exceptionMessage.c_str()));
  +            }
  +        }
  +        delete length;
        
   		char* serializedValue = new char[value->__size * 2 + 1];
   	    Hex_Encode (serializedValue, value->__ptr, value->__size);
  @@ -108,6 +130,11 @@
       MaxLength* HexBinary::getMaxLength()
       {
           return new MaxLength();
  +    }
  +
  +    Length* HexBinary::getLength()
  +    {
  +        return new Length();
       }
   
   AXIS_CPP_NAMESPACE_END
  
  
  
  1.6       +8 -0      ws-axis/c/src/soap/xsd/HexBinary.hpp
  
  Index: HexBinary.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/HexBinary.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HexBinary.hpp	21 Jan 2005 15:06:56 -0000	1.5
  +++ HexBinary.hpp	25 Jan 2005 12:04:52 -0000	1.6
  @@ -27,6 +27,7 @@
   #include "../HexCoder.h"
   #include "constraints/MinLength.hpp"
   #include "constraints/MaxLength.hpp"
  +#include "constraints/Length.hpp"
   
   AXIS_CPP_NAMESPACE_START
   
  @@ -88,6 +89,13 @@
        * @return An unset MaxLength object
        */
       MaxLength* getMaxLength();
  +
  +    /**
  +     * Creates a Length object, used to allocate storage.  By default the HexBinary
  +     * object does not have this specified, so this is an unset Length object.
  +     * @return An unset Length object
  +     */
  +    Length* getLength();
   
   private:
   	xsd__hexBinary* m_HexBinary;
  
  
  
  1.7       +27 -0     ws-axis/c/src/soap/xsd/NOTATION.cpp
  
  Index: NOTATION.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/NOTATION.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- NOTATION.cpp	25 Jan 2005 11:26:38 -0000	1.6
  +++ NOTATION.cpp	25 Jan 2005 12:04:52 -0000	1.7
  @@ -61,6 +61,28 @@
           }
       }
       delete maxLength;
  +
  +    Length* length = getLength();
  +    if (length->isSet())
  +    {
  +        if (strlen(value) != (unsigned int) length->getLength())
  +        {
  +            AxisString exceptionMessage =
  +            "Length of value to be serialized is not the same as Length specified for this type.  Length = ";
  +            AxisChar* lengthAsString = new AxisChar[10];
  +            sprintf(lengthAsString, "%d", length->getLength());
  +            exceptionMessage += lengthAsString;
  +            exceptionMessage += ", Length of value = ";
  +            sprintf(lengthAsString, "%d", strlen(value));
  +            exceptionMessage += lengthAsString;
  +            exceptionMessage += ".";
  +            delete [] lengthAsString;
  +            
  +            throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
  +                const_cast<AxisChar*>(exceptionMessage.c_str()));
  +        }
  +    }
  +    delete length;
       
   	AxisString valueAsString = value;
   	AxisChar* serializedValue = (AxisChar*) replaceReservedCharacters(valueAsString).c_str();
  @@ -94,6 +116,11 @@
   MaxLength* NOTATION::getMaxLength()
   {
       return new MaxLength();
  +}
  +
  +Length* NOTATION::getLength()
  +{
  +    return new Length();
   }
   
   AXIS_CPP_NAMESPACE_END
  
  
  
  1.5       +7 -0      ws-axis/c/src/soap/xsd/NOTATION.hpp
  
  Index: NOTATION.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/NOTATION.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- NOTATION.hpp	21 Jan 2005 15:06:56 -0000	1.4
  +++ NOTATION.hpp	25 Jan 2005 12:04:52 -0000	1.5
  @@ -25,6 +25,7 @@
   #include "IAnySimpleType.hpp"
   #include "constraints/MinLength.hpp"
   #include "constraints/MaxLength.hpp"
  +#include "constraints/Length.hpp"
   
   AXIS_CPP_NAMESPACE_START
   
  @@ -88,6 +89,12 @@
        */
       MaxLength* getMaxLength();
   
  +    /**
  +     * Creates a Length object, used to allocate storage.  By default the NOTATION
  +     * object does not have this specified, so this is an unset Length object.
  +     * @return An unset Length object
  +     */
  +    Length* getLength();
   
   private:
       AxisChar* m_NOTATION;
  
  
  
  1.7       +27 -0     ws-axis/c/src/soap/xsd/String.cpp
  
  Index: String.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/String.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- String.cpp	25 Jan 2005 11:26:38 -0000	1.6
  +++ String.cpp	25 Jan 2005 12:04:52 -0000	1.7
  @@ -61,6 +61,28 @@
           }
       }
       delete maxLength;
  +
  +    Length* length = getLength();
  +    if (length->isSet())
  +    {
  +        if (strlen(value) != (unsigned int) length->getLength())
  +        {
  +            AxisString exceptionMessage =
  +            "Length of value to be serialized is not the same as Length specified for this type.  Length = ";
  +            AxisChar* lengthAsString = new AxisChar[10];
  +            sprintf(lengthAsString, "%d", length->getLength());
  +            exceptionMessage += lengthAsString;
  +            exceptionMessage += ", Length of value = ";
  +            sprintf(lengthAsString, "%d", strlen(value));
  +            exceptionMessage += lengthAsString;
  +            exceptionMessage += ".";
  +            delete [] lengthAsString;
  +            
  +            throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
  +                const_cast<AxisChar*>(exceptionMessage.c_str()));
  +        }
  +    }
  +    delete length;
    
   	AxisString valueAsString = value;
   	AxisChar* serializedValue = (AxisChar*) replaceReservedCharacters(valueAsString).c_str();
  @@ -89,6 +111,11 @@
   MaxLength* String::getMaxLength()
   {
       return new MaxLength();
  +}
  +
  +Length* String::getLength()
  +{
  +    return new Length();
   }
   
   AXIS_CPP_NAMESPACE_END
  
  
  
  1.5       +8 -0      ws-axis/c/src/soap/xsd/String.hpp
  
  Index: String.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/String.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- String.hpp	21 Jan 2005 15:06:56 -0000	1.4
  +++ String.hpp	25 Jan 2005 12:04:52 -0000	1.5
  @@ -25,6 +25,7 @@
   #include "IAnySimpleType.hpp"
   #include "constraints/MinLength.hpp"
   #include "constraints/MaxLength.hpp"
  +#include "constraints/Length.hpp"
   
   AXIS_CPP_NAMESPACE_START
   
  @@ -81,6 +82,13 @@
        * @return An unset MaxLength object
        */
       MaxLength* getMaxLength();
  +
  +    /**
  +     * Creates a Length object, used to allocate storage.  By default the String
  +     * object does not have this specified, so this is an unset Length object.
  +     * @return An unset Length object
  +     */
  +    Length* getLength();
   
   private:
       AxisChar* m_String;
  
  
  
  1.7       +27 -0     ws-axis/c/src/soap/xsd/XSD_QName.cpp
  
  Index: XSD_QName.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/XSD_QName.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XSD_QName.cpp	25 Jan 2005 11:26:38 -0000	1.6
  +++ XSD_QName.cpp	25 Jan 2005 12:04:52 -0000	1.7
  @@ -61,6 +61,28 @@
               }
           }
           delete maxLength;
  +
  +        Length* length = getLength();
  +        if (length->isSet())
  +        {
  +            if (strlen(value) != (unsigned int) length->getLength())
  +            {
  +                AxisString exceptionMessage =
  +                "Length of value to be serialized is not the same as Length specified for this type.  Length = ";
  +                AxisChar* lengthAsString = new AxisChar[10];
  +                sprintf(lengthAsString, "%d", length->getLength());
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ", Length of value = ";
  +                sprintf(lengthAsString, "%d", strlen(value));
  +                exceptionMessage += lengthAsString;
  +                exceptionMessage += ".";
  +                delete [] lengthAsString;
  +                
  +                throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
  +                    const_cast<AxisChar*>(exceptionMessage.c_str()));
  +            }
  +        }
  +        delete length;
       
   		AxisString valueAsString = value;
   		AxisChar* serializedValue = (AxisChar*) replaceReservedCharacters(valueAsString).c_str();
  @@ -90,5 +112,10 @@
       {
           return new MaxLength();
       }   
  +
  +    Length* XSD_QName::getLength()
  +    {
  +        return new Length();
  +    }
   
   AXIS_CPP_NAMESPACE_END
  
  
  
  1.5       +7 -0      ws-axis/c/src/soap/xsd/XSD_QName.hpp
  
  Index: XSD_QName.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/XSD_QName.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XSD_QName.hpp	21 Jan 2005 15:06:56 -0000	1.4
  +++ XSD_QName.hpp	25 Jan 2005 12:04:52 -0000	1.5
  @@ -25,6 +25,7 @@
   #include "IAnySimpleType.hpp"
   #include "constraints/MinLength.hpp"
   #include "constraints/MaxLength.hpp"
  +#include "constraints/Length.hpp"
   
   AXIS_CPP_NAMESPACE_START
   
  @@ -88,6 +89,12 @@
        */
       MaxLength* getMaxLength();
   
  +    /**
  +     * Creates a Length object, used to allocate storage.  By default the QName
  +     * object does not have this specified, so this is an unset Length object.
  +     * @return An unset Length object
  +     */
  +    Length* getLength();
   
   private:
       AxisChar* m_QName;
  
  
  
  1.34      +4 -0      ws-axis/c/vc/AxisClientDLL.dsp
  
  Index: AxisClientDLL.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/AxisClientDLL.dsp,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- AxisClientDLL.dsp	24 Jan 2005 17:21:26 -0000	1.33
  +++ AxisClientDLL.dsp	25 Jan 2005 12:04:52 -0000	1.34
  @@ -290,6 +290,10 @@
   # End Source File
   # Begin Source File
   
  +SOURCE=..\src\soap\xsd\constraints\Length.cpp
  +# End Source File
  +# Begin Source File
  +
   SOURCE=..\src\soap\xsd\Long.cpp
   # End Source File
   # Begin Source File
  
  
  
  1.33      +4 -0      ws-axis/c/vc/AxisServerDLL.dsp
  
  Index: AxisServerDLL.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/AxisServerDLL.dsp,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- AxisServerDLL.dsp	24 Jan 2005 17:21:26 -0000	1.32
  +++ AxisServerDLL.dsp	25 Jan 2005 12:04:52 -0000	1.33
  @@ -286,6 +286,10 @@
   # End Source File
   # Begin Source File
   
  +SOURCE=..\src\soap\xsd\constraints\Length.cpp
  +# End Source File
  +# Begin Source File
  +
   SOURCE=..\src\soap\xsd\Long.cpp
   # End Source File
   # Begin Source File
  
  
  
  1.1                  ws-axis/c/src/soap/xsd/constraints/Length.cpp
  
  Index: Length.cpp
  ===================================================================
  #include "Length.hpp"
  
  AXIS_CPP_NAMESPACE_START
  
      Length::Length():m_Length(0)
      {
          m_isSet = false;
      }
  
      Length::Length(int length)
      {
          m_Length = length;
          m_isSet = true;
      }
  
      int Length::getLength()
      {
          return m_Length;
      }
      
  AXIS_CPP_NAMESPACE_END
  
  
  
  1.1                  ws-axis/c/src/soap/xsd/constraints/Length.hpp
  
  Index: Length.hpp
  ===================================================================
  /*
   *   Copyright 2003-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.
   */
   
   /*
    * @file Length.hpp
    */
    
  #if !defined(_LENGTH_HPP____OF_AXIS_INCLUDED_)
  #define _LENGTH_HPP____OF_AXIS_INCLUDED_
  
  #include "IConstrainingFacet.hpp"
  
  AXIS_CPP_NAMESPACE_START
  
  /**
   *   @class Length
   *
   *   @author Adrian Dick (adrian.dick@uk.ibm.com)
   *
   */
  class Length : public IConstrainingFacet {
  
  public:
  
      Length();
      
      Length(int maxLength);
  
      int getLength();
      
  private:
      int m_Length;
  
  };
  
  AXIS_CPP_NAMESPACE_END
  
  #endif