Axis has a strange behaviour with an Exception.

In this exception, there are private fields. When the exception is written
in the WSDL file (?wsdl), the private fields are declared.
I'm not sure, but it seems like a bug ...

I downloaded the nightly build and look for the implemetation of this
feature.
It's located in the org.apache.axis.wsdl.fromJava.MethodRep class :

see theses lines (l.144) :
----------------------------------------------------------------------------
---------------------------

        Class[] exceptionTypes = new
Class[method.getExceptionTypes().length];
        exceptionTypes = method.getExceptionTypes();

        for (int i=0; i < exceptionTypes.length; i++) {
            // Every remote method declares a java.rmi.RemoteException
            if (exceptionTypes[i] != java.rmi.RemoteException.class) {
                Field[] f = exceptionTypes[i].getDeclaredFields(); 
                Vector exceptionParams = new Vector();
                for (int j = 0; j < f.length; j++) {
                    exceptionParams.add(new ParamRep(f[j].getName(),
                                                     f[j].getType(),
ParamRep.IN));
                }
                String pkgAndClsName = exceptionTypes[i].getName();
                _exceptions.add(new ExceptionRep(pkgAndClsName,
exceptionParams));
            }
        }

----------------------------------------------------------------------------
---------------------------

all the fields of the exception are added to the Vector. I think there
should be a test, and that only the public fields or fiels that have getter
methods (setter are not needed) should be added.


An other problem : An of the field of my Exception was a Throwable object.
It's strange to see that the Throwable type was defined in the WSDL ... I
saw that the stopClasses attribute in Emitter used to stop the inheritance
description in the WSDL was null when it is used inside the AxisServlet. Is
this normal ?

Cédric

Reply via email to