Thanks alot for your advice. I have seen what I do have to change , i have
changed it but now I have a question: should I change the class from jar with
my own class ? :o)
my own class :
+ compiled with no modifications , size :14.840
+ compiled with modifications , size : 14.983
( till now all normal )
their class ( from soap.jar )
+ size : 15.186 . As I see things , this might not be the right source code
from the class. They have added something. So if I overwrite their file ...
there will be none of their modifs .
How to solve it ?
My response :
I will modif the class and overwrite it but might be some good chances not to
work in other part of ksoap. ( I am a little bit ashamed because I haven't
made the changes till now )
lazy dovle
:o)
> dovle wrote:
> >Hi ,
> >Thanks for the point.
> >But how can you explain that I have a service on apache soap server ( a
> > class that has some exposed methods ) and one of the methods throws an
> >SOAPException . In fact throws my own exception that extends SOAPException
> > . And it works . Well , last time it worked. Now I should try to
> > re-deploy to see if is something wrong with my own code or .
>
> It works out that your services is not always throwing an exception
> sometimes it is working, but when it does throw an exception it is
> getting masked by the NullPointerException.
>
> >Might be something wrong to the isd:faultListener from
> > DeploymentDescriptor ?
> >
> >Anyway, what does the line with isdFaultListener from DD.xml means ?
> >( a little bit new to apache soap )
>
> To tell you the truth I'm not exactly sure what the faultListener is
> for. It's a class that gets put in an array with all of the other
> faultListeners from all of the other services and then helps report
> errors. I guess.
>
> >Please, can you tell me what do I have to change in order to make it work?
>
> Anyways to take care of the NullPointerException do the following.
> Below is the buildFaultRouter method in the DeploymentDescriptor class
> located in src/org/apache/server/DeploymentDescriptor.java within SOAP.
> The
>
> public SOAPFaultRouter buildFaultRouter(SOAPContext ctxt) {
>
> if (fr != null) return fr;
>
> fr = new SOAPFaultRouter();
>
> if (faultListener == null) return fr;
>
> SOAPFaultListener[] lis = new
> SOAPFaultListener[faultListener.length];
>
> try {
> for (int i = 0; i < faultListener.length; i++) {
>
> Class c = ctxt.loadClass( faultListener[i] );
>
> // fix for the nullpointerexception that soap would throw
> if (c == null) {
> if
> (faultListener[i].equalsIgnoreCase("org.apache.soap.server.DOMFaultListener
>")) lis[i] = (SOAPFaultListener) new
> org.apache.soap.server.DOMFaultListener();
> else if
> (faultListener[i].equalsIgnoreCase("org.apache.soap.server.ExceptionFaultLi
>stener")) lis[i] = (SOAPFaultListener) new
> org.apache.soap.server.ExceptionFaultListener();
> } else
> lis[i] = (SOAPFaultListener)c.newInstance();
> }
> }
> catch (Exception e) {
> }
>
> fr.setFaultListener(lis);
>
> return fr;
> }
>
> What happens is that for some reason the faultListener instance exists
> except when you put it into the array it's not there, and then SOAP
> tries to notify all Listeners except there aren't any.
>
> Good luck
>
> Rich Catlett
>
> >Thanks ,
> >dovle
> >
> >>This is actually a bug in the apache code. I tracked it down for some
> >>reason when a fault occurs, when the soap code sets a faultrouter in the
> >>soap code the one that it is going to add to the list exists, but it
> >>adds it, and then nothing is there. When it tries to access the list
> >>there is nothing there and it throws the NullPointerException. I spent
> >>some time on it, but I ended up having to just skip it so it never tries
> >>to notify faultListeners. The NullPointerException is masking the
> >>actual exception that occured. I gave a very detailoed description and
> >>never heard anything else. You can search the archives for it.
> >>
> >>Rich Catlett