Changeset 659


Ignore:
Timestamp:
09/22/14 15:57:36 (3 years ago)
Author:
jls17
Message:
  • updated xml tests (legacy parsing didn't parse invalid docs as well)
  • added more error handling to the setfields-helper for parsing of webservice details
Location:
branches/work_312
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/work_312/doc/DocActionSetFieldsHelper.cpp

    r585 r659  
    1919#include "DocAllMatchingIdsTable.h" 
    2020#include "../core/ARAssignHelper.h" 
     21#include "../output/ObjNotFound.h" 
    2122 
    2223CDocActionSetFieldsHelper::CDocActionSetFieldsHelper(CARInside &arInside, CARServerObject &arServerObject, const string& objAttachedToSchemaName, const ARSetFieldsActionStruct& sFieldStruct, int structItemType, IfElseState ifElseMode, int numAction, int rootLevel) 
     
    210211                                        TiXmlDocument inputXML; 
    211212                                        inputXML.Parse(setFieldsStruct.fieldList.fieldAssignList[0].assignment.u.filterApi->inputValues[9].u.value.u.charVal, 0, TIXML_DEFAULT_ENCODING); 
     213 
     214                                        // TODO: this is just a quick and dirty workarround, which might work in some but not all cases. See test/TinyXmlTests.cpp for 
     215                                        //       more details. Full UTF-8 support might be needed for a real solution. 
     216                                        if (inputXML.Error()) 
     217                                        { 
     218                                                cout << "WARN: parsing input xml of filter '" << obj.GetName() << "' failed with: " << inputXML.ErrorDesc() << "!" << endl;                                              
     219                                        } 
     220 
    212221                                        TiXmlHandle inputHandle(&inputXML); 
    213222                                        TiXmlNode *element = inputHandle.FirstChild("arDocMapping").FirstChild("formMapping").ToNode(); 
     
    216225                                        tblInputMappingList.AddColumn(30, "Element"); 
    217226                                        tblInputMappingList.AddColumn(70, "Field"); 
     227 
    218228                                        input << processMappingXML(element, "", tblInputMappingList, "", WMM_INPUT); 
    219229                                        input << tblInputMappingList; 
     230                                        if (inputXML.Error()) 
     231                                        { 
     232                                                ObjNotFound notFound(input); 
     233                                                notFound << "<p>Parsing webservice input mapping failed! " << inputXML.ErrorDesc() << " (" << inputXML.ErrorRow() << "," << inputXML.ErrorCol() << ")" << " Mapping might be incomplete!" << "</p>"; 
     234                                                notFound.End(); 
     235                                        } 
    220236                                        writer << "<BR/>"; 
    221237                                        writer << "Input Mapping: " << input.str() << "<BR/>"; 
     
    230246                                        TiXmlDocument outputXML; 
    231247                                        outputXML.Parse(setFieldsStruct.fieldList.fieldAssignList[0].assignment.u.filterApi->inputValues[10].u.value.u.charVal, 0, TIXML_DEFAULT_ENCODING); 
     248 
     249                                        if (outputXML.Error()) 
     250                                        { 
     251                                                cout << "WARN: parsing output xml of filter '" << obj.GetName() << "' failed with: " << outputXML.ErrorDesc() << "!" << endl; 
     252                                        } 
     253 
    232254                                        TiXmlHandle outputHandle(&outputXML); 
    233255                                        TiXmlNode *element = outputHandle.FirstChild("arDocMapping").FirstChild("formMapping").ToNode(); 
     
    239261                                        output << processMappingXML(element, "", tblOutputMappingList, "", WMM_OUTPUT); 
    240262                                        output << tblOutputMappingList; 
     263                                        if (outputXML.Error()) 
     264                                        { 
     265                                                ObjNotFound notFound(output); 
     266                                                notFound << "<p>Parsing webservice output mapping failed! " << outputXML.ErrorDesc() << " (" << outputXML.ErrorRow() << "," << outputXML.ErrorCol() << ")" << " Mapping might be incomplete!" << "</p>"; 
     267                                                notFound.End(); 
     268                                        } 
    241269                                        writer << "Output Mapping: " << output.str(); 
    242270                                } 
     
    311339        { 
    312340        case TiXmlNode::ELEMENT: 
     341#ifdef _DEBUG 
     342                { 
     343                        const TiXmlElement *pEl = pParent->ToElement(); 
     344                        cout << "<" << pEl->Value() << endl; 
     345                        const TiXmlAttribute *pAttr = pEl->FirstAttribute(); 
     346                        for (; pAttr != NULL; pAttr = pAttr->Next()) 
     347                        { 
     348                                cout << "  Name: " << pAttr->Name() << " -- Value: " << pAttr->Value() << endl; 
     349                        } 
     350                        cout << ">" << endl; 
     351                } 
     352#endif 
    313353                if (strcmp("element",pParent->Value()) == 0) 
    314354                { 
    315                         sParent = pParent->ToElement()->Attribute("name"); 
     355                        const char* name = pParent->ToElement()->Attribute("name"); 
     356                        if (name) 
     357                                sParent = name; 
     358                        else 
     359                                sParent.clear(); 
    316360                } 
    317361                else if (strcmp("formMapping",pParent->Value()) == 0) 
    318362                { 
    319                         form = pParent->FirstChild("form")->ToElement()->Attribute("formName"); 
     363                        const char* formName = pParent->FirstChild("form")->ToElement()->Attribute("formName"); 
     364                        if (formName) 
     365                                form = formName; 
     366                        else 
     367                                form.clear(); 
    320368                } 
    321369                else if (strcmp("fieldMapping",pParent->Value()) == 0) 
    322370                { 
    323                         int fieldID = atoi(pParent->ToElement()->Attribute("arFieldId")); 
     371                        const char* arFieldId = pParent->ToElement()->Attribute("arFieldId"); 
     372                        int fieldID = 0; 
     373                        if (arFieldId) 
     374                                fieldID = atoi(arFieldId); 
    324375 
    325376                        CTableRow row("cssStdRow"); 
  • branches/work_312/test/TinyXmlTests.cpp

    r655 r659  
    3838 
    3939        ASSERT_FALSE(inputXML.Error()); 
     40 
     41        TiXmlHandle inputHandle(&inputXML); 
     42        TiXmlElement *element = inputHandle.FirstChild("arDocMapping").FirstChild("element").ToElement(); 
     43        const char* attr = element->Attribute("form"); 
     44 
     45        ASSERT_STREQ("qualified", attr); 
    4046} 
    4147 
     
    5662        TiXmlDocument inputXML; 
    5763 
     64        // parsing the first time fails! 
    5865        inputXML.Parse(xmlDoc, 0, TIXML_DEFAULT_ENCODING); 
    5966        ASSERT_TRUE(inputXML.Error()); 
    6067 
     68        // parsing in legacy mode doesn't fail, but .... 
    6169        inputXML.Parse(xmlDoc, 0, TIXML_ENCODING_LEGACY); 
    6270        ASSERT_FALSE(inputXML.Error()); 
     71 
     72        // ... the document isn't parsed correctly. We can't read the 'form' attribute! 
     73        TiXmlHandle inputHandle(&inputXML); 
     74        TiXmlElement *element = inputHandle.FirstChild("arDocMapping").FirstChild("element").ToElement(); 
     75        const char* attr = element->Attribute("form"); 
     76 
     77        ASSERT_EQ(NULL, attr); 
    6378} 
Note: See TracChangeset for help on using the changeset viewer.