a null Object is being passed into the DocumentCache$CacheKey.equals() causing an NPE when an attempt is made to test its collection value. as the cache is a WeakHashMap, I'm wondering if it was possible that the object has been garbage collected. should a WeakHashMap be used in an environment with recreatable keys?
listed below is a simple fix that simply checks for a null incoming object and returns false, i.e. the instance says that it isn't possible for me to be equal to null.
could this please be committed to cvs repository? it passes all of tests for our application that used to reliably cause the NPE.
this was harder to track down that it should have been as FaultCodes.createAPIException() was returning it as a generic RuntimeException with an empty message.
listed below is a simple change that provides more information when the Exception isn't an instanceof APIException. it uses Exception.toString() v. Exception.getMessage() as that should at least get you the Exception's class name. I think an Exception.printStackTrace() should be done as this is an unanticipated error event.
could this also please be committed to cvs repository? it makes it a lot easier to debug.
thanks!
-- Jeff Suttor <[EMAIL PROTECTED]>
cvs diff -u -r1.1.1 -r1.2 DocumentCache.java
Index: DocumentCache.java
===================================================================
RCS file: /jeeves/registry-server/xml-xindice/java/src/org/apache/xindice/core/DocumentCache.java,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- DocumentCache.java 2002/07/10 21:39:54 1.1.1.1
+++ DocumentCache.java 2002/07/11 05:44:45 1.2
@@ -167,6 +167,12 @@
}
public boolean equals(Object o) {
+ // on Solaris/Linux with JDK1.4 Object is sometimes null
+ // is WeakHashMap being garbage collected more aggressively?
+ if ( o == null ) {
+ return false;
+ }
+
CacheKey comp = (CacheKey)o;
if ( col != comp.col )
return false;
cvs diff -u -r1.1.1 -r 1.2 FaultCodes.java
Index: FaultCodes.java
===================================================================
RCS file: /jeeves/registry-server/xml-xindice/java/src/org/apache/xindice/core/FaultCodes.java,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- FaultCodes.java 2002/07/10 21:39:54 1.1.1.1
+++ FaultCodes.java 2002/07/11 05:44:45 1.2
@@ -203,9 +203,13 @@
if ( e instanceof APIException )
return (APIException)e;
else {
- String m = e.getMessage();
- if ( m == null )
- m = "";
+ // provide as much information as possible about the exception
+ String m = e.toString();
+ if ( m == null ) {
+ // should never happen
+ m = "Exception.toString() returned null in FaultCodes.APIException(Exception)";
+ }
+ e.printStackTrace();
if ( e instanceof RuntimeException )
return new APIException(JAVA_RUNTIME_ERROR, getMessage(JAVA_RUNTIME_ERROR), m);
