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 #else
00068 break;
00069 #endif
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
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
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
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
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205 return 0;
00206 }
00207