You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by du...@apache.org on 2002/01/15 12:56:32 UTC
cvs commit: xml-axis/java/src/org/apache/axis SimpleChain.java
dug 02/01/15 03:56:32
Modified: java/src/org/apache/axis SimpleChain.java
Log:
This patch tidies up SimpleChain:
1. Adds a description to the prologue.
2. Strips out the erroneous and now redundant thread-safety logic.
3. Removes the extraneous options hashtable field which is simply inherited from BasicHandler.
4. Initialises the 'handlers' Vector (since a permanently empty SimpleChain is a rarity).
5. Tightens up the scope of the visitor strategy objects making them private and final.
6. Fixes the trace logging of generateWSDL.
Submitted by: Glyn Normington (norm@uk.ibm.com)
Revision Changes Path
1.39 +62 -50 xml-axis/java/src/org/apache/axis/SimpleChain.java
Index: SimpleChain.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/SimpleChain.java,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- SimpleChain.java 10 Jan 2002 20:00:59 -0000 1.38
+++ SimpleChain.java 15 Jan 2002 11:56:32 -0000 1.39
@@ -66,20 +66,26 @@
import javax.xml.rpc.namespace.QName;
import java.util.Enumeration;
-import java.util.Hashtable;
import java.util.Vector;
/**
+ * A Simple Chain is a 'composite' Handler in that it aggregates a collection
+ * of Handlers and also acts as a Handler which delegates its operations to
+ * the collection.
+ * <p>
+ * A Simple Chain initially has no Handlers. Handlers may be added until the
+ * chain is invoke()d after which Handlers may not be added (and any attempt
+ * to do so will throw an exception).
*
* @author Doug Davis (dug@us.ibm.com)
+ * @author Glyn Normington (norm@uk.ibm.com)
*/
public class SimpleChain extends BasicHandler implements Chain {
static Category category =
Category.getInstance(SimpleChain.class.getName());
- protected Vector handlers ;
- protected Hashtable options ;
- protected boolean invoked;
+ protected Vector handlers = new Vector();
+ protected boolean invoked = false;
public void init() {
for ( int i = 0 ; i < handlers.size() ; i++ )
@@ -91,8 +97,11 @@
((Handler) handlers.elementAt( i )).cleanup();
}
- static InvocationStrategy iVisitor = new InvocationStrategy();
- static WSDLGenStrategy wsdlVisitor = new WSDLGenStrategy();
+ private static final HandlerIterationStrategy iVisitor =
+ new InvocationStrategy();
+
+ private static final HandlerIterationStrategy wsdlVisitor =
+ new WSDLGenStrategy();
/**
* Iterate over the chain invoking each handler. If there's a fault
@@ -100,53 +109,54 @@
* rethrow the exception.
*/
public void invoke(MessageContext msgContext) throws AxisFault {
- invoked = true;
+ if (category.isDebugEnabled()) {
+ category.debug(JavaUtils.getMessage("enter00",
+ "SimpleChain::invoke"));
+ }
+
+ invoked = true;
doVisiting(msgContext, iVisitor);
- }
+
+ if (category.isDebugEnabled()) {
+ category.debug(JavaUtils.getMessage("exit00",
+ "SimpleChain::invoke"));
+ }
+ }
/**
* Iterate over the chain letting each handler have a crack at
* contributing to a WSDL description.
*/
public void generateWSDL(MessageContext msgContext) throws AxisFault {
+ if (category.isDebugEnabled()) {
+ category.debug(JavaUtils.getMessage("enter00",
+ "SimpleChain::generateWSDL"));
+ }
+
invoked = true;
doVisiting(msgContext, wsdlVisitor);
- }
-
- private void doVisiting(MessageContext msgContext,
- HandlerIterationStrategy visitor) throws AxisFault {
if (category.isDebugEnabled()) {
- category.debug(JavaUtils.getMessage("enter00",
- "SimpleChain::invoke"));
+ category.debug(JavaUtils.getMessage("exit00",
+ "SimpleChain::generateWSDL"));
}
+ }
+ private void doVisiting(MessageContext msgContext,
+ HandlerIterationStrategy visitor) throws AxisFault {
int i = 0 ;
try {
- Vector localHandlers;
- // copies handlers to a local variable for thread-safe
- // Unfortunately, localHandlers and handlers are references
- // that point at the same Vector so this doesn't give
- // thread safety.
- if ((localHandlers = handlers) != null) {
- Enumeration enum = localHandlers.elements();
- while (enum.hasMoreElements()) {
- visitor.visit((Handler)enum.nextElement(), msgContext);
- i++;
- }
+ Enumeration enum = handlers.elements();
+ while (enum.hasMoreElements()) {
+ visitor.visit((Handler)enum.nextElement(), msgContext);
+ i++;
}
- }
- catch( Exception e ) {
+ } catch( AxisFault f ) {
// notify fault in reverse order and then rethrow
- category.error( e );
+ category.error( f );
while( --i >= 0 )
((Handler) handlers.elementAt( i )).onFault( msgContext );
- throw AxisFault.makeFault(e);
- }
-
- if (category.isDebugEnabled()) {
- category.debug(JavaUtils.getMessage("exit00",
- "SimpleChain::invoke"));
+ throw f;
}
}
@@ -166,7 +176,8 @@
((Handler) handlers.elementAt( i )).onFault( msgContext );
if (category.isDebugEnabled()) {
- category.debug(JavaUtils.getMessage("exit00", "SimpleChain::onFault"));
+ category.debug(JavaUtils.getMessage("exit00",
+ "SimpleChain::onFault"));
}
}
@@ -180,22 +191,23 @@
public void addHandler(Handler handler) {
if (handler == null)
throw new InternalException(
- JavaUtils.getMessage("nullHandler00", "SimpleChain::addHandler"));
+ JavaUtils.getMessage("nullHandler00",
+ "SimpleChain::addHandler"));
if (invoked)
throw new InternalException(
- JavaUtils.getMessage("addAfterInvoke00", "SimpleChain::addHandler"));
+ JavaUtils.getMessage("addAfterInvoke00",
+ "SimpleChain::addHandler"));
- if ( handlers == null ) handlers = new Vector();
handlers.add( handler );
}
public boolean contains(Handler handler) {
- return( handlers != null ? handlers.contains( handler ) : false );
+ return( handlers.contains( handler ));
}
public Handler[] getHandlers() {
- if (handlers == null)
+ if (handlers.size() == 0)
return null;
Handler [] ret = new Handler[handlers.size()];
@@ -210,18 +222,18 @@
Element root = doc.createElementNS("", "chain" );
- if (handlers != null ) {
- StringBuffer str = new StringBuffer();
- Handler h ;
- for ( int i = 0 ; i < handlers.size() ; i++ ) {
- if ( i != 0 ) str.append(",");
- h = (Handler) handlers.elementAt(i);
- str.append( h.getName() );
- }
+ StringBuffer str = new StringBuffer();
+ int i = 0;
+ while (i < handlers.size()) {
+ if ( i != 0 ) str.append(",");
+ Handler h = (Handler) handlers.elementAt(i);
+ str.append( h.getName() );
+ i++;
+ }
+ if (i > 0) {
root.setAttribute( "flow", str.toString() );
}
- options = this.getOptions();
if ( options != null ) {
Enumeration e = options.keys();
while ( e.hasMoreElements() ) {
@@ -241,4 +253,4 @@
return( root );
}
-};
+}