rsitze 2002/10/02 08:27:12 Modified: java/src/org/apache/axis FaultableHandler.java java/src/org/apache/axis/handlers/soap SOAPService.java java/src/org/apache/axis/handlers BasicHandler.java Log: Issue being solved: WSDDService with 0 (zero) options: 1. WSDDService.makeNewInstance(): calls new SOAPService(..); 2. SOAPService(): calls initHashtable(true); 3. Options were then created as a LockableHashtable. 4. makeNewInstance(): service.setOptions(getParametersTable()) - note that getParametersTable() can return null, in which case service.options == null 5. service.setOption() is called at least once... - since options == null, it calls initHashtable(false); - options is no long null... and it is a Hashtable 5. If Call.setSOAPService() OR Call.invoke() are called, then service.setPropertyParent() is called. 6. SOAPService.setPropertyParent() - typecasts options to LockableHashtable, options is now a Hashtable... 7. Boom. There still remains one loose end: calling setOptions(Hashtable) may overwrite the (expected) LockableHashtable with a simple Hashtable. Regardless, tests are passing.. Revision Changes Path 1.45 +7 -5 xml-axis/java/src/org/apache/axis/FaultableHandler.java Index: FaultableHandler.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/FaultableHandler.java,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- FaultableHandler.java 18 Sep 2002 16:10:31 -0000 1.44 +++ FaultableHandler.java 2 Oct 2002 15:27:11 -0000 1.45 @@ -134,11 +134,13 @@ Handler faultHandler = null; Hashtable options = getOptions(); - Enumeration enum = options.keys(); - while (enum.hasMoreElements()) { - String s = (String) enum.nextElement(); - if (s.equals("fault-" + fault.getFaultCode().getLocalPart())) { - faultHandler = (Handler)options.get(s); + if (options != null) { + Enumeration enum = options.keys(); + while (enum.hasMoreElements()) { + String s = (String) enum.nextElement(); + if (s.equals("fault-" + fault.getFaultCode().getLocalPart())) { + faultHandler = (Handler)options.get(s); + } } } 1.85 +2 -1 xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java Index: SOAPService.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java,v retrieving revision 1.84 retrieving revision 1.85 diff -u -r1.84 -r1.85 --- SOAPService.java 18 Sep 2002 16:10:40 -0000 1.84 +++ SOAPService.java 2 Oct 2002 15:27:11 -0000 1.85 @@ -235,7 +235,8 @@ */ public SOAPService() { - initHashtable(true); + setOptionsLockable(true); + initHashtable(); // For now, always assume we're the ultimate destination. // TODO : Handle SOAP 1.2 ultimateDestination actor as well 1.39 +9 -3 xml-axis/java/src/org/apache/axis/handlers/BasicHandler.java Index: BasicHandler.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/BasicHandler.java,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- BasicHandler.java 12 Aug 2002 22:58:46 -0000 1.38 +++ BasicHandler.java 2 Oct 2002 15:27:11 -0000 1.39 @@ -84,14 +84,20 @@ protected static Log log = LogFactory.getLog(BasicHandler.class.getName()); + protected boolean makeLockable = false; protected Hashtable options; protected String name; /** * Should this Handler use a LockableHashtable for options? + * Default is 'false'. */ - protected void initHashtable(boolean makeLockable) + protected void setOptionsLockable(boolean makeLockable) { + this.makeLockable = makeLockable; + } + + protected void initHashtable() { if (makeLockable) { options = new LockableHashtable(); @@ -128,7 +134,7 @@ * Set the given option (name/value) in this handler's bag of options */ public void setOption(String name, Object value) { - if ( options == null ) initHashtable(false); + if ( options == null ) initHashtable(); options.put( name, value ); } @@ -166,7 +172,7 @@ } public void setOptions(Hashtable opts) { - options = opts ; + options = opts; } /**