Project

General

Profile

1 2778 jones
<html>
2
<%@ page contentType="text/html; charset=utf-8"
3
         import="java.io.InputStream,
4
                 java.io.IOException,
5
                 javax.xml.parsers.SAXParser,
6
                 java.lang.reflect.*,
7
                 javax.xml.parsers.SAXParserFactory"
8
   session="false" %>
9
<%
10
/*
11
 * Copyright 2002,2004,2005 The Apache Software Foundation.
12
 *
13
 * Licensed under the Apache License, Version 2.0 (the "License");
14
 * you may not use this file except in compliance with the License.
15
 * You may obtain a copy of the License at
16
 *
17
 *      http://www.apache.org/licenses/LICENSE-2.0
18
 *
19
 * Unless required by applicable law or agreed to in writing, software
20
 * distributed under the License is distributed on an "AS IS" BASIS,
21
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22
 * See the License for the specific language governing permissions and
23
 * limitations under the License.
24
 */
25
%>
26
27
<%!
28
    /*
29
     * Happiness tests for axis. These look at the classpath and warn if things
30
     * are missing. Normally addng this much code in a JSP page is mad
31
     * but here we want to validate JSP compilation too, and have a drop-in
32
     * page for easy re-use
33
     * @author Steve 'configuration problems' Loughran
34
     * @author dims
35
     * @author Brian Ewins
36
     */
37
38
    /**
39
     * test for a class existing
40
     * @param classname
41
     * @return class iff present
42
     */
43
    Class classExists(String classname) {
44
        try {
45
            return Class.forName(classname);
46
        } catch (ClassNotFoundException e) {
47
            return null;
48
        }
49
    }
50
51
    /**
52
     * test for resource on the classpath
53
     * @param resource
54
     * @return true iff present
55
     */
56
    boolean resourceExists(String resource) {
57
        boolean found;
58
        InputStream instream=this.getClass().getResourceAsStream(resource);
59
        found=instream!=null;
60
        if(instream!=null) {
61
            try {
62
                instream.close();
63
            } catch (IOException e) {
64
            }
65
        }
66
        return found;
67
    }
68
69
    /**
70
     * probe for a class, print an error message is missing
71
     * @param out stream to print stuff
72
     * @param category text like "warning" or "error"
73
     * @param classname class to look for
74
     * @param jarFile where this class comes from
75
     * @param errorText extra error text
76
     * @param homePage where to d/l the library
77
     * @return the number of missing classes
78
     * @throws IOException
79
     */
80
    int probeClass(JspWriter out,
81
                   String category,
82
                   String classname,
83
                   String jarFile,
84
                   String description,
85
                   String errorText,
86
                   String homePage) throws IOException {
87
        try {
88
            Class clazz = classExists(classname);
89
            if(clazz == null)  {
90
               String url="";
91
               if(homePage!=null) {
92
                  url=getMessage("seeHomepage",homePage,homePage);
93
               }
94
               out.write(getMessage("couldNotFound",category,classname,jarFile,errorText,url));
95
               return 1;
96
            } else {
97
               String location = getLocation(out, clazz);
98
99
               if(location == null) {
100
                  out.write("<li>"+getMessage("foundClass00",description,classname)+"</li><br>");
101
               }
102
               else {
103
                  out.write("<li>"+getMessage("foundClass01",description,classname,location)+"</li><br>");
104
               }
105
               return 0;
106
            }
107
        } catch(NoClassDefFoundError ncdfe) {
108
            String url="";
109
            if(homePage!=null) {
110
                url=getMessage("seeHomepage",homePage,homePage);
111
            }
112
            out.write(getMessage("couldNotFoundDep",category, classname, errorText, url));
113
            out.write(getMessage("theRootCause",ncdfe.getMessage(), classname));
114
            return 1;
115
        }
116
    }
117
118
    /**
119
     * get the location of a class
120
     * @param out
121
     * @param clazz
122
     * @return the jar file or path where a class was found
123
     */
124
125
    String getLocation(JspWriter out,
126
                       Class clazz) {
127
        try {
128
            java.net.URL url = clazz.getProtectionDomain().getCodeSource().getLocation();
129
            String location = url.toString();
130
            if(location.startsWith("jar")) {
131
                url = ((java.net.JarURLConnection)url.openConnection()).getJarFileURL();
132
                location = url.toString();
133
            }
134
135
            if(location.startsWith("file")) {
136
                java.io.File file = new java.io.File(url.getFile());
137
                return file.getAbsolutePath();
138
            } else {
139
                return url.toString();
140
            }
141
        } catch (Throwable t){
142
        }
143
        return getMessage("classFoundError");
144
    }
145
146
    /**
147
     * a class we need if a class is missing
148
     * @param out stream to print stuff
149
     * @param classname class to look for
150
     * @param jarFile where this class comes from
151
     * @param errorText extra error text
152
     * @param homePage where to d/l the library
153
     * @throws IOException when needed
154
     * @return the number of missing libraries (0 or 1)
155
     */
156
    int needClass(JspWriter out,
157
                   String classname,
158
                   String jarFile,
159
                   String description,
160
                   String errorText,
161
                   String homePage) throws IOException {
162
        return probeClass(out,
163
                "<b>"+getMessage("error")+"</b>",
164
                classname,
165
                jarFile,
166
                description,
167
                errorText,
168
                homePage);
169
    }
170
171
    /**
172
     * print warning message if a class is missing
173
     * @param out stream to print stuff
174
     * @param classname class to look for
175
     * @param jarFile where this class comes from
176
     * @param errorText extra error text
177
     * @param homePage where to d/l the library
178
     * @throws IOException when needed
179
     * @return the number of missing libraries (0 or 1)
180
     */
181
    int wantClass(JspWriter out,
182
                   String classname,
183
                   String jarFile,
184
                   String description,
185
                   String errorText,
186
                   String homePage) throws IOException {
187
        return probeClass(out,
188
                "<b>"+getMessage("warning")+"</b>",
189
                classname,
190
                jarFile,
191
                description,
192
                errorText,
193
                homePage);
194
    }
195
196
    /**
197
     *  get servlet version string
198
     *
199
     */
200
201
    public String getServletVersion() {
202
        ServletContext context=getServletConfig().getServletContext();
203
        int major = context.getMajorVersion();
204
        int minor = context.getMinorVersion();
205
        return Integer.toString(major) + '.' + Integer.toString(minor);
206
    }
207
208
    /**
209
     * what parser are we using.
210
     * @return the classname of the parser
211
     */
212
    private String getParserName() {
213
        SAXParser saxParser = getSAXParser();
214
        if (saxParser == null) {
215
            return getMessage("couldNotCreateParser");
216
        }
217
218
        // check to what is in the classname
219
        String saxParserName = saxParser.getClass().getName();
220
        return saxParserName;
221
    }
222
223
    /**
224
     * Create a JAXP SAXParser
225
     * @return parser or null for trouble
226
     */
227
    private SAXParser getSAXParser() {
228
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
229
        if (saxParserFactory == null) {
230
            return null;
231
        }
232
        SAXParser saxParser = null;
233
        try {
234
            saxParser = saxParserFactory.newSAXParser();
235
        } catch (Exception e) {
236
        }
237
        return saxParser;
238
    }
239
240
    /**
241
     * get the location of the parser
242
     * @return path or null for trouble in tracking it down
243
     */
244
245
    private String getParserLocation(JspWriter out) {
246
        SAXParser saxParser = getSAXParser();
247
        if (saxParser == null) {
248
            return null;
249
        }
250
        String location = getLocation(out,saxParser.getClass());
251
        return location;
252
    }
253
254
    /**
255
     * Check if class implements specified interface.
256
     * @param Class clazz
257
     * @param String interface name
258
     * @return boolean
259
     */
260
    private boolean implementsInterface(Class clazz, String interfaceName) {
261
        if (clazz == null) {
262
            return false;
263
        }
264
        Class[] interfaces = clazz.getInterfaces();
265
        if (interfaces.length != 0) {
266
            for (int i = 0; i < interfaces.length; i++) {
267
                if (interfaces[i].getName().equals(interfaceName)) {
268
                    return true;
269
                }
270
            }
271
        }
272
        return false;
273
    }
274
    %>
275
276
<%@ include file="i18nLib.jsp" %>
277
278
<%
279
    // initialize a private HttpServletRequest
280
    setRequest(request);
281
282
    // set a resouce base
283
    setResouceBase("i18n");
284
%>
285
286
<head>
287
<title><%= getMessage("pageTitle") %></title>
288
</head>
289
<body bgcolor='#ffffff'>
290
291
<%
292
    out.print("<h1>"+ getMessage("pageTitle") +"</h1>");
293
    out.print("<h2>"+ getMessage("pageRole") +"</h2><p/>");
294
%>
295
296
<%= getLocaleChoice() %>
297
298
<%
299
    out.print("<h3>"+ getMessage("neededComponents") +"</h3>");
300
%>
301
302
<UL>
303
<%
304
    int needed=0,wanted=0;
305
306
    /**
307
     * the essentials, without these Axis is not going to work
308
     */
309
310
    // need to check if the available version of SAAJ API meets requirements
311
    String className = "javax.xml.soap.SOAPPart";
312
    String interfaceName = "org.w3c.dom.Document";
313
    Class clazz = classExists(className);
314
    if (clazz == null || implementsInterface(clazz, interfaceName)) {
315
        needed = needClass(out, "javax.xml.soap.SOAPMessage",
316
        	"saaj.jar",
317
                "SAAJ API",
318
                getMessage("criticalErrorMessage"),
319
                "http://ws.apache.org/axis/");
320
    } else {
321
        String location = getLocation(out, clazz);
322
323
        out.print(getMessage("invalidSAAJ",location));
324
        out.print(getMessage("criticalErrorMessage"));
325
        out.print(getMessage("seeHomepage","http://ws.apache.org/axis/java/install.html",getMessage("axisInstallation")));
326
        out.print("<br>");
327
    }
328
329
    needed+=needClass(out, "javax.xml.rpc.Service",
330
            "jaxrpc.jar",
331
            "JAX-RPC API",
332
            getMessage("criticalErrorMessage"),
333
            "http://ws.apache.org/axis/");
334
335
    needed+=needClass(out, "org.apache.axis.transport.http.AxisServlet",
336
            "axis.jar",
337
            "Apache-Axis",
338
            getMessage("criticalErrorMessage"),
339
            "http://ws.apache.org/axis/");
340
341
    needed+=needClass(out, "org.apache.commons.discovery.Resource",
342
            "commons-discovery.jar",
343
            "Jakarta-Commons Discovery",
344
            getMessage("criticalErrorMessage"),
345
            "http://jakarta.apache.org/commons/discovery/");
346
347
    needed+=needClass(out, "org.apache.commons.logging.Log",
348
            "commons-logging.jar",
349
            "Jakarta-Commons Logging",
350
            getMessage("criticalErrorMessage"),
351
            "http://jakarta.apache.org/commons/logging/");
352
353
    needed+=needClass(out, "org.apache.log4j.Layout",
354
            "log4j-1.2.8.jar",
355
            "Log4j",
356
            getMessage("uncertainErrorMessage"),
357
            "http://jakarta.apache.org/log4j");
358
359
    //should we search for a javax.wsdl file here, to hint that it needs
360
    //to go into an approved directory? because we dont seem to need to do that.
361
    needed+=needClass(out, "com.ibm.wsdl.factory.WSDLFactoryImpl",
362
            "wsdl4j.jar",
363
            "IBM's WSDL4Java",
364
            getMessage("criticalErrorMessage"),
365
            null);
366
367
    needed+=needClass(out, "javax.xml.parsers.SAXParserFactory",
368
            "xerces.jar",
369
            "JAXP implementation",
370
            getMessage("criticalErrorMessage"),
371
            "http://xml.apache.org/xerces-j/");
372
373
    needed+=needClass(out,"javax.activation.DataHandler",
374
            "activation.jar",
375
            "Activation API",
376
            getMessage("criticalErrorMessage"),
377
            "http://java.sun.com/products/javabeans/glasgow/jaf.html");
378
%>
379
</UL>
380
<%
381
    out.print("<h3>"+ getMessage("optionalComponents") +"</h3>");
382
%>
383
<UL>
384
<%
385
    /*
386
     * now the stuff we can live without
387
     */
388
    wanted+=wantClass(out,"javax.mail.internet.MimeMessage",
389
            "mail.jar",
390
            "Mail API",
391
            getMessage("attachmentsError"),
392
            "http://java.sun.com/products/javamail/");
393
394
    wanted+=wantClass(out,"org.apache.xml.security.Init",
395
            "xmlsec.jar",
396
            "XML Security API",
397
            getMessage("xmlSecurityError"),
398
            "http://xml.apache.org/security/");
399
400
    wanted += wantClass(out, "javax.net.ssl.SSLSocketFactory",
401
            "jsse.jar or java1.4+ runtime",
402
            "Java Secure Socket Extension",
403
            getMessage("httpsError"),
404
            "http://java.sun.com/products/jsse/");
405
    /*
406
     * resources on the classpath path
407
     */
408
    /* add more libraries here */
409
410
%>
411
</UL>
412
<%
413
    out.write("<h3>");
414
    //is everythng we need here
415
    if(needed==0) {
416
       //yes, be happy
417
        out.write(getMessage("happyResult00"));
418
    } else {
419
        //no, be very unhappy
420
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
421
        out.write(getMessage("unhappyResult00",Integer.toString(needed)));
422
    }
423
    //now look at wanted stuff
424
    if(wanted>0) {
425
        out.write(getMessage("unhappyResult01",Integer.toString(wanted)));
426
    } else {
427
        out.write(getMessage("happyResult01"));
428
    }
429
    out.write("</h3>");
430
%>
431
<UL>
432
<%
433
434
    //hint if anything is missing
435
    if(needed>0 || wanted>0 ) {
436
        out.write(getMessage("hintString"));
437
    }
438
439
    out.write(getMessage("noteString"));
440
%>
441
</UL>
442
443
    <h2><%= getMessage("apsExamining") %></h2>
444
445
<UL>
446
    <%
447
        String servletVersion=getServletVersion();
448
        String xmlParser=getParserName();
449
        String xmlParserLocation = getParserLocation(out);
450
    %>
451
    <table border="1" cellpadding="10">
452
        <tr><td>Servlet version</td><td><%= servletVersion %></td></tr>
453
        <tr><td>XML Parser</td><td><%= xmlParser %></td></tr>
454
        <tr><td>XML ParserLocation</td><td><%= xmlParserLocation %></td></tr>
455
    </table>
456
</UL>
457
458
<% if(xmlParser.indexOf("crimson")>=0) { %>
459
    <p>
460
    <%= getMessage("recommendedParser") %>
461
    </p>
462
<%    } %>
463
464
    <h2><%= getMessage("sysExamining") %></h2>
465
<UL>
466
<%
467
    /**
468
     * Dump the system properties
469
     */
470
    java.util.Enumeration e=null;
471
    try {
472
        e= System.getProperties().propertyNames();
473
    } catch (SecurityException se) {
474
    }
475
    if(e!=null) {
476
        out.write("<pre>");
477
        for (;e.hasMoreElements();) {
478
            String key = (String) e.nextElement();
479
            out.write(key + "=" + System.getProperty(key)+"\n");
480
        }
481
        out.write("</pre><p>");
482
    } else {
483
        out.write(getMessage("sysPropError"));
484
    }
485
%>
486
</UL>
487
    <hr>
488
    <%= getMessage("apsPlatform") %>:
489
    <%= getServletConfig().getServletContext().getServerInfo() %>
490
</body>
491
</html>