[xgws-dev] CVS Update: codes/xsul/java/tests/xsul/async_msg
Aleksander Andrzej Slominski
xgws-dev_at_extreme.indiana.edu
Tue Jun 6 16:18:01 2006
aslom 06/06/06 16:17:24
Modified: xsul/java/doc changes.html
xsul/java/modules/common/xsul XsulVersion.java
xsul/java/modules/lead/xsul/lead lead-context.xsd
lead-context.xsdconfig
xsul/java/modules/monitoring/xsul/monitoring
XsulMonitoringStats.java XsulMonitoringUtil.java
xsul/java/modules/xservo_soap_http/xsul/xservo_soap_http
HttpBasedServices.java
xsul/java/tests/xsul/async_msg EchoAsyncService.java
Log:
added ability to customize name and version of service displayed in default GET location, add list of service names and link to their WSDL files
Revision Changes Path
1.54 +16 -4 codes/xsul/java/doc/changes.html
Index: changes.html
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/doc/changes.html,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -t -w -r1.53 -r1.54
--- changes.html 6 Jun 2006 19:08:49 -0000 1.53
+++ changes.html 6 Jun 2006 20:17:23 -0000 1.54
@@ -4,24 +4,36 @@
<head>
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="favicon.ico" />
<link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" />
-<title>XSUL Changes
+<title>XSUL2 Changes
</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="author" content="Aleksander Slominski [http://www.extreme.indiana.edu/~aslom]">
</head>
<body bgcolor="white">
-<h1>Changes to XSUL</h1>
+<h1>Changes to XSUL2</h1>
-<h3>2006-06- (XSUL_2_5_xxx)</h3>
+<h3>2006-06- (XSUL_2_6_xxx)</h3>
<ul>
<li>2006-06-06 (2.6.4):
+added ability to set service name and version displayed when using browser to access service endpoint:
+use <code>HttpBasedServices.setServerName()</code>;
+for example
+<code>httpServices.setServerName("MyServerName/1.0.1")</code>
+and handy way to maintan version for services in sync with XSUL:
+<code>httpServices.setServerName("MyServerName/"+XsulVersion.getImplementationVersion())</code>.
+</li>
+<li>XHTML page for started XSUL service will give list of services and their WSDLs
</li>
+<li>
+added utility method to get locaiton of WSDL for a service hosted by XWSIF servo:
+<code>String HttpBasedServices.getServiceWsdl(String serviceName)</code>
+</li>
<li>2006-06-05 (2.6.3):
fixed problem with too "sticky" headers,
@@ -419,7 +431,7 @@
</td>
<td align="right" width="25%">
<font size="-2"><i>
-Last modified: $Id: changes.html,v 1.53 2006/06/06 19:08:49 aslom Exp $
+Last modified: $Id: changes.html,v 1.54 2006/06/06 20:17:23 aslom Exp $
</i></font>
</td>
1.81 +4 -4 codes/xsul/java/modules/common/xsul/XsulVersion.java
Index: XsulVersion.java
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/modules/common/xsul/XsulVersion.java,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -b -t -w -r1.80 -r1.81
--- XsulVersion.java 5 Jun 2006 20:13:48 -0000 1.80
+++ XsulVersion.java 6 Jun 2006 20:17:23 -0000 1.81
@@ -1,18 +1,18 @@
/* -*- mode: Java; c-basic-offset: 4; indent-tabs-mode: nil; -*- //------100-columns-wide------>|*/
/* Copyright (c) 2002-2006 Extreme! Lab, Indiana University. All rights reserved.
* This software is open source. See the bottom of this file for the licence.
- * $Id: XsulVersion.java,v 1.80 2006/06/05 20:13:48 aslom Exp $ */
+ * $Id: XsulVersion.java,v 1.81 2006/06/06 20:17:23 aslom Exp $ */
package xsul;
/**
* One place to put version number.
*
- * @version $Revision: 1.80 $
+ * @version $Revision: 1.81 $
* @author <a href="http://www.extreme.indiana.edu/~aslom/">Aleksander Slominski</a>
*/
public class XsulVersion {
- public final static String SPEC_VERSION = "2.6.3";
- private final static String BUILD = "_dev"; //"_f2"; //"_SPECIAL_EDITION";//"_b4";
+ public final static String SPEC_VERSION = "2.6.4";
+ private final static String BUILD = ""; //"_dev"; //"_f2"; //"_SPECIAL_EDITION";//"_b4";
private final static String PROJECT_NAME = "XSUL";
public final static String IMPL_VERSION = SPEC_VERSION+BUILD;
1.3 +0 -1 codes/xsul/java/modules/lead/xsul/lead/lead-context.xsd
Index: lead-context.xsd
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/modules/lead/xsul/lead/lead-context.xsd,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -t -w -r1.2 -r1.3
--- lead-context.xsd 31 May 2006 22:16:33 -0000 1.2
+++ lead-context.xsd 6 Jun 2006 20:17:23 -0000 1.3
@@ -86,7 +86,6 @@
<element minOccurs="0" maxOccurs="1" ref="lead:service-instance-id"/>
<element minOccurs="0" maxOccurs="1" ref="lead:gfac-url"/>
<element minOccurs="0" maxOccurs="1" ref="lead:resource-catalog-url"/>
- <element minOccurs="0" maxOccurs="1" ref="lead:properties-file-url"/>
<element minOccurs="0" maxOccurs="1" ref="lead:event-sink-epr"/>
<!-- this is required element to make open content model works!!!! -->
<!-- for description see: -->
1.2 +1 -0 codes/xsul/java/modules/lead/xsul/lead/lead-context.xsdconfig
Index: lead-context.xsdconfig
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/modules/lead/xsul/lead/lead-context.xsdconfig,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -t -w -r1.1 -r1.2
--- lead-context.xsdconfig 31 May 2006 07:21:31 -0000 1.1
+++ lead-context.xsdconfig 6 Jun 2006 20:17:23 -0000 1.2
@@ -11,3 +11,4 @@
</xb:namespace>
</xb:config>
+
1.5 +14 -6 codes/xsul/java/modules/monitoring/xsul/monitoring/XsulMonitoringStats.java
Index: XsulMonitoringStats.java
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/modules/monitoring/xsul/monitoring/XsulMonitoringStats.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -t -w -r1.4 -r1.5
--- XsulMonitoringStats.java 12 Apr 2006 21:07:15 -0000 1.4
+++ XsulMonitoringStats.java 6 Jun 2006 20:17:23 -0000 1.5
@@ -4,7 +4,7 @@
*
* This software is open source. See the bottom of this file for the licence.
*
- * $Id: XsulMonitoringStats.java,v 1.4 2006/04/12 21:07:15 aslom Exp $
+ * $Id: XsulMonitoringStats.java,v 1.5 2006/06/06 20:17:23 aslom Exp $
*/
package xsul.monitoring;
@@ -28,16 +28,17 @@
public final static String STARTTIME_SECONDS = "starttime-seconds";
public final static String XML_REQUESTS_PER_SECOND = "xml-requests-per-second";
public final static String CONNECTIONS_COUNT = "connections-count";
- public final static String IMPL_VERSION = "impl-version";
+ public final static String SERVER_VERSION = "server-version";
+ public final static String XSUL_IMPL_VERSION = "impl-version";
- private String serviceName;
+ private String serverName;
private long startTimeMs;
private long requestXmlMsgsCount;
protected XsulMonitoringStats(String serviceName, long startTimeInMs,
long requestXmlMsgCount, long numberOfConnections) {
super(builder.newFragment(MONITORING_NS, "service-statistics"));
- this.serviceName = serviceName;
+ this.serverName = serviceName;
this.startTimeMs = startTimeInMs;
this.requestXmlMsgsCount = requestXmlMsgCount;
XmlElement serviceNameEl = addElement(SERVICE_NAME);
@@ -50,8 +51,15 @@
numberOfConnectionsEl.addChild(""+numberOfConnections);
}
- public String getServiceName() {
- return serviceName;
+ /**
+ * @deprecated
+ */
+ public String getSericeName() {
+ return getServerName();
+ }
+
+ public String getServerName() {
+ return serverName;
}
public long getStarTimeInMs() {
1.10 +28 -19 codes/xsul/java/modules/monitoring/xsul/monitoring/XsulMonitoringUtil.java
Index: XsulMonitoringUtil.java
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/modules/monitoring/xsul/monitoring/XsulMonitoringUtil.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -t -w -r1.9 -r1.10
--- XsulMonitoringUtil.java 5 Jun 2006 20:13:48 -0000 1.9
+++ XsulMonitoringUtil.java 6 Jun 2006 20:17:23 -0000 1.10
@@ -4,7 +4,7 @@
*
* This software is open source. See the bottom of this file for the licence.
*
- * $Id: XsulMonitoringUtil.java,v 1.9 2006/06/05 20:13:48 aslom Exp $
+ * $Id: XsulMonitoringUtil.java,v 1.10 2006/06/06 20:17:23 aslom Exp $
*/
package xsul.monitoring;
@@ -63,9 +63,9 @@
}
//<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- public static XsulMonitoringStats createStats(String serviceName, long startTime,
+ public static XsulMonitoringStats createStats(String serverName, long startTime,
long requestXmlMsgCount, long numberOfConnections) {
- return new XsulMonitoringStats(serviceName, startTime, requestXmlMsgCount, numberOfConnections);
+ return new XsulMonitoringStats(serverName, startTime, requestXmlMsgCount, numberOfConnections);
}
@@ -76,40 +76,41 @@
return outgoingDoc;
}
- public static XmlElement createXhtmlStats(XsulMonitoringStats s) {
+ public static XmlElement createXhtmlStats(XsulMonitoringStats stats) {
final XmlNamespace H = XmlConstants.XHTML_NS;
XmlElement html = builder.newFragment(H, "html");
html.declareNamespace(H);
XmlElement head = html.addElement(H, "head");
XmlElement titleEl = head.addElement(H, "title");
- String version = " ("+XsulVersion.getUserAgent()+")";
- String title = s.getServiceName()+" Monitoring Stats "+version;
- titleEl.addChild(title);
+ //String version = " ("+XsulVersion.getUserAgent()+")";
+ //String title = s.getServerName()+" Monitoring Stats "+version;
+ titleEl.addChild(stats.getServerName());
+ String pageHeader = "Monitoring stats for "+stats.getServerName();
XmlElement body = html.addElement(H, "body");
XmlElement h1 = body.addElement(H, "h1");
- h1.addChild(title);
+ h1.addChild(pageHeader);
XmlElement div = body.addElement(H, "div");
div.addAttribute(null, "class", "statistics");
//defensive programming to avoid divide-per-zero when calculating uptime: starTime-1
- double uptimeInSeconds = (System.currentTimeMillis() - s.getStarTimeInMs() - 1) / 1000.0;
- if (s.getRequestXmlMsgsCount() > 0) {
+ double uptimeInSeconds = (System.currentTimeMillis() - stats.getStarTimeInMs() - 1) / 1000.0;
+ if (stats.getRequestXmlMsgsCount() > 0) {
XmlElement p = div.addElement(H, "p");
p.addChild("Number of XML requests: ");
XmlElement spanMsgs = p.addElement(H, "span");
spanMsgs.addAttribute(null, "class", XsulMonitoringStats.XML_REQUESTS_COUNT);
- spanMsgs.addChild(""+s.getRequestXmlMsgsCount());
+ spanMsgs.addChild(""+stats.getRequestXmlMsgsCount());
p.addChild(" ");
}
- if (s.getConnectionsCount() > 0) {
+ if (stats.getConnectionsCount() > 0) {
XmlElement p = div.addElement(H, "p");
p.addChild("Total number of connections: ");
XmlElement spanMsgs = p.addElement(H, "span");
spanMsgs.addAttribute(null, "class", XsulMonitoringStats.CONNECTIONS_COUNT);
- spanMsgs.addChild(""+s.getConnectionsCount());
+ spanMsgs.addChild(""+stats.getConnectionsCount());
p.addChild(" ");
}
- if (s.getRequestXmlMsgsCount() > 0) {
- double avgPerSecond = s.getRequestXmlMsgsCount() / uptimeInSeconds;
+ if (stats.getRequestXmlMsgsCount() > 0) {
+ double avgPerSecond = stats.getRequestXmlMsgsCount() / uptimeInSeconds;
if(avgPerSecond > 1.0) {
XmlElement p = div.addElement(H, "p");
p.addChild("average: ");
@@ -127,21 +128,29 @@
p.addChild(" [seconds]");
}
XmlElement p = div.addElement(H, "p");
- p.addChild("Service started: "+new Date(s.getStarTimeInMs()) );
+ p.addChild("Service started: "+new Date(stats.getStarTimeInMs()) );
}
{
XmlElement p = div.addElement(H, "p");
p.addChild("Start time: ");
XmlElement spanStartTime = p.addElement(H, "span");
- spanStartTime.addChild(""+s.getStarTimeInMs());
+ spanStartTime.addChild(""+stats.getStarTimeInMs());
spanStartTime.addAttribute(null, "class", XsulMonitoringStats.STARTTIME_SECONDS);
p.addChild(" [milliseconds] since UNIX epoch.");
}
{
XmlElement p = div.addElement(H, "p");
- p.addChild("Version: ");
+ p.addChild("Service name/version: ");
XmlElement spanVersion = p.addElement(H, "span");
- spanVersion.addAttribute(null, "class", XsulMonitoringStats.IMPL_VERSION);
+ spanVersion.addAttribute(null, "class", XsulMonitoringStats.SERVER_VERSION);
+ spanVersion.addChild("" + stats.getServerName());
+ }
+
+ {
+ XmlElement p = div.addElement(H, "p");
+ p.addChild("XSUL Version: ");
+ XmlElement spanVersion = p.addElement(H, "span");
+ spanVersion.addAttribute(null, "class", XsulMonitoringStats.XSUL_IMPL_VERSION);
spanVersion.addChild("" + XsulVersion.getImplementationVersion());
}
1.20 +153 -124 codes/xsul/java/modules/xservo_soap_http/xsul/xservo_soap_http/HttpBasedServices.java
Index: HttpBasedServices.java
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/modules/xservo_soap_http/xsul/xservo_soap_http/HttpBasedServices.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -t -w -r1.19 -r1.20
--- HttpBasedServices.java 18 Apr 2006 18:03:48 -0000 1.19
+++ HttpBasedServices.java 6 Jun 2006 20:17:24 -0000 1.20
@@ -4,7 +4,7 @@
*
* This software is open source. See the bottom of this file for the licence.
*
- * $Id: HttpBasedServices.java,v 1.19 2006/04/18 18:03:48 aslom Exp $
+ * $Id: HttpBasedServices.java,v 1.20 2006/06/06 20:17:24 aslom Exp $
*/
package xsul.xservo_soap_http;
@@ -13,9 +13,9 @@
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
-import java.net.URI;
-import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
+import java.util.TreeMap;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
@@ -23,10 +23,12 @@
import org.xmlpull.v1.builder.XmlDocument;
import org.xmlpull.v1.builder.XmlElement;
import org.xmlpull.v1.builder.XmlInfosetBuilder;
+import org.xmlpull.v1.builder.XmlNamespace;
import org.xmlpull.v1.parser_pool.XmlPullParserPool;
import xsul.MLogger;
import xsul.XmlConstants;
import xsul.XsulException;
+import xsul.XsulVersion;
import xsul.http_server.HttpMiniServer;
import xsul.http_server.HttpMiniServlet;
import xsul.http_server.HttpServerException;
@@ -41,13 +43,8 @@
import xsul.soap.SoapUtil;
import xsul.soap11_util.Soap11Util;
import xsul.soap12_util.Soap12Util;
-import xsul.util.FastUUIDGen;
import xsul.util.Utf8Reader;
import xsul.util.Utf8Writer;
-import xsul.ws_addressing.WsAddressing;
-import xsul.ws_addressing.WsaInvoker;
-import xsul.ws_addressing.WsaMessageInformationHeaders;
-import xsul.ws_addressing.WsaRelatesTo;
import xsul.wsdl.WsdlDefinitions;
import xsul.wsdl.WsdlPort;
import xsul.wsdl.WsdlService;
@@ -59,10 +56,10 @@
* This class provides services over HTTP.
*/
public class HttpBasedServices implements XServiceServo {
-
private static final MLogger logger = MLogger.getLogger();
private final static XmlInfosetBuilder builder = XmlConstants.BUILDER;
private static final XmlPullParserPool pool = new XmlPullParserPool(builder.getFactory());
+ private static final String WSDL_SUFFIX = "?wsdl";
private HttpMiniServer server;
private HttpMiniServlet servlet;
@@ -71,10 +68,9 @@
private long startTime = System.currentTimeMillis() - 1; //defensive programming ot avoid divide-per-zero
private long requestXmlMsgCount;
private long numberOfConnections;
+ private String serverName = XsulVersion.getUserAgent();
- private Map services = new HashMap();
-
-
+ private Map services = new TreeMap();
public HttpBasedServices(int tcpPort) throws DynamicInfosetProcessorException {
setServerPort(tcpPort);
@@ -104,6 +100,16 @@
}
+ public void setServerName(String serverName) {
+ if(serverName == null) throw new IllegalArgumentException("null");
+ if(serverName.length() == 0) throw new IllegalArgumentException("empty");
+ this.serverName = serverName;
+ }
+
+ public String getServerName() {
+ return serverName;
+ }
+
// public void addGlobalHandler(XHandler handler) {
// //globalHandlers.add(handler);
// }
@@ -127,6 +133,16 @@
return service;
}
+ public String getServiceWsdl(String serviceName) {
+ //return httpServices.getServer().getLocation() + "/"+SERVICE_NAME+"?wsdl";
+ if(serviceName == null) throw new IllegalArgumentException();
+ if(services.get(serviceName) == null) {
+ throw new XsulException("there is no service with name "+serviceName);
+ }
+ String loc = getServer().getLocation() + "/"+serviceName+WSDL_SUFFIX;
+ return loc;
+ }
+
// public XService newService(String name, String wsdlLoc, Object serviceImpl) {
//
// WsdlDefinitions def = WsdlResolver.getInstance().loadWsdlFromPath(serviceImpl.getClass(), wsdlLoc);
@@ -138,9 +154,6 @@
// return service;
// }
-
-
-
public void setServerPort(int tcpPort) throws DynamicInfosetProcessorException {
if(tcpPort < 0 || tcpPort > 65535) {
throw new IllegalArgumentException("TCP port must be between 0 and 65535");
@@ -215,7 +228,7 @@
String path = req.getPath();
if(method.equals("GET")) {
int posWsdl = -1;
- if((posWsdl = path.indexOf("?wsdl")) != -1) {
+ if((posWsdl = path.indexOf(WSDL_SUFFIX)) != -1) {
int lastSlash = path.lastIndexOf("/");
String name = path.substring(lastSlash+1, posWsdl);
XService service = (XService) services.get(name);
@@ -233,12 +246,28 @@
// print some monitoring statistics
// alive, uptime, #msgs, average ($msgs/second)
XsulMonitoringStats s = XsulMonitoringUtil.createStats(
- "XSUL2", startTime, requestXmlMsgCount, numberOfConnections);
+ serverName, startTime, requestXmlMsgCount, numberOfConnections);
+
+
+ XmlDocument xhtmlDoc = XsulMonitoringUtil.createXhtmlStatsDoc(s, UTF8);
+ XmlElement htmlBody = xhtmlDoc.getDocumentElement().requiredElement(null, "body");
+ XmlNamespace htmlNs = htmlBody.getNamespace();
+ XmlElement p = htmlBody.addElement(htmlNs, "p");
+ p.addChild("Services WSDL: ");
+ // add list of services
+ for(Iterator i = services.keySet().iterator(); i.hasNext(); ) {
+ String serviceName = (String) i.next();
+ String serviceWsdl = getServiceWsdl(serviceName);
+ XmlElement a = p.addElement("a");
+ a.addAttribute("href", serviceWsdl);
+ a.addChild(serviceName);
+ //a.addChild(" WSDL");
+ p.addChild(" ");
+ }
// XmlDocument outgoingDoc = builder.newDocument("1.0", Boolean.TRUE, UTF8);
// XmlElement xhtml = XsulMonitoringUtil.createXhtmlStats(s);
// outgoingDoc.setDocumentElement(xhtml);
- XmlDocument xhtmlDoc = XsulMonitoringUtil.createXhtmlStatsDoc(s, UTF8);
writeXmlDoc(res, UTF8, xhtmlDoc);
}
@@ -301,10 +330,10 @@
try {
XsulMonitoringStats stats = XsulMonitoringUtil.createStats(
- "XSUL2", startTime, requestXmlMsgCount, numberOfConnections);
+ serverName, startTime, requestXmlMsgCount, numberOfConnections);
outgoingDoc = XsulMonitoringUtil.processMonitoringRequest(
stats,
- incomingXml, soapUtil);
+ incomingXml, soapUtil); // support "ping" method!
if(outgoingDoc == null) {
invoke(ctx, soapUtil);
1.5 +5 -2 codes/xsul/java/tests/xsul/async_msg/EchoAsyncService.java
Index: EchoAsyncService.java
===================================================================
RCS file: /l/extreme/cvs/codes/xsul/java/tests/xsul/async_msg/EchoAsyncService.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -t -w -r1.4 -r1.5
--- EchoAsyncService.java 18 Nov 2005 16:34:32 -0000 1.4
+++ EchoAsyncService.java 6 Jun 2006 20:17:24 -0000 1.5
@@ -47,6 +47,8 @@
if(args.length > 2) usage("");
int tcpPort = args.length > 0 ? Integer.parseInt(args[0]) : 0;
httpServices = new HttpBasedServices(tcpPort);
+ httpServices.setServerName("XSUL-EchoAsync/"+XsulVersion.getImplementationVersion());
+
System.out.println("Server started on "+httpServices.getServerPort());
String wsdlLoc = args.length > 1 ? args[1] : DEFAULT_WSDL_LOC;
@@ -61,7 +63,8 @@
}
public static String getServiceWsdlLocation() {
- return httpServices.getServer().getLocation() + "/"+SERVICE_NAME+"?wsdl";
+ //return httpServices.getServer().getLocation() + "/"+SERVICE_NAME+"?wsdl";
+ return httpServices.getServiceWsdl(SERVICE_NAME);
}
public static void shutdownServer() {
httpServices.getServer().shutdownServer();