--- parser3/src/classes/xdoc.C 2001/10/08 08:21:04 1.11 +++ parser3/src/classes/xdoc.C 2001/10/12 12:15:32 1.15 @@ -4,7 +4,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: xdoc.C,v 1.11 2001/10/08 08:21:04 parser Exp $ + $Id: xdoc.C,v 1.15 2001/10/12 12:15:32 parser Exp $ */ #include "classes.h" #ifdef XML @@ -20,7 +20,7 @@ #include #include #include -#include +#include "XalanTransformer2.hpp" #include # include # include @@ -253,7 +253,7 @@ static void _save(Request& r, const Stri FormatterTreeWalker treeWalker(*formatterListener); treeWalker.traverse(&node); // Walk that node and produce the XML... } catch(const XSLException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } } @@ -278,7 +278,7 @@ static void _string(Request& r, const St // write out result r.write_no_lang(parserString); } catch(const XSLException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } } @@ -317,11 +317,12 @@ static void _file(Request& r, const Stri vfile.set(false/*tainted*/, cstr, strlen(cstr), 0/*file_name*/, vcontent_type); r.write_no_lang(vfile); } catch(const XSLException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } } static void _set(Request& r, const String& method_name, MethodParams *params) { + //_asm int 3; Pool& pool=r.pool(); VXdoc& vdoc=*static_cast(r.self); @@ -331,31 +332,24 @@ static void _set(Request& r, const Strin std::istrstream stream(xml.cstr()); const XalanParsedSource* parsedSource; -/* int error=vdoc.transformer().parseSource(&stream, parsedSource); - - if(error) - PTHROW(0, 0, - &method_name, - vdoc.transformer().getLastError()); -*/ try { parsedSource = new XalanDefaultParsedSource2(&stream); } catch (XSLException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } catch (SAXParseException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } catch (SAXException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } catch (XMLException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } catch(const XalanDOMException& e) { - r._throw(&method_name, e); + pool.exception()._throw(pool, &method_name, e); } // replace any previous parsed source @@ -371,12 +365,24 @@ static void _load(Request& r, const Stri const char *filespec=r.absolute(file_name).cstr(String::UL_FILE_SPEC); const XalanParsedSource* parsedSource; - int error=vdoc.transformer().parseSource(filespec, parsedSource); - - if(error) - PTHROW(0, 0, - &file_name, - vdoc.transformer().getLastError()); + try { + parsedSource = new XalanDefaultParsedSource2(filespec); + } + catch (XSLException& e) { + pool.exception()._throw(pool, &method_name, e); + } + catch (SAXParseException& e) { + pool.exception()._throw(pool, &method_name, e); + } + catch (SAXException& e) { + pool.exception()._throw(pool, &method_name, e); + } + catch (XMLException& e) { + pool.exception()._throw(pool, &method_name, e); + } + catch(const XalanDOMException& e) { + pool.exception()._throw(pool, &method_name, e); + } // replace any previous parsed source vdoc.set_parsed_source(*parsedSource); @@ -384,7 +390,7 @@ static void _load(Request& r, const Stri static void add_xslt_param(const Hash::Key& aattribute, Hash::Val *ameaning, void *info) { - XalanTransformer& transformer=*static_cast(info); + XalanTransformer2& transformer=*static_cast(info); const char *attribute_cstr=aattribute.cstr(); const char *meaning_cstr=static_cast(ameaning)->as_string().cstr(); @@ -419,18 +425,34 @@ static void _transform(Request& r, const // target XalanDocument* target=vdoc.parser_liaison().createDocument(); - XSLTResultTarget domResultTarget(target); // transform - int error=vdoc.transformer().transform( - parsed_source, - &connection.stylesheet(true/*nocache*/), - domResultTarget); - connection.close(); - if(error) - PTHROW(0, 0, - &stylesheet_file_name, - vdoc.transformer().getLastError()); + try { + vdoc.transformer().transform2( + parsed_source, + &connection.stylesheet(true/*nocache*/), + target); + } + catch (XSLException& e) { + connection.close(); + pool.exception()._throw(pool, &stylesheet_file_name, e); + } + catch (SAXParseException& e) { + connection.close(); + pool.exception()._throw(pool, &stylesheet_file_name, e); + } + catch (SAXException& e) { + connection.close(); + pool.exception()._throw(pool, &stylesheet_file_name, e); + } + catch (XMLException& e) { + connection.close(); + pool.exception()._throw(pool, &stylesheet_file_name, e); + } + catch(const XalanDOMException& e) { + connection.close(); + pool.exception()._throw(pool, &stylesheet_file_name, e); + } // write out result VXdoc& result=*new(pool) VXdoc(pool);