Классы исключений, созданные с помощью Axis2 wsdl2java, не расширяют исключение - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь сгенерировать клиента с помощью wsdl2java. WSDL выглядит следующим образом:

    <?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://admin.ws.csd.rsa.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://admin.ws.csd.rsa.com" xmlns:intf="http://admin.ws.csd.rsa.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!--WSDL created by Apache Axis version: 1.4
    Built on Apr 22, 2006 (06:55:48 PDT)-->
    <wsdl:types>
        <schema elementFormDefault="qualified" targetNamespace="http://admin.ws.csd.rsa.com" xmlns="http://www.w3.org/2001/XMLSchema">
            <element name="getUserStatus">
                <complexType>
                    <sequence>
                        <element name="in0" type="impl:AdminRequest"/>
                    </sequence>
                </complexType>
            </element>
            <complexType name="GenericRequest">
                <sequence>
                    <element name="adminID" nillable="true" type="xsd:string"/>
                    <element name="orgName" nillable="true" type="xsd:string"/>
                    <element name="userName" nillable="true" type="xsd:string"/>
                </sequence>
            </complexType>
            <complexType name="AdminRequest">
                <complexContent>
                    <extension base="impl:GenericRequest">
                        <sequence>
                            <element name="userStatus" nillable="true" type="xsd:string"/>
                        </sequence>
                    </extension>
                </complexContent>
            </complexType>
            <element name="getUserStatusResponse">
                <complexType>
                    <sequence>
                        <element name="getUserStatusReturn" type="impl:AdminResponse"/>
                    </sequence>
                </complexType>
            </element>
            <complexType name="GenericResponse">
                <sequence>
                    <element name="status" nillable="true" type="xsd:string"/>
                </sequence>
            </complexType>
            <complexType name="UserChange">
                <sequence>
                    <element name="date" nillable="true" type="xsd:string"/>
                    <element name="description" nillable="true" type="xsd:string"/>
                    <element name="type" nillable="true" type="xsd:string"/>
                </sequence>
            </complexType>
            <complexType name="ArrayOfUserChange">
                <sequence>
                    <element maxOccurs="unbounded" minOccurs="0" name="userChangeHistory" type="impl:UserChange"/>
                </sequence>
            </complexType>
            <complexType name="AdminResponse">
                <complexContent>
                    <extension base="impl:GenericResponse">
                        <sequence>
                            <element name="userChangeHistory" nillable="true" type="impl:ArrayOfUserChange"/>
                            <element name="userStatus" nillable="true" type="xsd:string"/>
                        </sequence>
                    </extension>
                </complexContent>
            </complexType>
            <complexType name="AdminServiceException">
                <sequence/>
            </complexType>
            <element name="fault" type="impl:AdminServiceException"/>
            <element name="unlockUser">
                <complexType>
                    <sequence>
                        <element name="in0" type="impl:AdminRequest"/>
                    </sequence>
                </complexType>
            </element>
            <element name="unlockUserResponse">
                <complexType>
                    <sequence>
                        <element name="unlockUserReturn" type="impl:AdminResponse"/>
                    </sequence>
                </complexType>
            </element>
            <element name="deleteUser">
                <complexType>
                    <sequence>
                        <element name="in0" type="impl:AdminRequest"/>
                    </sequence>
                </complexType>
            </element>
            <element name="deleteUserResponse">
                <complexType>
                    <sequence>
                        <element name="deleteUserReturn" type="impl:AdminResponse"/>
                    </sequence>
                </complexType>
            </element>
            <element name="getUserChangeHistory">
                <complexType>
                    <sequence>
                        <element name="in0" type="impl:AdminRequest"/>
                    </sequence>
                </complexType>
            </element>
            <element name="getUserChangeHistoryResponse">
                <complexType>
                    <sequence>
                        <element name="getUserChangeHistoryReturn" type="impl:AdminResponse"/>
                    </sequence>
                </complexType>
            </element>
            <element name="lockUser">
                <complexType>
                    <sequence>
                        <element name="in0" type="impl:AdminRequest"/>
                    </sequence>
                </complexType>
            </element>
            <element name="lockUserResponse">
                <complexType>
                    <sequence>
                        <element name="lockUserReturn" type="impl:AdminResponse"/>
                    </sequence>
                </complexType>
            </element>
            <element name="setUserStatus">
                <complexType>
                    <sequence>
                        <element name="in0" type="impl:AdminRequest"/>
                    </sequence>
                </complexType>
            </element>
            <element name="setUserStatusResponse">
                <complexType>
                    <sequence>
                        <element name="setUserStatusReturn" type="impl:AdminResponse"/>
                    </sequence>
                </complexType>
            </element>
        </schema>
    </wsdl:types>
    <wsdl:message name="lockUserRequest">
        <wsdl:part element="impl:lockUser" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="unlockUserRequest">
        <wsdl:part element="impl:unlockUser" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="setUserStatusRequest">
        <wsdl:part element="impl:setUserStatus" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="getUserStatusResponse">
        <wsdl:part element="impl:getUserStatusResponse" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="getUserStatusRequest">
        <wsdl:part element="impl:getUserStatus" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="getUserChangeHistoryResponse">
        <wsdl:part element="impl:getUserChangeHistoryResponse" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="getUserChangeHistoryRequest">
        <wsdl:part element="impl:getUserChangeHistory" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="AdminServiceException">
        <wsdl:part element="impl:fault" name="fault"/>
    </wsdl:message>
    <wsdl:message name="lockUserResponse">
        <wsdl:part element="impl:lockUserResponse" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="deleteUserRequest">
        <wsdl:part element="impl:deleteUser" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="deleteUserResponse">
        <wsdl:part element="impl:deleteUserResponse" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="unlockUserResponse">
        <wsdl:part element="impl:unlockUserResponse" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="setUserStatusResponse">
        <wsdl:part element="impl:setUserStatusResponse" name="parameters"/>
    </wsdl:message>
    <wsdl:portType name="UserAdminService">
        <wsdl:operation name="getUserStatus">
            <wsdl:input message="impl:getUserStatusRequest" name="getUserStatusRequest"/>
            <wsdl:output message="impl:getUserStatusResponse" name="getUserStatusResponse"/>
            <wsdl:fault message="impl:AdminServiceException" name="AdminServiceException"/>
        </wsdl:operation>
        <wsdl:operation name="unlockUser">
            <wsdl:input message="impl:unlockUserRequest" name="unlockUserRequest"/>
            <wsdl:output message="impl:unlockUserResponse" name="unlockUserResponse"/>
            <wsdl:fault message="impl:AdminServiceException" name="AdminServiceException"/>
        </wsdl:operation>
        <wsdl:operation name="deleteUser">
            <wsdl:input message="impl:deleteUserRequest" name="deleteUserRequest"/>
            <wsdl:output message="impl:deleteUserResponse" name="deleteUserResponse"/>
            <wsdl:fault message="impl:AdminServiceException" name="AdminServiceException"/>
        </wsdl:operation>
        <wsdl:operation name="getUserChangeHistory">
            <wsdl:input message="impl:getUserChangeHistoryRequest" name="getUserChangeHistoryRequest"/>
            <wsdl:output message="impl:getUserChangeHistoryResponse" name="getUserChangeHistoryResponse"/>
            <wsdl:fault message="impl:AdminServiceException" name="AdminServiceException"/>
        </wsdl:operation>
        <wsdl:operation name="lockUser">
            <wsdl:input message="impl:lockUserRequest" name="lockUserRequest"/>
            <wsdl:output message="impl:lockUserResponse" name="lockUserResponse"/>
            <wsdl:fault message="impl:AdminServiceException" name="AdminServiceException"/>
        </wsdl:operation>
        <wsdl:operation name="setUserStatus">
            <wsdl:input message="impl:setUserStatusRequest" name="setUserStatusRequest"/>
            <wsdl:output message="impl:setUserStatusResponse" name="setUserStatusResponse"/>
            <wsdl:fault message="impl:AdminServiceException" name="AdminServiceException"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="AdaptiveAuthenticationAdminSoapBinding" type="impl:UserAdminService">
        <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="getUserStatus">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="getUserStatusRequest">
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="getUserStatusResponse">
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="AdminServiceException">
                <wsdlsoap:fault name="AdminServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
        <wsdl:operation name="unlockUser">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="unlockUserRequest">
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="unlockUserResponse">
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="AdminServiceException">
                <wsdlsoap:fault name="AdminServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
        <wsdl:operation name="deleteUser">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="deleteUserRequest">
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="deleteUserResponse">
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="AdminServiceException">
                <wsdlsoap:fault name="AdminServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
        <wsdl:operation name="getUserChangeHistory">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="getUserChangeHistoryRequest">
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="getUserChangeHistoryResponse">
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="AdminServiceException">
                <wsdlsoap:fault name="AdminServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
        <wsdl:operation name="lockUser">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="lockUserRequest">
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="lockUserResponse">
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="AdminServiceException">
                <wsdlsoap:fault name="AdminServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
        <wsdl:operation name="setUserStatus">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="setUserStatusRequest">
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="setUserStatusResponse">
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="AdminServiceException">
                <wsdlsoap:fault name="AdminServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="UserAdminServiceService">
        <wsdl:port binding="impl:AdaptiveAuthenticationAdminSoapBinding" name="AdaptiveAuthenticationAdmin">
            <wsdlsoap:address location="http://myserver:83/AdaptiveAuthenticationAdmin/services/AdaptiveAuthenticationAdmin"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Проблема, которую я нахожу, если хотят распаковать классы (используя опцию -u), класс AdminServiceException не расширяет java.lang.Exception, и поэтому код не компилируется, так как он не может выбрасывать этот класс. Итак, ситуация такова:

Если я упаковываю классы (без опции -u), класс определяется следующим образом:

    public class AdminServiceException extends java.lang.Exception{....}

но если я использую опцию -u, класс генерируется следующим образом:

    public  class AdminServiceException
    implements org.apache.axis2.databinding.ADBBean{....}

что не правильно, так как не может быть брошено. Есть идеи?

EDIT:

Я просто изменил WSDL, чтобы сделать его проще. Это выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://admin.ws.csd.rsa.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://admin.ws.csd.rsa.com" xmlns:intf="http://admin.ws.csd.rsa.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!--WSDL created by Apache Axis version: 1.4
    Built on Apr 22, 2006 (06:55:48 PDT)-->
    <wsdl:types>
        <schema elementFormDefault="qualified" targetNamespace="http://admin.ws.csd.rsa.com" xmlns="http://www.w3.org/2001/XMLSchema">

            <element name="myRequest">
                <complexType>
                    <sequence>
                        <element name="userName" nillable="true" type="xsd:string"/>
                    </sequence>
                </complexType>
            </element>

            <element name="myResponse">
                <complexType>
                    <sequence>
                        <element name="userStatus" nillable="true" type="xsd:string"/>
                    </sequence>
                </complexType>
            </element>

            <complexType name="AdminServiceException">
                <sequence/>
            </complexType>
            <element name="fault" type="impl:AdminServiceException"/>

        </schema>
    </wsdl:types>

    <wsdl:message name="getUserStatusResponse">
        <wsdl:part element="impl:myResponse" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="getUserStatusRequest">
        <wsdl:part element="impl:myRequest" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="AdminServiceException">
        <wsdl:part element="impl:fault" name="fault"/>
    </wsdl:message>

    <wsdl:portType name="UserAdminService">
        <wsdl:operation name="getUserStatus">
            <wsdl:input message="impl:getUserStatusRequest" name="getUserStatusRequest"/>
            <wsdl:output message="impl:getUserStatusResponse" name="getUserStatusResponse"/>
            <wsdl:fault message="impl:AdminServiceException" name="AdminServiceException"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="AdaptiveAuthenticationAdminSoapBinding" type="impl:UserAdminService">
        <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="getUserStatus">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input name="getUserStatusRequest">
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="getUserStatusResponse">
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="AdminServiceException">
                <wsdlsoap:fault name="AdminServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>

    </wsdl:binding>
    <wsdl:service name="UserAdminServiceService">
        <wsdl:port binding="impl:AdaptiveAuthenticationAdminSoapBinding" name="AdaptiveAuthenticationAdmin">
            <wsdlsoap:address location="http://server:83/AdaptiveAuthenticationAdmin/services/AdaptiveAuthenticationAdmin"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Я создал код, используя wsdl2java, следующим образом:

/opt/eco/ecoprd/axis2-1.6.1/bin >> ./wsdl2java.sh  -u -uri test2.wsdl -or
 Using AXIS2_HOME: /opt/eco/ecoprd/axis2-1.6.1
 Using JAVA_HOME:  /usr/local/jdk1.6.0_16
Retrieving document at 'test2.wsdl'.

Но когда я пытаюсь скомпилировать код:

/opt/eco/ecoprd/axis2-1.6.1/bin >> javac -cp $CLASSPATH  src/com/rsa/csd/ws/admin/*.java
src/com/rsa/csd/ws/admin/Fault.java:95: cannot find symbol
symbol  : method serialize(javax.xml.namespace.QName,javax.xml.stream.XMLStreamWriter)
location: class com.rsa.csd.ws.admin.AdminServiceException
                                 localFault.serialize(MY_QNAME,xmlWriter);
                                           ^
src/com/rsa/csd/ws/admin/Fault.java:278: cannot find symbol
symbol  : method getPullParser(javax.xml.namespace.QName)
location: class com.rsa.csd.ws.admin.AdminServiceException
                return localFault.getPullParser(MY_QNAME);
                                 ^
src/com/rsa/csd/ws/admin/Fault.java:326: cannot find symbol
symbol  : variable Factory
location: class com.rsa.csd.ws.admin.AdminServiceException
                                                object.setFault(com.rsa.csd.ws.admin.AdminServiceException.Factory.parse(reader));
                                                                                                          ^
src/com/rsa/csd/ws/admin/ExtensionMapper.java:28: cannot find symbol
symbol  : variable Factory
location: class com.rsa.csd.ws.admin.AdminServiceException
                            return  com.rsa.csd.ws.admin.AdminServiceException.Factory.parse(reader);
                                                                              ^
Note: src/com/rsa/csd/ws/admin/UserAdminServiceServiceStub.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors

Ответы [ 3 ]

0 голосов
/ 02 апреля 2012

Я попытался сгенерировать клиент с вашим вторым wsdl, используя Eclipse IDE. Сгенерировано и скомпилировано все хорошо. Это означает, что wsdl - это хорошо. Сгенерировано AdminServiceException.java

public class AdminServiceException extends java.lang.Exception{

    private static final long serialVersionUID = 1333311238212L;

    private com.rsa.csd.ws.admin.UserAdminServiceServiceStub.Fault faultMessage;


        public AdminServiceException() {
            super("AdminServiceException");
        }

        public AdminServiceException(java.lang.String s) {
           super(s);
        }

        public AdminServiceException(java.lang.String s, java.lang.Throwable ex) {
          super(s, ex);
        }

        public AdminServiceException(java.lang.Throwable cause) {
            super(cause);
        }


    public void setFaultMessage(com.rsa.csd.ws.admin.UserAdminServiceServiceStub.Fault msg){
       faultMessage = msg;
    }

    public com.rsa.csd.ws.admin.UserAdminServiceServiceStub.Fault getFaultMessage(){
       return faultMessage;
    }
}

Для командной строки используйте : ./wsdl2java.sh -g -ssi -uri test2.wsdl Вам не нужно упоминать -u, он будет генерировать отдельные классы для связывателей данных, реализующих связывание, которое вы использовали.

0 голосов
/ 23 августа 2013

На всякий случай, если вы используете привязку данных JAXB (JAXBRI), вы должны убедиться, что ваше wsdl: имя сообщения (AdminServiceException) в следующем элементе:

<wsdl:message name="AdminServiceException">
        <wsdl:part element="impl:fault" name="fault"/>
</wsdl:message> 

отличается от имени элемента (импл: ошибка). В вашем случае они на самом деле разные.

В противном случае вы получите ошибку «AdminServiceException не расширяет java.lang.Exception».

0 голосов
/ 22 марта 2012

wsdl2java должен был сгенерировать класс скелета и / или интерфейс для класса обслуживания. Проверьте скелет, чтобы увидеть, как соответствующие сервисные функции объявлены. Вы, вероятно, обнаружите, что они объявили что-то вроде AdminServiceExceptionException. По какой-то причине Axis2 создает один класс на основе определения ошибки в WSDL, а затем другой класс, расширяющий Exception, который действует как контейнер для первого класса.

...