Yes...I will get them in. Thanks.

Nadir K. Amra


Franz Fehringer <[EMAIL PROTECTED]> wrote on 11/15/2006 08:06:58 AM:

> Hello Nadir,
> 
> I found out, that your fix for the getChardataAs() problem does not 
> cover all possible cases.
> More to the point it only works if the C/C++ Variable where the 
> character data is to be read in is of pointer type (which in this 
> situation means mostly xsd_string or xsd__nmtoken i.e. char*).
> If the character data is to be read into a double say, then
> the levels of (de)referencing are wrong.
> (on my computer at least) a double (8 byte) does not fit into a 
> void* (4 byte).
> The XSD snippet exposing this problem is
> 
>     <xsd:simpleType name="t_AmountOfMoney">
>         <xsd:restriction base="xsd:double">
>             <xsd:maxExclusive value="100000000000000000000"/>
>             <!--<xsd:fractionDigits value="10"/>-->
>             <xsd:minInclusive value="0"/>
>         </xsd:restriction>
>     </xsd:simpleType>
>     <xsd:complexType name="t_BuyRate">
>         <xsd:simpleContent>
>             <xsd:extension base="t_AmountOfMoney">
>                 <xsd:attribute name="currencyCode" 
> type="t_CurrencyCode" use="required"/>
>                 <xsd:attribute name="inclusiveOfTax" type="xsd:
> boolean" use="required"/>
>             </xsd:extension>
>         </xsd:simpleContent>
>     </xsd:complexType>
> 
> I resolved the problem by the changing SoapDeSerializer.cpp and 
> BeanParamWriter.java.
> The change in SoapDeSerializer.cpp is the same as proposed by 
> Michael Xiong but his BeanParamWriter.java change suffers from the 
> same problem as yours.
> Below you find the relevant diffs.
> Any chances for getting this into SVN?
> 
> Best regards
> 
> Franz
> 
> 
> Index: SoapDeSerializer.cpp
> ===================================================================
> --- SoapDeSerializer.cpp        (Revision 475161)
> +++ SoapDeSerializer.cpp        (Arbeitskopie)
> @@ -2522,7 +2522,7 @@
>  }
> 
>  void
> -SoapDeSerializer::getChardataAs (void **pValue,
> +SoapDeSerializer::getChardataAs (void*& pValue,
>                                   XSDTYPE type)
>  {
>      if (!m_pNode)
> @@ -2532,7 +2532,7 @@
>      {
>          IAnySimpleType* pSimpleType = AxisUtils::
> createSimpleTypeObject(type);
>          pSimpleType->deserialize(m_pNode->m_pchNameOrValue);
> -        *pValue = pSimpleType->getValue();
> +        pValue = pSimpleType->getValue();
>          delete pSimpleType;
>      }
>  }
> 
> Index: SoapDeSerializer.h
> ===================================================================
> --- SoapDeSerializer.h  (Revision 475161)
> +++ SoapDeSerializer.h  (Arbeitskopie)
> @@ -320,7 +320,7 @@
>      int AXISCALL getStatus(){return m_nStatus;};
>         AnyType* AXISCALL getAnyObject();
>      void serializeTag(AxisString& xmlStr, const AnyElement* node, 
> AxisString& nsDecls);
> -    void getChardataAs(void** pValue, XSDTYPE type);
> +    void getChardataAs(void*& pValue, XSDTYPE type);
> 
>      /**
>        *Returns the attachemtn object for the given id.
> 
> Index: axis/IWrapperSoapDeSerializer.hpp
> ===================================================================
> --- axis/IWrapperSoapDeSerializer.hpp   (Revision 475161)
> +++ axis/IWrapperSoapDeSerializer.hpp   (Arbeitskopie)
> @@ -964,7 +964,7 @@
>       * @param pValue object into which deserialized value will be 
placed
>       * @param type The xsd simple type of the data.
>       */
> -    virtual void getChardataAs(void** pValue,
> +    virtual void getChardataAs(void*& pValue,
>                                 XSDTYPE type)=0;
> 
>      /**
> 
> Index: BeanParamWriter.java
> ===================================================================
> --- BeanParamWriter.java        (Revision 475161)
> +++ BeanParamWriter.java        (Arbeitskopie)
> @@ -971,9 +971,18 @@
>          {
>              if (extensionBaseAttrib != null)
>              {
> -                writer.write("\tpIWSDZ->getChardataAs((void 
**)&(param->"
> -                        + extensionBaseAttrib.getParamNameAsMember() + 
"), "
> -                        + CUtils.
> getXSDTypeForBasicType(extensionBaseAttrib.getTypeName()) + ");\n");
> +                writer.write("\tvoid* pCharData;\n\n");
> +                String typeName = extensionBaseAttrib.getTypeName();
> +                String xsdType = 
CUtils.getXSDTypeForBasicType(typeName);
> +                writer.write("\tpIWSDZ->getChardataAs(pCharData, " 
> + xsdType + ");\n");
> +                if (CUtils.isPointerType(typeName))
> +                {
> +                    writer.write("\tparam->" + extensionBaseAttrib.
> getParamNameAsMember() + " = (" + typeName + ") pCha
> rData;\n");
> +                }
> +                else
> +                {
> +                    writer.write("\tparam->" + extensionBaseAttrib.
> getParamNameAsMember() + " = *(" + typeName + "*) pC
> harData;\n");
> +                }
>              }
>              else
>              {
> @@ -1248,9 +1257,18 @@
>          if (extensionBaseAttrib != null
>                  && extensionBaseAttrib.getTypeName() != null)
>          {
> -            writer.write("\tpIWSDZ->getChardataAs((void **)&(param->"
> -                    + extensionBaseAttrib.getParamNameAsMember() + "), 
"
> -                    + CUtils.
> getXSDTypeForBasicType(extensionBaseAttrib.getTypeName()) + ");\n");
> +            writer.write("\tvoid* pCharData;\n\n");
> +            String typeName = extensionBaseAttrib.getTypeName();
> +            String xsdType = CUtils.getXSDTypeForBasicType(typeName);
> +            writer.write("\tpIWSDZ->getChardataAs(pCharData, " + 
> xsdType + ");\n");
> +            if (CUtils.isPointerType(typeName))
> +            {
> +                writer.write("\tparam->" + extensionBaseAttrib.
> getParamNameAsMember() + " = (" + typeName + ") pCharDat
> a;\n");
> +            }
> +            else
> +            {
> +               writer.write("\tparam->" + extensionBaseAttrib.
> getParamNameAsMember() + " = *(" + typeName + "*) pCharDa
> ta;\n");
> +            }
>          }
> 
>          writer.write("\treturn pIWSDZ->getStatus();\n");
> 
> [attachment "feh.vcf" deleted by Nadir Amra/Rochester/IBM] 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to