main.cpp

Go to the documentation of this file.
00001 // main.cpp,v 1.25 2006/04/20 09:55:37 jwillemsen Exp
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 #endif /* USE_ZZIP */
00068             break;
00069           default:
00070             usage(argv[0]);
00071             return -1;
00072         }
00073     }
00074 
00075   if (str == 0 && filename == 0 && url == 0) {
00076     usage(argv[0]);
00077     return -1;
00078   }
00079 
00080   ACEXML_DefaultHandler *handler = 0;
00081   ACEXML_CharStream *stm = 0;
00082   ACEXML_FileCharStream *fstm = 0;
00083   ACEXML_HttpCharStream *ustm = 0;
00084   ACEXML_StrCharStream* sstm = 0;
00085 #ifdef USE_ZZIP
00086   ACEXML_ZipCharStream* zstm = 0;
00087 #endif /* USE_ZZIP */
00088   if (filename != 0)
00089     {
00090 #ifdef USE_ZZIP
00091       if (zip)
00092         {
00093           ACE_NEW_RETURN (zstm, ACEXML_ZipCharStream(), -1);
00094           if (zstm->open (filename) != 0)
00095             ACE_ERROR_RETURN ((LM_ERROR,
00096                                ACE_TEXT ("Failed to open XML file: %s\n"),
00097                                filename),
00098                               -1);
00099           stm = zstm;
00100         }
00101       else
00102         {
00103 #endif /* USE_ZZIP */
00104           ACE_NEW_RETURN (fstm, ACEXML_FileCharStream (), -1);
00105           if (fstm->open (filename) != 0)
00106             ACE_ERROR_RETURN ((LM_ERROR,
00107                                ACE_TEXT ("Failed to open XML file: %s\n"),
00108                                filename),
00109                               -1);
00110           stm = fstm;
00111 #ifdef USE_ZZIP
00112         }
00113 #endif /* USE_ZZIP */
00114     }
00115   else if (url != 0)
00116     {
00117 
00118       ACE_NEW_RETURN (ustm, ACEXML_HttpCharStream (), -1);
00119       if (ustm->open (url) != 0)
00120         ACE_ERROR_RETURN ((LM_ERROR,
00121                            ACE_TEXT ("Failed to open URL : %s\n"),
00122                            url),
00123                           -1);
00124       stm = ustm;
00125     }
00126   else
00127     {
00128       ACE_NEW_RETURN (sstm, ACEXML_StrCharStream, -1);
00129       if (sstm->open (test_string, ACE_TEXT ("test_string")) < 0)
00130         ACE_ERROR_RETURN ((LM_ERROR,
00131                            ACE_TEXT ("Failed to open string : %s\n"),
00132                            test_string),
00133                           -1);
00134       stm = sstm;
00135     }
00136 
00137   ACEXML_Char* name = (filename == 0) ? url : filename;
00138   if (sax == 0)
00139     ACE_NEW_RETURN (handler,
00140                     ACEXML_Print_Handler (name),
00141                     -1);
00142   else
00143     ACE_NEW_RETURN (handler,
00144                     ACEXML_SAXPrint_Handler (name),
00145                     -1);
00146   auto_ptr<ACEXML_DefaultHandler> cleanup_handler (handler);
00147 
00148   ACEXML_Parser parser;
00149   ACEXML_InputSource input (stm);
00150 
00151   parser.setContentHandler (handler);
00152   parser.setDTDHandler (handler);
00153   parser.setErrorHandler (handler);
00154   parser.setEntityResolver (handler);
00155   ACEXML_DECLARE_NEW_ENV;
00156 
00157   ACEXML_TRY_EX (FIRST)
00158   {
00159     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00160     ACEXML_TRY_CHECK_EX (FIRST);
00161   }
00162   ACEXML_CATCH (ACEXML_Exception, ex)
00163     {
00164       ex.print();
00165       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00166     }
00167   ACEXML_ENDTRY;
00168   ACEXML_TRY_EX (SECOND)
00169   {
00170     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00171     ACEXML_TRY_CHECK_EX (SECOND);
00172   }
00173   ACEXML_CATCH (ACEXML_SAXException, ex)
00174     {
00175       ex.print();
00176       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00177       return 1;
00178     }
00179   ACEXML_ENDTRY;
00180 //   ACEXML_TRY_EX (THIRD)
00181 //   {
00182 //     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00183 //     ACEXML_TRY_CHECK_EX (THIRD);
00184 //   }
00185 //   ACEXML_CATCH (ACEXML_SAXException, ex)
00186 //     {
00187 //       ex.print();
00188 //       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00189 //       return 1;
00190 //     }
00191 //   ACEXML_ENDTRY;
00192 //   ACEXML_TRY_EX (FOURTH)
00193 //   {
00194 //     parser.parse (&input ACEXML_ENV_ARG_PARAMETER);
00195 //     ACEXML_TRY_CHECK_EX (FOURTH);
00196 //   }
00197 //   ACEXML_CATCH (ACEXML_SAXException, ex)
00198 //     {
00199 //       ex.print();
00200 //       ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred. Exiting...\n")));
00201 //       return 1;
00202 //     }
00203 //   ACEXML_ENDTRY;
00204   return 0;
00205 }
00206 

Generated on Thu Nov 9 11:45:37 2006 for ACEXML by doxygen 1.3.6