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
>>
>>   
>>     
>
>
>   

Reply via email to