attribute in xml schema becomes element when  g enetate xsd from SDO 
---------------------------------------------------------------------

                 Key: TUSCANY-2326
                 URL: https://issues.apache.org/jira/browse/TUSCANY-2326
             Project: Tuscany
          Issue Type: Bug
          Components: C++ SDO
    Affects Versions: Cpp-M3
         Environment: Tuscany SDO C++ M3 Source Release for Windows
            Reporter: Yang Wang
             Fix For: Cpp-M3


I am a user of Tuscany SDO C++ , but I entercounter a problem when I use it.

  my problem's description:

 this is my xml schema: in file msg.xsd

  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:sdo="commonj.sdo"  xmlns:rcmq="RCMQ" targetNamespace="RCMQ">
 <xsd:element name="rcmqMsg" type="rcmq:RCMQMessage"/>
 <xsd:complexType name="RCMQMessage">
  <xsd:sequence>
   <xsd:element name="messageID" type="xsd:string"/>
   <xsd:element name="correlationID" type="xsd:string"/>
  </xsd:sequence>
  <xsd:attribute name="wy" type="xsd:string"/>
 </xsd:complexType>
</xsd:schema>

my code:

 #include <commonj/sdo/SDO.h>

using namespace commonj::sdo;
using namespace std;

void main()  

 {

       DataFactoryPtr mdg  = DataFactory::getDataFactory();
  
        XSDHelperPtr myXSDHelper = HelperProvider::getXSDHelper(mdg);
        const char* m=myXSDHelper->defineFile("msg.xsd");
        TypeList tl = mdg->getTypes();
        char* xsdStr=myXSDHelper->generate(tl,"RCMQ");
        cout<<xsdStr;

}

the result of  running:

<xsd:schema xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" 
xmlns:tns="RCMQ" targetNamespace="RCMQ" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
 <xsd:element name="rCMQMessage" type="RCMQMessage"/>
 <xsd:complexType name="RCMQMessage">
  <xsd:sequence>
   <xsd:element name="messageID" type="xsd:String" minOccurs="0"/>
   <xsd:element name="correlationID" type="xsd:String" minOccurs="0"/>
   <xsd:element name="wy" type="xsd:String"/>
  </xsd:sequence>
  
 </xsd:complexType>
</xsd:schema>

   I find the result is not consistent with the former schema,  the attribute 
in former schema becomes element in new schema.  In fact , they should be 
consistent.
   I download Tuscany SDO C++ M3 Source Release for Windows, which is the 
newest version at present. 
   I think there is a little bug in the sourcecode,  and I find out it and 
rectify this error, and resolve the problem.

 my way to solve:

rectify in the file : SDOSchemaSAX2Parser.cpp

  // 
============================================================================
        // startAttribute
        // 
============================================================================
        void SDOSchemaSAX2Parser::startAttribute(
            const SDOXMLString& localname,
            const SDOXMLString& prefix,
            const SDOXMLString& URI,
            const SAX2Namespaces& namespaces,
            const SAX2Attributes& attributes)
        {

            LOGINFO_1( INFO,"SchemaParser:startAttribute:%s",(const 
char*)localname);

            if (!bInSchema) return;

            PropertyDefinitionImpl thisProperty;
            
            thisProperty.isElement = false;
            thisProperty.isContainment = false;  // this is my rectification. I 
add this statement.
           
            
            setName(attributes,
                thisProperty.name,
                thisProperty.localname);

            thisProperty.namespaceURI = schemaInfo.getTargetNamespaceURI();

            setType(thisProperty, attributes, namespaces);
            
            setCurrentProperty(thisProperty);                    
        }

   Your Project of SDO C++ is very good and perfect, athough it has some little 
problems. I  hope you can pay attention to my problem and resolve it , my 
rectification is just a  reference.



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to