509 lines
17 KiB
Plaintext
509 lines
17 KiB
Plaintext
<%--
|
|
~ 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.
|
|
--%>
|
|
|
|
<html>
|
|
<%@ page import="org.apache.axis2.AxisFault,
|
|
org.apache.axis2.Constants,
|
|
org.apache.axis2.addressing.EndpointReference,
|
|
org.apache.axis2.client.Options,
|
|
org.apache.axis2.client.ServiceClient,
|
|
org.apache.axis2.context.ConfigurationContext,
|
|
org.apache.axis2.context.ConfigurationContextFactory,
|
|
javax.xml.parsers.SAXParser,
|
|
javax.xml.parsers.SAXParserFactory,
|
|
java.io.IOException,
|
|
java.io.InputStream,
|
|
java.io.StringWriter,
|
|
org.apache.axiom.om.OMElement,
|
|
org.apache.axiom.om.OMFactory,
|
|
org.apache.axiom.om.OMNamespace,
|
|
org.apache.axiom.om.OMAbstractFactory,
|
|
javax.xml.stream.XMLOutputFactory,
|
|
javax.xml.stream.XMLStreamException"
|
|
session="false" %>
|
|
<head>
|
|
<jsp:include page="include/httpbase.jsp"/>
|
|
<title>Axis2 Happiness Page</title>
|
|
<link href="axis2-web/css/axis-style.css" rel="stylesheet" type="text/css">
|
|
</head>
|
|
|
|
<body>
|
|
<jsp:include page="include/header.inc"/>
|
|
<jsp:include page="include/link-footer.jsp"/>
|
|
<%IP = request.getRequestURL().toString();%>
|
|
<%!
|
|
/*
|
|
* Happiness tests for axis2. 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
|
|
*/
|
|
String IP;
|
|
|
|
/**
|
|
* Get a string providing install information.
|
|
* TODO: make this platform aware and give specific hints
|
|
*/
|
|
public String getInstallHints(HttpServletRequest request) {
|
|
|
|
return "<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.";
|
|
}
|
|
|
|
/**
|
|
* 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 axisOperation,
|
|
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 " + axisOperation + " (" + classname + ")<br/>");
|
|
} else {
|
|
out.write("Found " + axisOperation + " (" + classname + ") <br/> 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 axisOperation,
|
|
String errorText,
|
|
String homePage) throws IOException {
|
|
return probeClass(out,
|
|
"<b>Error</b>",
|
|
classname,
|
|
jarFile,
|
|
axisOperation,
|
|
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 axisOperation,
|
|
String errorText,
|
|
String homePage) throws IOException {
|
|
return probeClass(out,
|
|
"<b>Warning</b>",
|
|
classname,
|
|
jarFile,
|
|
axisOperation,
|
|
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
|
|
return saxParser.getClass().getName();
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
return getLocation(out, saxParser.getClass());
|
|
}
|
|
|
|
private String value;
|
|
|
|
private OMElement createEnvelope() {
|
|
OMFactory fac = OMAbstractFactory.getOMFactory();
|
|
OMNamespace omNs = fac.createOMNamespace("http://axisversion.sample", "ns1");
|
|
OMElement method = fac.createOMElement("getVersion", omNs);
|
|
OMElement value = fac.createOMElement("myValue", omNs);
|
|
method.addChild(value);
|
|
return method;
|
|
}
|
|
|
|
public boolean invokeTheService() {
|
|
try {
|
|
// since this one is an internal request we do not use public frontendHostUrl
|
|
// for it
|
|
int lastindex = IP.lastIndexOf('/');
|
|
IP = IP.substring(0, lastindex);
|
|
///axis2/axis2-web/services/version
|
|
IP = IP.replaceAll("axis2-web", "");
|
|
|
|
OMElement payload = createEnvelope();
|
|
ConfigurationContext configctx =
|
|
ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, null);
|
|
ServiceClient client = new ServiceClient(configctx, null);
|
|
EndpointReference targetEPR = new EndpointReference(IP + configctx.getServicePath() + "/Version");
|
|
Options options = new Options();
|
|
client.setOptions(options);
|
|
options.setTo(targetEPR);
|
|
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
|
|
|
|
OMElement result = client.sendReceive(payload);
|
|
StringWriter writer = new StringWriter();
|
|
result.serialize(XMLOutputFactory.newInstance().createXMLStreamWriter(writer));
|
|
writer.flush();
|
|
value = writer.toString();
|
|
return true;
|
|
} catch (AxisFault axisFault) {
|
|
System.out.println(value);
|
|
return false;
|
|
} catch (XMLStreamException e) {
|
|
value = e.getMessage();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public String getFormatedSystemProperty(String systemProperty){
|
|
if (systemProperty == null)
|
|
return "";
|
|
return systemProperty.replaceAll(":", ": ");
|
|
}
|
|
%>
|
|
|
|
<h1>Axis2 Happiness Page</h1>
|
|
|
|
<h2>Examining webapp configuration</h2>
|
|
|
|
<blockquote>
|
|
|
|
<h4>Essential Components</h4>
|
|
|
|
<%
|
|
int needed = 0,wanted = 0;
|
|
|
|
/**
|
|
* the essentials, without these Axis is not going to work
|
|
*/
|
|
needed = needClass(out, "org.apache.axis2.transport.http.AxisServlet",
|
|
"axis2-1.0.jar",
|
|
"Apache-Axis",
|
|
"Axis2 will not work",
|
|
"http://xml.apache.org/axis2/");
|
|
needed += needClass(out, "org.apache.commons.logging.Log",
|
|
"commons-logging.jar",
|
|
"Jakarta-Commons Logging",
|
|
"Axis2 will not work",
|
|
"http://jakarta.apache.org/commons/logging.html");
|
|
needed += needClass(out, "javax.xml.stream.XMLStreamReader",
|
|
"stax-api-1.0.1.jar",
|
|
"Streaming API for XML",
|
|
"Axis2 will not work",
|
|
"http://dist.codehaus.org/stax/jars/");
|
|
needed += needClass(out, "org.codehaus.stax2.XMLStreamWriter2",
|
|
"wstx-asl-3.0.1.jar",
|
|
"Streaming API for XML implementation",
|
|
"Axis2 will not work",
|
|
"http://dist.codehaus.org/stax/jars/");
|
|
|
|
%>
|
|
<%
|
|
/*
|
|
* 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 */
|
|
|
|
//is everything we need here
|
|
if (needed == 0) {
|
|
//yes, be happy
|
|
out.write("<p><font color='green'><strong>The core axis2 libraries are present.</strong></font></p>");
|
|
} else {
|
|
//no, be very unhappy
|
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
|
out.write("<font color='red'><i>"
|
|
+ needed
|
|
+ " core axis2 librar"
|
|
+ (needed == 1 ? "y is" : "ies are")
|
|
+ " missing</i></font>");
|
|
}
|
|
//now look at wanted stuff
|
|
%>
|
|
<p>
|
|
<B><I>Note:</I></B> Even if everything this page probes for is present,
|
|
there is no guarantee your Axis 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>
|
|
</p>
|
|
</blockquote>
|
|
<h2>Examining Version Service</h2>
|
|
<%
|
|
boolean serviceStatus = invokeTheService();
|
|
if (serviceStatus) {
|
|
%>
|
|
<blockquote>
|
|
<font color="green"><strong>
|
|
Found Axis2 default Version service and Axis2 is working
|
|
properly.</strong></font>
|
|
<p>Now you can drop a service archive in axis2/WEB-INF/services.
|
|
Following output was produced while invoking Axis2 version service
|
|
</p>
|
|
<p><%= value%></p>
|
|
</blockquote>
|
|
|
|
<%
|
|
} else {
|
|
%>
|
|
<p>
|
|
<font color="brown"> There was a problem in Axis2 version service , may be
|
|
the service not available or some thing has gone wrong. But this does
|
|
not mean system is not working !
|
|
Try to upload some other service and check to see whether it is
|
|
working.
|
|
<br>
|
|
</font>
|
|
</p>
|
|
|
|
<%
|
|
}
|
|
%>
|
|
<h2>Examining Application Server</h2>
|
|
<blockquote>
|
|
<table>
|
|
<tr><td>Servlet version</td><td><%=getServletVersion()%></td></tr>
|
|
<tr><td>Platform</td>
|
|
<td><%=getServletConfig().getServletContext().getServerInfo()%></td>
|
|
</tr>
|
|
</table>
|
|
</blockquote>
|
|
<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>");
|
|
out.write("<table cellpadding='5px' cellspacing='0px' style='border: .5px blue solid;'>");
|
|
for (; e.hasMoreElements();) {
|
|
out.write("<tr>");
|
|
String key = (String) e.nextElement();
|
|
out.write("<th style='border: .5px #A3BBFF solid;'>" + key + "</th>");
|
|
out.write("<td style='border: .5px #A3BBFF solid;'>" + getFormatedSystemProperty(System.getProperty(key)) + " </td>");
|
|
out.write("<tr>");
|
|
}
|
|
out.write("</table>");
|
|
out.write("</pre><p>");
|
|
} else {
|
|
out.write("System properties are not accessible<p>");
|
|
}
|
|
%>
|
|
|
|
<jsp:include page="include/footer.inc"/>
|
|
</body>
|
|
</html>
|
|
|
|
|