Ive run into a problem lately with SOAP that I had to delve into the code a little to fix, and even then rather than fixing it I just made sure that the code that caused the error to occur didn't run. I wanted to see if anyone else had had this problem, because it seems severe enough that it should already have been discovered and fixed.
The problem occurs in the MessageRouterServlet after the service has finished running. The problem happens if an exception occured during the execution of the service, when the MessageRouterServlet is trying to notify fault listeners that a fault occured. The problem is that a NullPointerException was returned to the SOAP client rather than the actual exception that the soap service threw, making debugging of the service very difficult. below is a very detailed description of exactly where the problem occured. Also I have the latest cvs of soap from maybe a week and a half ago, and I am running tomcat4. The NullPointerException is thrown when on line 354 of the MessageRouterServlet it trys to notify the fault listeners. I delved deeper, the line above ,353, calls buildFaultRouter from the deploymentdescriptor for the service, and that in buildFaultRouter in the dd on line 323 the it trys to load a class from the SOAPContext. In the SOAPContext is where the actual problem occurs because it trys to get the class forName of the faultListener configured for at this point a ClassNotFoundException is thrown it can't find the class for DOMFaultListener. I put in some debugging and discovered that the classloader it is trying to get the class from is the webappclassloader, but for some reason it does not include the WEB-INF/lib directory of the webapp. I got around this by simply not trying to get the Class.forName, and simply creating a new instance of the Listener in the deploymentdescriptor, but then I ran into another problem. The SoapFaultRouter is created fine, an instance of a FaultRouter (a DomFaultRouter) is added to it's list of faultRouters to notify. Then when notifyListeners is called on the FaultRouter it si supposed to notify all listeners in the list that is stored in the FaultRouter. I check the list just before notifyListeners runs it's for loop to notify all of the listeners in it's list and the list exists and contains an instance of a FaultListener, when the for loop runs the list is empty and when it trys to access the list it throws the NullPointerException. If anyone has had this problem or has any ideas why I might be seeing this error please let me know. Rich Catlett