parseData (...) WAS invoked eithter with: a_data already containing wellformed xml-data (due to size no buffering to hdd was needed). buffer filled with xml-data read from file were a_data contained the filename. Xmlhandler just parses from memory.
parseData (...) NOW is invoked with: a_data containing either xml-data OR filename (a_size == 0: a_data contains filename->parse from hdd, otherwise allocate MemBufInputSource object). Xmlhandler decides from which source to parse. Matthias -----Original Message----- From: Alberto Massari [mailto:[EMAIL PROTECTED] Sent: Tuesday, June 03, 2008 10:49 AM To: [email protected] Subject: Re: [solved/workaround]RE: MemBufInputSource: Unknown Exception Maybe it's just bad naming, but couldn't be that the a_data you are using in the function is the same a_data where you store the file name? Are you invoking parseData(a_size, buffer)? Alberto Matthias Höpfer wrote: > Alberto: > Thanks for your hint. > > Steps were as follows: > - receive xml fragments time by time > - save to hdd > - load xml into buffer > - forward buffer to xmlhandler > - parse with xerces > > Below is the code i loaded the xml into buffer: > > // reading from file, then forward buffer to xml handler > std::string strfile ( (char*)a_data ); > ifstream file ( strfile.c_str(), ios::in ); > char* buffer = new char [a_size]; > > file.read ( buffer, a_size ); > > // fwd buffer to xmlhandler an parse with xerces > > Anyway, i left the 'load xml to buffer' completely and forwarded just the > filename to xerces. Which seems a cleaner solution to me. Adding ios::binary > didn't work either. The problem just occurs on this special kind of > buffer/filelenght. There's no problem if the size is smaler. > > The new steps are: > - receive xml fragments time by time > - save to hdd > - forward filename to xmlhandler > - parse with xerces > > Thanks for your help, folks. Issue solved due to my needs. > > Matthias > > -----Original Message----- > From: Alberto Massari [mailto:[EMAIL PROTECTED] > Sent: Tuesday, June 03, 2008 10:06 AM > To: [email protected] > Subject: Re: MemBufInputSource: Unknown Exception > > The exception should be an UTFDataFormatException, that complains > about an invalid UTF-8 structure; if the XML can be parsed when is on > the disk, maybe the code that loads it has a bug (maybe you are > opening it as a text stream, and single \n gets turned into \n\r) > > Alberto > > > Matthias Höpfer wrote: > >> Dave: >> You're right, i'm using Visual Studio (6.0 beeing exactly). I catch an >> '...(KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception.'. Stepping through >> the calling stack didn't help me (me, but maybe someone else...) any further. >> >> KERNEL32! 7c812a5b() >> MSVCRTD! [EMAIL PROTECTED] + 57 bytes >> xercesc_2_8::XMLUTF8Transcoder::checkTrailingBytes(const unsigned >> char 205, const unsigned int 1, const unsigned int 1) line 110 >> xercesc_2_8::XMLUTF8Transcoder::transcodeFrom(const unsigned char * >> const 0x01afcc67, const unsigned int 6807, unsigned short * const >> 0x01ad8c24, const unsigned int 16384, unsigned int & 36826000, >> unsigned char * const 0x01ae0c28) line 246 >> xercesc_2_8::XMLReader::xcodeMoreChars(unsigned short * const >> 0x01ad8c24, unsigned char * const 0x01ae0c28, const unsigned int >> 16384) line 1751 + 78 bytes >> xercesc_2_8::XMLReader::refreshCharBuffer() line 547 + 42 bytes >> xercesc_2_8::XMLReader::getNextChar(unsigned short & 59792) line 714 >> + >> 8 bytes >> xercesc_2_8::ReaderMgr::getNextChar() line 95 + 15 bytes >> xercesc_2_8::IGXMLScanner::scanAttValue(const xercesc_2_8::XMLAttDef >> * const 0x00000000, const unsigned short * const 0x01b0cb88, >> xercesc_2_8::XMLBuffer & {...}) line 2319 + 14 bytes >> xercesc_2_8::IGXMLScanner::scanStartTag(unsigned char & 1) line 1860 >> + >> 32 bytes >> xercesc_2_8::IGXMLScanner::scanContent() line 899 >> xercesc_2_8::IGXMLScanner::scanDocument(const >> xercesc_2_8::InputSource & {...}) line 214 + 8 bytes >> xercesc_2_8::AbstractDOMParser::parse(const xercesc_2_8::InputSource >> & >> {...}) line 519 CXmlHandler::parseDataRequest(const unsigned int >> 39610, const unsigned char * 0x01ec2b10) line 66 + 17 bytes >> >> I still don't know what's wrong. (Therefore i included the calling >> stack. Maybe someone's got a clue...) >> >> At the moment i'm thinking about inserting an switch deciding between memory >> or file input. But i'd definitely prefer the memory input source. >> >> Matthias >> >> -----Original Message----- >> From: David Bertoni [mailto:[EMAIL PROTECTED] >> Sent: Monday, June 02, 2008 7:45 PM >> To: [email protected] >> Subject: Re: MemBufInputSource: Unknown Exception >> >> Matthias Hopfer wrote: >> >> >>> Hi all, >>> >>> Currently i'm trying to parse a well formed xml from memory via >>> MemBufInputSource. >>> >>> // init above works fine >>> // code start >>> >>> >> ... >> >> >> >>> catch (...) >>> { >>> TRACE ( _T("CXmlHandler::parseDataRequest(): catched UKNOWN >>> Exception\n") ); >>> } >>> //... >>> } >>> // code end >>> >>> Every time i catch an 'Unknown Exception' and i don't know why. If >>> i'm parsing the file directly from HDD, it works without any errors. >>> The file itself is a wellformed xml but pretty 'huge' (39610 bytes). >>> Assuming that there are no mistakes reading the file into memory >>> (did it quite often...=), i have absolutely no clue what i'm doing wrong. >>> >>> Anybody hints? >>> >>> >> If I had to guess, I would say it's an access violation. However, instead >> of having us guess, you might want to run this in the debugger. >> It looks like you're using Visual Studio, so the debugger will display the >> type of exception in the output window. You can also configure the debugger >> to break when an exception is thrown, which will help you determine where >> the exception is thrown. >> >> Dave >> >> >> > > >
