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