00001
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\"> A " <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;
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
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
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
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
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
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204 return 0;
00205 }
00206