main.cpp

Go to the documentation of this file.
00001 // $Id: main.cpp 78399 2007-05-18 02:54:37Z sowayaa $
00002 
00003 #include "ACEXML/common/FileCharStream.h"
00004 #include "ACEXML/common/HttpCharStream.h"
00005 #include "ACEXML/common/StrCharStream.h"
00006 #include "ACEXML/common/ZipCharStream.h"
00007 #include "ACEXML/parser/parser/Parser.h"
00008 #include "Print_Handler.h"
00009 #include "SAXPrint_Handler.h"
00010 #include "ace/Get_Opt.h"
00011 #include "ace/Auto_Ptr.h"
00012 #include "ace/Log_Msg.h"
00013 #include "ace/OS_main.h"
00014 
00015 static const ACEXML_Char *test_string =
00016 ACE_TEXT ("<?xml version='1.0'?> <ACE_Svc_Conf> <static id=\"ACE_Service_Manager\" params='-d -p 4911'/> <dynamic id=\"Test_Task\" type=\"service_object\"> &#65; &quot; <initializer path=\"CCM_App\" init='_make_Test_Task' params='-p 3000'/> </dynamic> </ACE_Svc_Conf>");
00017 
00018 static void
00019 usage (const ACE_TCHAR* program)
00020 {
00021   ACE_ERROR ((LM_ERROR,
00022               ACE_TEXT ("Usage: %s [-sl] [-f <filename> | -u <url> | -z <ZIP Archive>]\n")
00023               ACE_TEXT ("  -s: Use SAXPrint_Handler (Default is Print_Handler)\n")
00024               ACE_TEXT ("  -l: Parse the internal strings (test the StrCharStream class)\n")
00025               ACE_TEXT ("  -f: Specify the filename when -l is not specified\n")
00026               ACE_TEXT ("  -z: Specify that the file is inside a ZIP archive\n")
00027               ACE_TEXT ("  -u: URL specifying the path to the file\n"),
00028               program));
00029 }
00030 
00031 int
00032 ACE_TMAIN (int argc, ACE_TCHAR *argv[])
00033 {
00034   ACEXML_Char* filename = 0;
00035   int sax = 0;                  // Use SAXPrint handler or not.
00036   int str = 0;
00037   int zip = 0;
00038   ACEXML_Char* url = 0;
00039 
00040   ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("sf:lu:z"));
00041   int c;
00042 
00043   while ((c = get_opt ()) != EOF)
00044     {
00045       switch (c)
00046         {
00047           case 's':
00048             sax = 1;
00049             break;
00050           case 'l':
00051             str = 1;
00052             break;
00053           case 'f':
00054             filename = get_opt.opt_arg ();
00055             break;
00056           case 'u':
00057             url = get_opt.opt_arg();
00058             break;
00059           case 'z':
00060             zip = 1;
00061 #ifndef USE_ZZIP
00062             ACE_ERROR ((LM_ERROR, ACE_TEXT ("ZZIPLIB support has not been")
00063                         ACE_TEXT (" compiled in. Refer to ")
00064                         ACE_TEXT ("$ACE_ROOT/ACEXML/README for more ")
00065                         ACE_TEXT ("information. \n")));
00066             return -1;
00067 #else
00068             break;
00069 #endif /* USE_ZZIP */
00070           default:
00071             usage(argv[0]);
00072             return -1;
00073         }
00074     }
00075 
00076   if (str == 0 && filename == 0 && url == 0) {
00077     usage(argv[0]);
00078     return -1;
00079   }
00080 
00081   ACEXML_DefaultHandler *handler = 0;
00082   ACEXML_CharStream *stm = 0;
00083   ACEXML_FileCharStream *fstm = 0;
00084   ACEXML_HttpCharStream *ustm = 0;
00085   ACEXML_StrCharStream* sstm = 0;
00086 #ifdef USE_ZZIP
00087   ACEXML_ZipCharStream* zstm = 0;
00088 #endif /* USE_ZZIP */
00089   if (filename != 0)
00090     {
00091 #ifdef USE_ZZIP
00092       if (zip)
00093         {
00094           ACE_NEW_RETURN (zstm, ACEXML_ZipCharStream(), -1);
00095           if (zstm->open (filename) != 0)
00096             ACE_ERROR_RETURN ((LM_ERROR,
00097                                ACE_TEXT ("Failed to open XML file: %s\n"),
00098                                filename),
00099                               -1);
00100           stm = zstm;
00101         }
00102       else
00103         {
00104 #endif /* USE_ZZIP */
00105           ACE_NEW_RETURN (fstm, ACEXML_FileCharStream (), -1);
00106           if (fstm->open (filename) != 0)
00107             ACE_ERROR_RETURN ((LM_ERROR,
00108                                ACE_TEXT ("Failed to open XML file: %s\n"),
00109                                filename),
00110                               -1);
00111           stm = fstm;
00112 #ifdef USE_ZZIP
00113         }
00114 #endif /* USE_ZZIP */
00115     }
00116   else if (url != 0)
00117     {
00118 
00119       ACE_NEW_RETURN (ustm, ACEXML_HttpCharStream (), -1);
00120       if (ustm->open (url) != 0)
00121         ACE_ERROR_RETURN ((LM_ERROR,
00122                            ACE_TEXT ("Failed to open URL : %s\n"),
00123                            url),
00124                           -1);
00125       stm = ustm;
00126     }
00127   else
00128     {
00129       ACE_NEW_RETURN (sstm, ACEXML_StrCharStream, -1);
00130       if (sstm->open (test_string, ACE_TEXT ("test_string")) < 0)
00131         ACE_ERROR_RETURN ((LM_ERROR,
00132                            ACE_TEXT ("Failed to open string : %s\n"),
00133                            test_string),
00134                           -1);
00135       stm = sstm;
00136     }
00137 
00138   ACEXML_Char* name = (filename == 0) ? url : filename;
00139   if (sax == 0)
00140     ACE_NEW_RETURN (handler,
00141                     ACEXML_Print_Handler (name),
00142                     -1);
00143   else
00144     ACE_NEW_RETURN (handler,
00145                     ACEXML_SAXPrint_Handler (name),
00146                     -1);
00147   auto_ptr<ACEXML_DefaultHandler> cleanup_handler (handler);
00148 
00149   ACEXML_Parser parser;
00150   ACEXML_InputSource input (stm);
00151 
00152   parser.setContentHandler (handler);
00153   parser.setDTDHandler (handler);
00154   parser.setErrorHandler (handler);
00155   parser.setEntityResolver (handler);
00156   ACEXML_DECLARE_NEW_ENV;
00157 
00158   ACEXML_TRY_EX (FIRST)
00159   {
00160     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00161     ACEXML_TRY_CHECK_EX (FIRST);
00162   }
00163   ACEXML_CATCH (ACEXML_Exception, ex)
00164     {
00165       ex.print();
00166       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00167     }
00168   ACEXML_ENDTRY;
00169   ACEXML_TRY_EX (SECOND)
00170   {
00171     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00172     ACEXML_TRY_CHECK_EX (SECOND);
00173   }
00174   ACEXML_CATCH (ACEXML_SAXException, ex)
00175     {
00176       ex.print();
00177       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00178       return 1;
00179     }
00180   ACEXML_ENDTRY;
00181 //   ACEXML_TRY_EX (THIRD)
00182 //   {
00183 //     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00184 //     ACEXML_TRY_CHECK_EX (THIRD);
00185 //   }
00186 //   ACEXML_CATCH (ACEXML_SAXException, ex)
00187 //     {
00188 //       ex.print();
00189 //       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00190 //       return 1;
00191 //     }
00192 //   ACEXML_ENDTRY;
00193 //   ACEXML_TRY_EX (FOURTH)
00194 //   {
00195 //     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00196 //     ACEXML_TRY_CHECK_EX (FOURTH);
00197 //   }
00198 //   ACEXML_CATCH (ACEXML_SAXException, ex)
00199 //     {
00200 //       ex.print();
00201 //       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00202 //       return 1;
00203 //     }
00204 //   ACEXML_ENDTRY;
00205   return 0;
00206 }
00207 

Generated on Sun Jan 27 13:04:15 2008 for ACEXML by doxygen 1.3.6