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.