[xsd-users] Help me: How do I redirect the exception message from
console output to a memory buffer
James Mei
jxmei3 at gmail.com
Sun Oct 18 07:35:21 EDT 2009
Hi Boris
I have found the mistake, I did not inherit the abstract class. Here is the
result
class MyErrorHandle : public ::xml_schema::error_handler
{
public:
MyErrorHandle()
{
}
// template <typename C>
bool
handle (const std::basic_string<char>& id,
unsigned long line,
unsigned long column,
severity,
const std::basic_string<char>& message)
{
cout << id << message << endl;
return true;
}
~MyErrorHandle ()
{
}
};
int main (int argc, char* argv[])
{
try
{
using namespace SC_SCL;
MyErrorHandle *eh = new MyErrorHandle();
// auto_ptr<SCL> h (SCL_(argv[1], *eh, xml_schema::flags::dont_validate,
p));
auto_ptr<SCL> h (SCL_(argv[1], *eh, 0, p));
h.get()->Header().revision("abc");
xml_schema::namespace_infomap map;
map[""].name = "http://www.iec.ch/61850/2003/SCL";
map[""].schema = "SCL.xsd";
ofstream outfile(argv[2], ios::out);
SCL_ (outfile, *h, map);
}
catch (const xml_schema::exception& e)
{
cerr << e << endl;
return 1;
}
}
Cheers
James
On Sun, Oct 18, 2009 at 5:26 PM, James Mei <jxmei3 at gmail.com> wrote:
> Hi Boris
>
>
> You can use std::ostringstream to serialize the diagnostics to a string.
>>
>
> Do you have an example on doing it ?
>
> You can also programmatically access each parsing/serialization
>> diagnostics
>
> message by catching the xml_schema::parsing and/or xml_schema::validation
>> exceptions and using their accessors to extract this information. For
>> details, see Section 3.3, "Error Handling" in the C++/Tree Mapping User
>> Manual:
>>
>>
>> http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3.3
>>
>
> I have tried doing it, it seems like I did something wrong in the
> auto_ptr<SCL> and it will not compile.
>
> #include <iostream>
> #include <fstream>
> #include "scl\SCL.hxx"
>
> using namespace std;
>
> class error_handler
> {
> public:
> struct severity
> {
> enum value
> {
> warning,
> error,
> fatal
> };
> };
>
> virtual bool
> handle (const std::basic_string<char>& id,
> unsigned long line,
> unsigned long column,
> severity,
> const std::basic_string<char>& message) = 0;
>
> virtual
> ~error_handler ();
> };
> //implementation
> bool
> error_handler::handle (const std::basic_string<char>& id,
> unsigned long line,
> unsigned long column,
> severity,
> const std::basic_string<char>& message)
> {
> cout << id << message << endl;
> }
>
>
> int main (int argc, char* argv[])
> {
> try
> {
> using namespace SC_SCL;
> //I am trying to use the following
> // ::std::auto_ptr< ::SC_SCL::SCL >
> // SCL_ (const ::std::string& u,
> // ::xml_schema::error_handler& h,
> // ::xml_schema::flags f,
> // const ::xml_schema::properties& p)
> error_handler *eh;
> //compilation error Could not find a match for 'SCL_(char
> *,xml_schema::error_handler *,const unsigned long,int)'
> auto_ptr<SCL> h (SCL_(argv[1], (::xml_schema::error_handler *)eh, 0,
> NULL)); //not using xml_schema::flags::dont_validate
>
> h.get()->Header().revision("abc");
> xml_schema::namespace_infomap map;
>
> map[""].name = "http://www.iec.ch/61850/2003/SCL";
> map[""].schema = "SCL.xsd";
>
> ofstream outfile(argv[2], ios::out);
> SCL_ (outfile, *h, map);
> }
> catch (const xml_schema::exception& e)
> {
> cerr << e << endl;
> return 1;
> }
> }
>
> May I know what is the correct way to implement the "error_handler" ?
>
> Cheers
>
>
>
More information about the xsd-users
mailing list