source: gs3-extensions/pharos/trunk/web/axis2-web/HappyAxis.jsp@ 20983

Last change on this file since 20983 was 20983, checked in by davidb, 14 years ago

Initial files for Phrasos extension to Greenstone3

File size: 16.7 KB
Line 
1<%--
2 ~ Licensed to the Apache Software Foundation (ASF) under one
3 ~ or more contributor license agreements. See the NOTICE file
4 ~ distributed with this work for additional information
5 ~ regarding copyright ownership. The ASF licenses this file
6 ~ to you under the Apache License, Version 2.0 (the
7 ~ "License"); you may not use this file except in compliance
8 ~ with the License. You may obtain a copy of the License at
9 ~
10 ~ http://www.apache.org/licenses/LICENSE-2.0
11 ~
12 ~ Unless required by applicable law or agreed to in writing,
13 ~ software distributed under the License is distributed on an
14 ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 ~ KIND, either express or implied. See the License for the
16 ~ specific language governing permissions and limitations
17 ~ under the License.
18 --%>
19
20<html>
21<%@ page import="org.apache.axis2.AxisFault,
22 org.apache.axis2.Constants,
23 org.apache.axis2.addressing.EndpointReference,
24 org.apache.axis2.client.Options,
25 org.apache.axis2.client.ServiceClient,
26 org.apache.axis2.context.ConfigurationContext,
27 org.apache.axis2.context.ConfigurationContextFactory,
28 javax.xml.parsers.SAXParser,
29 javax.xml.parsers.SAXParserFactory,
30 java.io.IOException,
31 java.io.InputStream,
32 java.io.StringWriter,
33 org.apache.axiom.om.OMElement,
34 org.apache.axiom.om.OMFactory,
35 org.apache.axiom.om.OMNamespace,
36 org.apache.axiom.om.OMAbstractFactory,
37 javax.xml.stream.XMLOutputFactory,
38 javax.xml.stream.XMLStreamException"
39 session="false" %>
40<head>
41 <jsp:include page="include/httpbase.jsp"/>
42 <title>Axis2 Happiness Page</title>
43 <link href="axis2-web/css/axis-style.css" rel="stylesheet" type="text/css">
44</head>
45
46<body>
47<jsp:include page="include/header.inc"/>
48<jsp:include page="include/link-footer.jsp"/>
49<%IP = request.getRequestURL().toString();%>
50<%!
51 /*
52 * Happiness tests for axis2. These look at the classpath and warn if things
53 * are missing. Normally addng this much code in a JSP page is mad
54 * but here we want to validate JSP compilation too, and have a drop-in
55 * page for easy re-use
56 */
57 String IP;
58
59 /**
60 * Get a string providing install information.
61 * TODO: make this platform aware and give specific hints
62 */
63 public String getInstallHints(HttpServletRequest request) {
64
65 return "<B><I>Note:</I></B> On Tomcat 4.x and Java1.4, you may need to put libraries that contain "
66 + "java.* or javax.* packages into CATALINA_HOME/common/lib"
67 + "<br>jaxrpc.jar and saaj.jar are two such libraries.";
68 }
69
70 /**
71 * test for a class existing
72 * @param classname
73 * @return class iff present
74 */
75 Class classExists(String classname) {
76 try {
77 return Class.forName(classname);
78 } catch (ClassNotFoundException e) {
79 return null;
80 }
81 }
82
83 /**
84 * test for resource on the classpath
85 * @param resource
86 * @return true iff present
87 */
88 boolean resourceExists(String resource) {
89 boolean found;
90 InputStream instream = this.getClass().getResourceAsStream(resource);
91 found = instream != null;
92 if (instream != null) {
93 try {
94 instream.close();
95 } catch (IOException e) {
96 }
97 }
98 return found;
99 }
100
101 /**
102 * probe for a class, print an error message is missing
103 * @param out stream to print stuff
104 * @param category text like "warning" or "error"
105 * @param classname class to look for
106 * @param jarFile where this class comes from
107 * @param errorText extra error text
108 * @param homePage where to d/l the library
109 * @return the number of missing classes
110 * @throws IOException
111 */
112 int probeClass(JspWriter out,
113 String category,
114 String classname,
115 String jarFile,
116 String axisOperation,
117 String errorText,
118 String homePage) throws IOException {
119 try {
120 Class clazz = classExists(classname);
121 if (clazz == null) {
122 String url = "";
123 if (homePage != null) {
124 url = "<br> See <a href=" + homePage + ">" + homePage + "</a>";
125 }
126 out.write("<p>" + category + ": could not find class " + classname
127 + " from file <b>" + jarFile
128 + "</b><br> " + errorText
129 + url
130 + "<p>");
131 return 1;
132 } else {
133 String location = getLocation(out, clazz);
134 if (location == null) {
135 out.write("Found " + axisOperation + " (" + classname + ")<br/>");
136 } else {
137 out.write("Found " + axisOperation + " (" + classname + ") <br/> &nbsp;&nbsp;at " + location + "<br/>");
138 }
139 return 0;
140 }
141 } catch (NoClassDefFoundError ncdfe) {
142 String url = "";
143 if (homePage != null) {
144 url = "<br> See <a href=" + homePage + ">" + homePage + "</a>";
145 }
146 out.write("<p>" + category + ": could not find a dependency"
147 + " of class " + classname
148 + " from file <b>" + jarFile
149 + "</b><br> " + errorText
150 + url
151 + "<br>The root cause was: " + ncdfe.getMessage()
152 + "<br>This can happen e.g. if " + classname + " is in"
153 + " the 'common' classpath, but a dependency like "
154 + " activation.jar is only in the webapp classpath."
155 + "<p>");
156 return 1;
157 }
158 }
159
160 /**
161 * get the location of a class
162 * @param out
163 * @param clazz
164 * @return the jar file or path where a class was found
165 */
166
167 String getLocation(JspWriter out,
168 Class clazz) {
169 try {
170 java.net.URL url = clazz.getProtectionDomain().getCodeSource().getLocation();
171 String location = url.toString();
172 if (location.startsWith("jar")) {
173 url = ((java.net.JarURLConnection) url.openConnection()).getJarFileURL();
174 location = url.toString();
175 }
176
177 if (location.startsWith("file")) {
178 java.io.File file = new java.io.File(url.getFile());
179 return file.getAbsolutePath();
180 } else {
181 return url.toString();
182 }
183 } catch (Throwable t) {
184 }
185 return "an unknown location";
186 }
187
188 /**
189 * a class we need if a class is missing
190 * @param out stream to print stuff
191 * @param classname class to look for
192 * @param jarFile where this class comes from
193 * @param errorText extra error text
194 * @param homePage where to d/l the library
195 * @throws IOException when needed
196 * @return the number of missing libraries (0 or 1)
197 */
198 int needClass(JspWriter out,
199 String classname,
200 String jarFile,
201 String axisOperation,
202 String errorText,
203 String homePage) throws IOException {
204 return probeClass(out,
205 "<b>Error</b>",
206 classname,
207 jarFile,
208 axisOperation,
209 errorText,
210 homePage);
211 }
212
213 /**
214 * print warning message if a class is missing
215 * @param out stream to print stuff
216 * @param classname class to look for
217 * @param jarFile where this class comes from
218 * @param errorText extra error text
219 * @param homePage where to d/l the library
220 * @throws IOException when needed
221 * @return the number of missing libraries (0 or 1)
222 */
223 int wantClass(JspWriter out,
224 String classname,
225 String jarFile,
226 String axisOperation,
227 String errorText,
228 String homePage) throws IOException {
229 return probeClass(out,
230 "<b>Warning</b>",
231 classname,
232 jarFile,
233 axisOperation,
234 errorText,
235 homePage);
236 }
237
238 /**
239 * probe for a resource existing,
240 * @param out
241 * @param resource
242 * @param errorText
243 * @throws Exception
244 */
245 int wantResource(JspWriter out,
246 String resource,
247 String errorText) throws Exception {
248 if (!resourceExists(resource)) {
249 out.write("<p><b>Warning</b>: could not find resource " + resource
250 + "<br>"
251 + errorText);
252 return 0;
253 } else {
254 out.write("found " + resource + "<br>");
255 return 1;
256 }
257 }
258
259
260 /**
261 * get servlet version string
262 *
263 */
264
265 public String getServletVersion() {
266 ServletContext context = getServletConfig().getServletContext();
267 int major = context.getMajorVersion();
268 int minor = context.getMinorVersion();
269 return Integer.toString(major) + '.' + Integer.toString(minor);
270 }
271
272
273 /**
274 * what parser are we using.
275 * @return the classname of the parser
276 */
277 private String getParserName() {
278 SAXParser saxParser = getSAXParser();
279 if (saxParser == null) {
280 return "Could not create an XML Parser";
281 }
282
283 // check to what is in the classname
284 return saxParser.getClass().getName();
285 }
286
287 /**
288 * Create a JAXP SAXParser
289 * @return parser or null for trouble
290 */
291 private SAXParser getSAXParser() {
292 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
293 if (saxParserFactory == null) {
294 return null;
295 }
296 SAXParser saxParser = null;
297 try {
298 saxParser = saxParserFactory.newSAXParser();
299 } catch (Exception e) {
300 }
301 return saxParser;
302 }
303
304 /**
305 * get the location of the parser
306 * @return path or null for trouble in tracking it down
307 */
308
309 private String getParserLocation(JspWriter out) {
310 SAXParser saxParser = getSAXParser();
311 if (saxParser == null) {
312 return null;
313 }
314 return getLocation(out, saxParser.getClass());
315 }
316
317 private String value;
318
319 private OMElement createEnvelope() {
320 OMFactory fac = OMAbstractFactory.getOMFactory();
321 OMNamespace omNs = fac.createOMNamespace("http://axisversion.sample/xsd", "ns1");
322 OMElement method = fac.createOMElement("getVersion", omNs);
323 OMElement value = fac.createOMElement("myValue", omNs);
324 method.addChild(value);
325 return method;
326 }
327
328 public boolean invokeTheService() {
329 try {
330 // since this one is an internal request we do not use public frontendHostUrl
331 // for it
332 int lastindex = IP.lastIndexOf('/');
333 IP = IP.substring(0, lastindex);
334 ///axis2/axis2-web/services/version
335 IP = IP.replaceAll("axis2-web", "");
336
337 OMElement payload = createEnvelope();
338 ConfigurationContext configctx =
339 ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, null);
340 ServiceClient client = new ServiceClient(configctx, null);
341 EndpointReference targetEPR = new EndpointReference(IP + configctx.getServicePath() + "/Version");
342 Options options = new Options();
343 client.setOptions(options);
344 options.setTo(targetEPR);
345 options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
346
347 OMElement result = client.sendReceive(payload);
348 StringWriter writer = new StringWriter();
349 result.serialize(XMLOutputFactory.newInstance().createXMLStreamWriter(writer));
350 writer.flush();
351 value = writer.toString();
352 return true;
353 } catch (AxisFault axisFault) {
354 System.out.println(value);
355 return false;
356 } catch (XMLStreamException e) {
357 value = e.getMessage();
358 return false;
359 }
360 }
361
362 public String getFormatedSystemProperty(String systemProperty){
363 if (systemProperty == null)
364 return "";
365 return systemProperty.replaceAll(":", ": ");
366 }
367%>
368
369<h1>Axis2 Happiness Page</h1>
370
371<h2>Examining webapp configuration</h2>
372
373<blockquote>
374
375<h4>Essential Components</h4>
376
377<%
378 int needed = 0,wanted = 0;
379
380 /**
381 * the essentials, without these Axis is not going to work
382 */
383 needed = needClass(out, "org.apache.axis2.transport.http.AxisServlet",
384 "axis2-1.0.jar",
385 "Apache-Axis",
386 "Axis2 will not work",
387 "http://xml.apache.org/axis2/");
388 needed += needClass(out, "org.apache.commons.logging.Log",
389 "commons-logging.jar",
390 "Jakarta-Commons Logging",
391 "Axis2 will not work",
392 "http://jakarta.apache.org/commons/logging.html");
393 needed += needClass(out, "javax.xml.stream.XMLStreamReader",
394 "stax-api-1.0.1.jar",
395 "Streaming API for XML",
396 "Axis2 will not work",
397 "http://dist.codehaus.org/stax/jars/");
398 needed += needClass(out, "org.codehaus.stax2.XMLStreamWriter2",
399 "wstx-asl-3.0.1.jar",
400 "Streaming API for XML implementation",
401 "Axis2 will not work",
402 "http://dist.codehaus.org/stax/jars/");
403
404%>
405<%
406 /*
407 * resources on the classpath path
408 */
409 /* broken; this is a file, not a resource
410 wantResource(out,"/server-config.wsdd",
411 "There is no server configuration file;"
412 +"run AdminClient to create one");
413 */
414 /* add more libraries here */
415
416 //is everything we need here
417 if (needed == 0) {
418 //yes, be happy
419 out.write("<p><font color='green'><strong>The core axis2 libraries are present.</strong></font></p>");
420 } else {
421 //no, be very unhappy
422 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
423 out.write("<font color='red'><i>"
424 + needed
425 + " core axis2 librar"
426 + (needed == 1 ? "y is" : "ies are")
427 + " missing</i></font>");
428 }
429 //now look at wanted stuff
430%>
431<p>
432 <B><I>Note:</I></B> Even if everything this page probes for is present,
433 there is no guarantee your Axis Service will work, because there are many configuration options
434 that we do not check for. These tests are <i>necessary</i> but not <i>sufficient</i>
435</p>
436</blockquote>
437<h2>Examining Version Service</h2>
438<%
439 boolean serviceStatus = invokeTheService();
440 if (serviceStatus) {
441%>
442<blockquote>
443 <font color="green"><strong>
444 Found Axis2 default Version service and Axis2 is working
445 properly.</strong></font>
446 <p>Now you can drop a service archive in axis2/WEB-INF/services.
447 Following output was produced while invoking Axis2 version service
448 </p>
449 <p><%= value%></p>
450</blockquote>
451
452<%
453} else {
454%>
455<p>
456 <font color="brown"> There was a problem in Axis2 version service , may be
457 the service not available or some thing has gone wrong. But this does
458 not mean system is not working !
459 Try to upload some other service and check to see whether it is
460 working.
461 <br>
462 </font>
463</p>
464
465<%
466 }
467%>
468<h2>Examining Application Server</h2>
469<blockquote>
470<table>
471 <tr><td>Servlet version</td><td><%=getServletVersion()%></td></tr>
472 <tr><td>Platform</td>
473 <td><%=getServletConfig().getServletContext().getServerInfo()%></td>
474 </tr>
475</table>
476</blockquote>
477<h2>Examining System Properties</h2>
478<%
479 /**
480 * Dump the system properties
481 */
482 java.util.Enumeration e = null;
483 try {
484 e = System.getProperties().propertyNames();
485 } catch (SecurityException se) {
486 }
487 if (e != null) {
488 out.write("<pre>");
489 out.write("<table cellpadding='5px' cellspacing='0px' style='border: .5px blue solid;'>");
490 for (; e.hasMoreElements();) {
491 out.write("<tr>");
492 String key = (String) e.nextElement();
493 out.write("<th style='border: .5px #A3BBFF solid;'>" + key + "</th>");
494 out.write("<td style='border: .5px #A3BBFF solid;'>" + getFormatedSystemProperty(System.getProperty(key)) + "&nbsp;</td>");
495 out.write("<tr>");
496 }
497 out.write("</table>");
498 out.write("</pre><p>");
499 } else {
500 out.write("System properties are not accessible<p>");
501 }
502%>
503
504<jsp:include page="include/footer.inc"/>
505</body>
506</html>
507
508
Note: See TracBrowser for help on using the repository browser.