You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@xml.apache.org by du...@apache.org on 2001/04/06 15:03:51 UTC
cvs commit: xml-soap/java/src/org/apache/soap/server BaseConfigManager.java XMLConfigManager.java DefaultConfigManager.java
dug 01/04/06 06:03:51
Modified: java/src/org/apache/soap/server XMLConfigManager.java
DefaultConfigManager.java
Added: java/src/org/apache/soap/server BaseConfigManager.java
Log:
Changes to the XML Config Manager and addition of a Base
Config Manager to make writing new Config Managers a little easier.
Sumitted by: Mugnus Thor Torfason(magnus@handpoint.com)
Revision Changes Path
1.2 +42 -100 xml-soap/java/src/org/apache/soap/server/XMLConfigManager.java
Index: XMLConfigManager.java
===================================================================
RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/server/XMLConfigManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XMLConfigManager.java 2001/04/03 02:24:35 1.1
+++ XMLConfigManager.java 2001/04/06 13:03:51 1.2
@@ -57,20 +57,30 @@
package org.apache.soap.server ;
+// Core java classes
import java.util.* ;
import java.io.* ;
+
+// Java Servlet Classes
import javax.servlet.* ;
import javax.servlet.http.* ;
+
+// XML Classes
+import javax.xml.parsers.* ;
+import org.w3c.dom.* ;
+import org.xml.sax.* ;
+
+// SOAP Classes
import org.apache.soap.* ;
import org.apache.soap.rpc.* ;
import org.apache.soap.server.* ;
import org.apache.soap.server.http.* ;
import org.apache.soap.util.* ;
+import org.apache.soap.util.xml.* ;
/**
* An <code>XMLConfigManager</code> ...
*
- * @author Dug (dug@us.ibm.com)
* @author <a href="mailto:magnus@handpoint.com">Magnus Thor Torfason</a>
*
* This class should be almost identical in function to the
@@ -85,18 +95,11 @@
* registry file (typically <tt>DeployedServices.xml</tt>).
*
*/
-public class XMLConfigManager implements ConfigManager {
- protected Hashtable dds = new Hashtable();
- protected String filename = "DeployedServices.xml";
- protected String[] serviceNamesCache ;
- protected ServletContext context = null;
+public class XMLConfigManager extends BaseConfigManager
+ implements ConfigManager {
- /**
- * Sets the Servlet Context.
- */
- public void setContext(ServletContext context) {
- this.context = context;
- }
+ /** The name of the deployment file. */
+ protected String filename = "DeployedServices.xml";
/**
* This method sets the configuration options (usually
@@ -106,83 +109,12 @@
if ( options == null ) return ;
String value = (String) options.get( "filename" );
- if ( value != null && !"".equals(value) )
+ if ( value != null && !"".equals(value) ) {
filename = value ;
- }
-
- /**
- * The init method loads any services that are defined in
- * the underlying registry file.
- */
- public void init() throws SOAPException {
- loadRegistry();
- }
-
- /**
- * Used to deploy a service using a specified DeploymentDescriptor.
- *
- * <p>
- *
- * Note that this method will save the currently deployed services
- * to the underlying registry file, overriding the old configuration.
- */
- public void deploy( DeploymentDescriptor dd ) throws SOAPException {
- String id = dd.getID();
- dds.put( id, dd );
- saveRegistry();
- serviceNamesCache = null ;
- }
-
- /**
- * Undeploy previously deployed services.
- *
- * <p>
- *
- * Note that this method will save the currently deployed services
- * to the underlying registry file, overriding the old configuration.
- */
- public DeploymentDescriptor undeploy( String id ) throws SOAPException {
- DeploymentDescriptor dd = (DeploymentDescriptor) dds.remove( id );
- if ( dd != null ) {
- saveRegistry();
- serviceNamesCache = null ;
- } else {
- throw new SOAPException( Constants.FAULT_CODE_SERVER,
- "Service '" + id + "' unknown" );
- }
- return( dd );
- }
-
- /**
- * Returns a list of all currently deployed services.
- */
- public String[] list() throws SOAPException {
- if (serviceNamesCache != null) {
- return serviceNamesCache;
- }
- Enumeration e = dds.keys ();
- int count = dds.size ();
- serviceNamesCache = new String[count];
- for (int i = 0; i < count; i++) {
- serviceNamesCache[i] = (String) e.nextElement ();
}
- return serviceNamesCache;
}
/**
- * Returns a DeploymentDescriptor from the ConfigManager.
- *
- * <p>
- *
- * This method will simply return null if there is no descriptor
- * corresponding to the id (should it throw a SOAPException ?).
- */
- public DeploymentDescriptor query(String id) throws SOAPException {
- DeploymentDescriptor dd = (DeploymentDescriptor) dds.get (id);
- return( dd );
- }
-
- /**
* Loads the descriptors from the underlying registry file, which
* should be represented as a list of deployment descriptor elements.
*/
@@ -191,32 +123,37 @@
try {
File file = ServerHTTPUtils.getFileFromNameAndContext(filename,
context);
- FileReader fr = new FileReader (file);
- StringWriter sw = new StringWriter();
- char[] buf = new char[1024];
- int cnt;
- while ( (cnt = fr.read(buf)) != -1) {
- sw.write(buf,0,cnt);
+ FileReader rd = new FileReader (file);
+
+ DocumentBuilder xdb = null;
+ Document doc = null;
+ Element root = null;
+
+ try {
+ xdb = XMLParserUtils.getXMLDocBuilder();
+ doc = xdb.parse(new InputSource(rd));
+ root = doc.getDocumentElement();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new SOAPException(Constants.FAULT_CODE_SERVER,e.getMessage());
}
- fr.close ();
- String fileString = sw.toString();
+ NodeList deploymentElements = root.getElementsByTagNameNS(
+ Constants.NS_URI_XML_SOAP_DEPLOYMENT, "service");
+
+ int count = deploymentElements.getLength();
dds = new Hashtable();
- int endTokenPosition;
- while ( (endTokenPosition =
- fileString.indexOf("</isd:service>") ) != -1) {
- StringReader sr = new StringReader(
- fileString.substring(0,endTokenPosition+14));
- DeploymentDescriptor dd = DeploymentDescriptor.fromXML(sr);
+ for( int i=0; i<count; i++ ) {
+ Element deploymentElement = (Element)deploymentElements.item(i);
+ DeploymentDescriptor dd = DeploymentDescriptor.fromXML(
+ deploymentElement);
String id = dd.getID();
dds.put( id, dd );
- fileString = fileString.substring(endTokenPosition+14);
}
} catch(Exception e) {
dds = new Hashtable ();
System.err.println ("SOAP Service Manager: Unable to read '" +
filename + "': assuming fresh start");
- // e.printStackTrace();
}
}
@@ -230,11 +167,16 @@
context);
PrintWriter pw = new PrintWriter(new FileWriter (file));
Enumeration e = dds.elements();
+
+ pw.println("<deployedServices>");
+ pw.println();
while ( e.hasMoreElements() ) {
DeploymentDescriptor dd = (DeploymentDescriptor)e.nextElement();
dd.toXML(pw);
pw.println();
}
+ pw.println("</deployedServices>");
+
pw.close ();
} catch (Exception e) {
throw new SOAPException (Constants.FAULT_CODE_SERVER,
1.8 +20 -52 xml-soap/java/src/org/apache/soap/server/DefaultConfigManager.java
Index: DefaultConfigManager.java
===================================================================
RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/server/DefaultConfigManager.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- DefaultConfigManager.java 2001/02/02 03:32:05 1.7
+++ DefaultConfigManager.java 2001/04/06 13:03:51 1.8
@@ -71,6 +71,7 @@
* A <code>DefaultConfigManager</code> ...
*
* @author Dug (dug@us.ibm.com)
+ * @author <a href="mailto:magnus@handpoint.com">Magnus Thor Torfason</a>
*
* With the introduction of a ConfigManager, the notion of a SOAP
* configuration file was also introduced. The SOAP server will now
@@ -92,66 +93,29 @@
* of the soap.xml configuration file.
*
*/
-public class DefaultConfigManager implements ConfigManager {
- protected Hashtable dds = new Hashtable();
- protected String filename = "DeployedServices.ds";
- protected String[] serviceNamesCache ;
- protected ServletContext context = null;
+public class DefaultConfigManager extends BaseConfigManager
+ implements ConfigManager {
- public void setContext(ServletContext context) {
- this.context = context;
- }
+ /** The name of the deployment file. */
+ protected String filename = "DeployedServices.ds";
+
+ /**
+ * This method sets the configuration options (usually
+ * read from the config file).
+ */
public void setOptions( Hashtable options ) {
if ( options == null ) return ;
-
+
String value = (String) options.get( "filename" );
- if ( value != null && !"".equals(value) )
+ if ( value != null && !"".equals(value) )
filename = value ;
}
-
- public void init() throws SOAPException {
- loadRegistry();
- }
-
- public void deploy( DeploymentDescriptor dd ) throws SOAPException {
- String id = dd.getID();
- dds.put( id, dd );
- saveRegistry();
- serviceNamesCache = null ;
- }
-
- public DeploymentDescriptor undeploy( String id ) throws SOAPException {
- DeploymentDescriptor dd = (DeploymentDescriptor) dds.remove( id );
- if ( dd != null ) {
- saveRegistry();
- serviceNamesCache = null ;
- }
- else {
- throw new SOAPException( Constants.FAULT_CODE_SERVER,
- "Service '" + id + "' unknown" );
- }
- return( dd );
- }
-
- public String[] list() throws SOAPException {
- if (serviceNamesCache != null) {
- return serviceNamesCache;
- }
- Enumeration e = dds.keys ();
- int count = dds.size ();
- serviceNamesCache = new String[count];
- for (int i = 0; i < count; i++) {
- serviceNamesCache[i] = (String) e.nextElement ();
- }
- return serviceNamesCache;
- }
-
- public DeploymentDescriptor query(String id) throws SOAPException {
- DeploymentDescriptor dd = (DeploymentDescriptor) dds.get (id);
- return( dd );
- }
+ /**
+ * Loads the descriptors from the underlying registry file, which
+ * contains a serialized Hashtable.
+ */
public void loadRegistry() throws SOAPException {
// load in a serialized thing
dds = null ;
@@ -170,6 +134,10 @@
}
}
+ /**
+ * Saves currently deployed descriptors to the underlying registry file,
+ * as a serialized Hashtable.
+ */
public void saveRegistry() throws SOAPException {
try {
File file = ServerHTTPUtils.getFileFromNameAndContext(filename,
1.1 xml-soap/java/src/org/apache/soap/server/BaseConfigManager.java
Index: BaseConfigManager.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2000 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "SOAP" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 2000, International
* Business Machines, Inc., http://www.apache.org. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.soap.server ;
import java.util.* ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
import org.apache.soap.* ;
import org.apache.soap.rpc.* ;
import org.apache.soap.server.* ;
import org.apache.soap.server.http.* ;
import org.apache.soap.util.* ;
/**
* An <code>XMLConfigManager</code> ...
*
* @author Dug (dug@us.ibm.com)
* @author <a href="mailto:magnus@handpoint.com">Magnus Thor Torfason</a>
*
* This class should be almost identical in function to the
* DefaultConfigManager.
*
* <p>
*
* The only notable difference is that while
* the DefaultConfigManager uses java readObject() and writeObject()
* methods, this class uses the XML routines of DeploymentDescriptor
* to save and load the DeploymentDescriptors from the underlying
* registry file (typically <tt>DeployedServices.xml</tt>).
*
*/
public abstract class BaseConfigManager implements ConfigManager {
protected Hashtable dds = new Hashtable();
protected String[] serviceNamesCache ;
protected ServletContext context = null;
/**
* Sets the Servlet Context.
*/
public void setContext(ServletContext context) {
this.context = context;
}
/**
* The init method loads any services that are defined in
* the underlying registry file.
*/
public void init() throws SOAPException {
loadRegistry();
}
/**
* Used to deploy a service using a specified DeploymentDescriptor.
*
* <p>
*
* Note that this method will save the currently deployed services
* to the underlying registry file, overriding the old configuration.
*/
public void deploy( DeploymentDescriptor dd ) throws SOAPException {
String id = dd.getID();
dds.put( id, dd );
saveRegistry();
serviceNamesCache = null ;
}
/**
* Undeploy previously deployed services.
*
* <p>
*
* Note that this method will save the currently deployed services
* to the underlying registry file, overriding the old configuration.
*/
public DeploymentDescriptor undeploy( String id ) throws SOAPException {
DeploymentDescriptor dd = (DeploymentDescriptor) dds.remove( id );
if ( dd != null ) {
saveRegistry();
serviceNamesCache = null ;
} else {
throw new SOAPException( Constants.FAULT_CODE_SERVER,
"Service '" + id + "' unknown" );
}
return( dd );
}
/**
* Returns a list of all currently deployed services.
*/
public String[] list() throws SOAPException {
if (serviceNamesCache != null) {
return serviceNamesCache;
}
Enumeration e = dds.keys ();
int count = dds.size ();
serviceNamesCache = new String[count];
for (int i = 0; i < count; i++) {
serviceNamesCache[i] = (String) e.nextElement ();
}
return serviceNamesCache;
}
/**
* Returns a DeploymentDescriptor from the ConfigManager.
*
* <p>
*
* This method will simply return null if there is no descriptor
* corresponding to the id (should it throw a SOAPException ?).
*/
public DeploymentDescriptor query(String id) throws SOAPException {
DeploymentDescriptor dd = (DeploymentDescriptor) dds.get (id);
return( dd );
}
/**
* The loadRegistry() method must be implemented in non-abstract
* subclasses of BaseConfigManager.
*/
public abstract void loadRegistry() throws SOAPException;
/**
* The saveRegistry() method must be implemented in non-abstract
* subclasses of BaseConfigManager.
*/
public abstract void saveRegistry() throws SOAPException;
}