mirror of
https://github.com/moparisthebest/JdbcMapper
synced 2025-02-23 14:32:16 -05:00
490 lines
15 KiB
Plaintext
490 lines
15 KiB
Plaintext
![]() |
<html>
|
||
|
<%@ page import="java.io.InputStream,
|
||
|
java.io.IOException,
|
||
|
javax.xml.parsers.SAXParser,
|
||
|
javax.xml.parsers.SAXParserFactory"
|
||
|
session="false" %>
|
||
|
<%
|
||
|
/*
|
||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||
|
* contributor license agreements. See the NOTICE file distributed with
|
||
|
* this work for additional information regarding copyright ownership.
|
||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||
|
* (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
%>
|
||
|
<head>
|
||
|
<title>Axis Happiness Page</title>
|
||
|
</head>
|
||
|
<body bgcolor='#ffffff'>
|
||
|
<%!
|
||
|
|
||
|
/*
|
||
|
* Happiness tests for axis. These look at the classpath and warn if things
|
||
|
* are missing. Normally addng this much code in a JSP page is mad
|
||
|
* but here we want to validate JSP compilation too, and have a drop-in
|
||
|
* page for easy re-use
|
||
|
* @author Steve 'configuration problems' Loughran
|
||
|
* @author dims
|
||
|
* @author Brian Ewins
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get a string providing install information.
|
||
|
* TODO: make this platform aware and give specific hints
|
||
|
*/
|
||
|
public String getInstallHints(HttpServletRequest request) {
|
||
|
|
||
|
String hint=
|
||
|
"<B><I>Note:</I></B> On Tomcat 4.x and Java1.4, you may need to put libraries that contain "
|
||
|
+"java.* or javax.* packages into CATALINA_HOME/common/lib"
|
||
|
+"<br>jaxrpc.jar and saaj.jar are two such libraries.";
|
||
|
return hint;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* test for a class existing
|
||
|
* @param classname
|
||
|
* @return class iff present
|
||
|
*/
|
||
|
Class classExists(String classname) {
|
||
|
try {
|
||
|
return Class.forName(classname);
|
||
|
} catch (ClassNotFoundException e) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* test for resource on the classpath
|
||
|
* @param resource
|
||
|
* @return true iff present
|
||
|
*/
|
||
|
boolean resourceExists(String resource) {
|
||
|
boolean found;
|
||
|
InputStream instream=this.getClass().getResourceAsStream(resource);
|
||
|
found=instream!=null;
|
||
|
if(instream!=null) {
|
||
|
try {
|
||
|
instream.close();
|
||
|
} catch (IOException e) {
|
||
|
}
|
||
|
}
|
||
|
return found;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* probe for a class, print an error message is missing
|
||
|
* @param out stream to print stuff
|
||
|
* @param category text like "warning" or "error"
|
||
|
* @param classname class to look for
|
||
|
* @param jarFile where this class comes from
|
||
|
* @param errorText extra error text
|
||
|
* @param homePage where to d/l the library
|
||
|
* @return the number of missing classes
|
||
|
* @throws IOException
|
||
|
*/
|
||
|
int probeClass(JspWriter out,
|
||
|
String category,
|
||
|
String classname,
|
||
|
String jarFile,
|
||
|
String description,
|
||
|
String errorText,
|
||
|
String homePage) throws IOException {
|
||
|
try {
|
||
|
Class clazz = classExists(classname);
|
||
|
if(clazz == null) {
|
||
|
String url="";
|
||
|
if(homePage!=null) {
|
||
|
url="<br> See <a href="+homePage+">"+homePage+"</a>";
|
||
|
}
|
||
|
out.write("<p>"+category+": could not find class "+classname
|
||
|
+" from file <b>"+jarFile
|
||
|
+"</b><br> "+errorText
|
||
|
+url
|
||
|
+"<p>");
|
||
|
return 1;
|
||
|
} else {
|
||
|
String location = getLocation(out, clazz);
|
||
|
if(location == null) {
|
||
|
out.write("Found "+ description + " (" + classname + ")<br>");
|
||
|
}
|
||
|
else {
|
||
|
out.write("Found "+ description + " (" + classname + ") at " + location + "<br>");
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
} catch(NoClassDefFoundError ncdfe) {
|
||
|
String url="";
|
||
|
if(homePage!=null) {
|
||
|
url="<br> See <a href="+homePage+">"+homePage+"</a>";
|
||
|
}
|
||
|
out.write("<p>"+category+": could not find a dependency"
|
||
|
+" of class "+classname
|
||
|
+" from file <b>"+jarFile
|
||
|
+"</b><br> "+errorText
|
||
|
+url
|
||
|
+"<br>The root cause was: "+ncdfe.getMessage()
|
||
|
+"<br>This can happen e.g. if "+classname+" is in"
|
||
|
+" the 'common' classpath, but a dependency like "
|
||
|
+" activation.jar is only in the webapp classpath."
|
||
|
+"<p>");
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get the location of a class
|
||
|
* @param out
|
||
|
* @param clazz
|
||
|
* @return the jar file or path where a class was found
|
||
|
*/
|
||
|
|
||
|
String getLocation(JspWriter out,
|
||
|
Class clazz) {
|
||
|
try {
|
||
|
java.net.URL url = clazz.getProtectionDomain().getCodeSource().getLocation();
|
||
|
String location = url.toString();
|
||
|
if(location.startsWith("jar")) {
|
||
|
url = ((java.net.JarURLConnection)url.openConnection()).getJarFileURL();
|
||
|
location = url.toString();
|
||
|
}
|
||
|
|
||
|
if(location.startsWith("file")) {
|
||
|
java.io.File file = new java.io.File(url.getFile());
|
||
|
return file.getAbsolutePath();
|
||
|
} else {
|
||
|
return url.toString();
|
||
|
}
|
||
|
} catch (Throwable t){
|
||
|
}
|
||
|
return "an unknown location";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* a class we need if a class is missing
|
||
|
* @param out stream to print stuff
|
||
|
* @param classname class to look for
|
||
|
* @param jarFile where this class comes from
|
||
|
* @param errorText extra error text
|
||
|
* @param homePage where to d/l the library
|
||
|
* @throws IOException when needed
|
||
|
* @return the number of missing libraries (0 or 1)
|
||
|
*/
|
||
|
int needClass(JspWriter out,
|
||
|
String classname,
|
||
|
String jarFile,
|
||
|
String description,
|
||
|
String errorText,
|
||
|
String homePage) throws IOException {
|
||
|
return probeClass(out,
|
||
|
"<b>Error</b>",
|
||
|
classname,
|
||
|
jarFile,
|
||
|
description,
|
||
|
errorText,
|
||
|
homePage);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* print warning message if a class is missing
|
||
|
* @param out stream to print stuff
|
||
|
* @param classname class to look for
|
||
|
* @param jarFile where this class comes from
|
||
|
* @param errorText extra error text
|
||
|
* @param homePage where to d/l the library
|
||
|
* @throws IOException when needed
|
||
|
* @return the number of missing libraries (0 or 1)
|
||
|
*/
|
||
|
int wantClass(JspWriter out,
|
||
|
String classname,
|
||
|
String jarFile,
|
||
|
String description,
|
||
|
String errorText,
|
||
|
String homePage) throws IOException {
|
||
|
return probeClass(out,
|
||
|
"<b>Warning</b>",
|
||
|
classname,
|
||
|
jarFile,
|
||
|
description,
|
||
|
errorText,
|
||
|
homePage);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* probe for a resource existing,
|
||
|
* @param out
|
||
|
* @param resource
|
||
|
* @param errorText
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
int wantResource(JspWriter out,
|
||
|
String resource,
|
||
|
String errorText) throws Exception {
|
||
|
if(!resourceExists(resource)) {
|
||
|
out.write("<p><b>Warning</b>: could not find resource "+resource
|
||
|
+"<br>"
|
||
|
+errorText);
|
||
|
return 0;
|
||
|
} else {
|
||
|
out.write("found "+resource+"<br>");
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* get servlet version string
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
public String getServletVersion() {
|
||
|
ServletContext context=getServletConfig().getServletContext();
|
||
|
int major = context.getMajorVersion();
|
||
|
int minor = context.getMinorVersion();
|
||
|
return Integer.toString(major) + '.' + Integer.toString(minor);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* what parser are we using.
|
||
|
* @return the classname of the parser
|
||
|
*/
|
||
|
private String getParserName() {
|
||
|
SAXParser saxParser = getSAXParser();
|
||
|
if (saxParser == null) {
|
||
|
return "Could not create an XML Parser";
|
||
|
}
|
||
|
|
||
|
// check to what is in the classname
|
||
|
String saxParserName = saxParser.getClass().getName();
|
||
|
return saxParserName;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create a JAXP SAXParser
|
||
|
* @return parser or null for trouble
|
||
|
*/
|
||
|
private SAXParser getSAXParser() {
|
||
|
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
|
||
|
if (saxParserFactory == null) {
|
||
|
return null;
|
||
|
}
|
||
|
SAXParser saxParser = null;
|
||
|
try {
|
||
|
saxParser = saxParserFactory.newSAXParser();
|
||
|
} catch (Exception e) {
|
||
|
}
|
||
|
return saxParser;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get the location of the parser
|
||
|
* @return path or null for trouble in tracking it down
|
||
|
*/
|
||
|
|
||
|
private String getParserLocation(JspWriter out) {
|
||
|
SAXParser saxParser = getSAXParser();
|
||
|
if (saxParser == null) {
|
||
|
return null;
|
||
|
}
|
||
|
String location = getLocation(out,saxParser.getClass());
|
||
|
return location;
|
||
|
}
|
||
|
%>
|
||
|
<html><head><title>Axis Happiness Page</title></head>
|
||
|
<body>
|
||
|
<h1>Axis Happiness Page</h1>
|
||
|
<h2>Examining webapp configuration</h2>
|
||
|
|
||
|
<p>
|
||
|
<h3>Needed Components</h3>
|
||
|
<%
|
||
|
int needed=0,wanted=0;
|
||
|
|
||
|
/**
|
||
|
* the essentials, without these Axis is not going to work
|
||
|
*/
|
||
|
needed=needClass(out, "javax.xml.soap.SOAPMessage",
|
||
|
"saaj.jar",
|
||
|
"SAAJ API",
|
||
|
"Axis will not work",
|
||
|
"http://xml.apache.org/axis/");
|
||
|
|
||
|
needed+=needClass(out, "javax.xml.rpc.Service",
|
||
|
"jaxrpc.jar",
|
||
|
"JAX-RPC API",
|
||
|
"Axis will not work",
|
||
|
"http://xml.apache.org/axis/");
|
||
|
|
||
|
needed+=needClass(out, "org.apache.axis.transport.http.AxisServlet",
|
||
|
"axis.jar",
|
||
|
"Apache-Axis",
|
||
|
"Axis will not work",
|
||
|
"http://xml.apache.org/axis/");
|
||
|
|
||
|
needed+=needClass(out, "org.apache.commons.discovery.Resource",
|
||
|
"commons-discovery.jar",
|
||
|
"Jakarta-Commons Discovery",
|
||
|
"Axis will not work",
|
||
|
"http://jakarta.apache.org/commons/discovery.html");
|
||
|
|
||
|
needed+=needClass(out, "org.apache.commons.logging.Log",
|
||
|
"commons-logging.jar",
|
||
|
"Jakarta-Commons Logging",
|
||
|
"Axis will not work",
|
||
|
"http://jakarta.apache.org/commons/logging.html");
|
||
|
|
||
|
needed+=needClass(out, "org.apache.log4j.Layout",
|
||
|
"log4j-1.2.8.jar",
|
||
|
"Log4j",
|
||
|
"Axis may not work",
|
||
|
"http://jakarta.apache.org/log4j");
|
||
|
|
||
|
//should we search for a javax.wsdl file here, to hint that it needs
|
||
|
//to go into an approved directory? because we dont seem to need to do that.
|
||
|
needed+=needClass(out, "com.ibm.wsdl.factory.WSDLFactoryImpl",
|
||
|
"wsdl4j.jar",
|
||
|
"IBM's WSDL4Java",
|
||
|
"Axis will not work",
|
||
|
null);
|
||
|
|
||
|
needed+=needClass(out, "javax.xml.parsers.SAXParserFactory",
|
||
|
"xerces.jar",
|
||
|
"JAXP implementation",
|
||
|
"Axis will not work",
|
||
|
"http://xml.apache.org/xerces-j/");
|
||
|
|
||
|
needed+=needClass(out,"javax.activation.DataHandler",
|
||
|
"activation.jar",
|
||
|
"Activation API",
|
||
|
"Axis will not work",
|
||
|
"http://java.sun.com/products/javabeans/glasgow/jaf.html");
|
||
|
%>
|
||
|
<h3>Optional Components</h3>
|
||
|
<%
|
||
|
/*
|
||
|
* now the stuff we can live without
|
||
|
*/
|
||
|
wanted+=wantClass(out,"javax.mail.internet.MimeMessage",
|
||
|
"mail.jar",
|
||
|
"Mail API",
|
||
|
"Attachments will not work",
|
||
|
"http://java.sun.com/products/javamail/");
|
||
|
|
||
|
wanted+=wantClass(out,"org.apache.xml.security.Init",
|
||
|
"xmlsec.jar",
|
||
|
"XML Security API",
|
||
|
"XML Security is not supported",
|
||
|
"http://xml.apache.org/security/");
|
||
|
|
||
|
wanted += wantClass(out, "javax.net.ssl.SSLSocketFactory",
|
||
|
"jsse.jar or java1.4+ runtime",
|
||
|
"Java Secure Socket Extension",
|
||
|
"https is not supported",
|
||
|
"http://java.sun.com/products/jsse/");
|
||
|
/*
|
||
|
* resources on the classpath path
|
||
|
*/
|
||
|
/* broken; this is a file, not a resource
|
||
|
wantResource(out,"/server-config.wsdd",
|
||
|
"There is no server configuration file;"
|
||
|
+"run AdminClient to create one");
|
||
|
*/
|
||
|
/* add more libraries here */
|
||
|
|
||
|
out.write("<h3>");
|
||
|
//is everythng we need here
|
||
|
if(needed==0) {
|
||
|
//yes, be happy
|
||
|
out.write("<i>The core axis libraries are present. </i>");
|
||
|
} else {
|
||
|
//no, be very unhappy
|
||
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||
|
out.write("<i>"
|
||
|
+needed
|
||
|
+" core axis librar"
|
||
|
+(needed==1?"y is":"ies are")
|
||
|
+" missing</i>");
|
||
|
}
|
||
|
//now look at wanted stuff
|
||
|
if(wanted>0) {
|
||
|
out.write("<i>"
|
||
|
+wanted
|
||
|
+" optional axis librar"
|
||
|
+(wanted==1?"y is":"ies are")
|
||
|
+" missing</i>");
|
||
|
} else {
|
||
|
out.write("The optional components are present.");
|
||
|
}
|
||
|
out.write("</h3>");
|
||
|
//hint if anything is missing
|
||
|
if(needed>0 || wanted>0 ) {
|
||
|
out.write(getInstallHints(request));
|
||
|
}
|
||
|
|
||
|
%>
|
||
|
<p>
|
||
|
<B><I>Note:</I></B> Even if everything this page probes for is present, there is no guarantee your
|
||
|
web service will work, because there are many configuration options that we do
|
||
|
not check for. These tests are <i>necessary</i> but not <i>sufficient</i>
|
||
|
<hr>
|
||
|
|
||
|
<h2>Examining Application Server</h2>
|
||
|
<%
|
||
|
String servletVersion=getServletVersion();
|
||
|
String xmlParser=getParserName();
|
||
|
String xmlParserLocation = getParserLocation(out);
|
||
|
|
||
|
%>
|
||
|
<table>
|
||
|
<tr><td>Servlet version</td><td><%= servletVersion %></td></tr>
|
||
|
<tr><td>XML Parser</td><td><%= xmlParser %></td></tr>
|
||
|
<tr><td>XML ParserLocation</td><td><%= xmlParserLocation %></td></tr>
|
||
|
</table>
|
||
|
<% if(xmlParser.indexOf("crimson")>=0) { %>
|
||
|
<p>
|
||
|
<b>We recommend <a href="http://xml.apache.org/xerces2-j/">Xerces 2</a>
|
||
|
over Crimson as the XML parser for Axis</b>
|
||
|
</p>
|
||
|
<% } %>
|
||
|
|
||
|
<h2>Examining System Properties</h2>
|
||
|
<%
|
||
|
/**
|
||
|
* Dump the system properties
|
||
|
*/
|
||
|
java.util.Enumeration e=null;
|
||
|
try {
|
||
|
e= System.getProperties().propertyNames();
|
||
|
} catch (SecurityException se) {
|
||
|
}
|
||
|
if(e!=null) {
|
||
|
out.write("<pre>");
|
||
|
for (;e.hasMoreElements();) {
|
||
|
String key = (String) e.nextElement();
|
||
|
out.write(key + "=" + System.getProperty(key)+"\n");
|
||
|
}
|
||
|
out.write("</pre><p>");
|
||
|
} else {
|
||
|
out.write("System properties are not accessible<p>");
|
||
|
}
|
||
|
%>
|
||
|
<hr>
|
||
|
Platform: <%= getServletConfig().getServletContext().getServerInfo() %>
|
||
|
</body>
|
||
|
</html>
|
||
|
|
||
|
|