Frage

Ich arbeite an einem Projekt, in dem wir aktivierte Ausnahmen verwenden möchten, um den Benutzer über (zum Beispiel) falsche Eingaben oder falsche Maßnahmen zu informieren. Solche Ausnahmen sollten eine Hierarchie haben wie:

public abstract class BusinessException extends java.lang.Exception {...}
public class InvalidInputException extends BusinessException {...}
public class InvalidActionException extends BusinessException {...}

Wir generieren Java-Code aus WSDL / XSD (Contract-First-Ansatz) unter Verwendung von Maven, jaxws-maven-plugin und target wsimport.

Ich habe versucht, dies zu befolgen ( http: / /www.ibm.com/developerworks/xml/library/ws-tip-jaxrpc.html ) Tutorial (es ist für jax-rpc, scheint aber auch für jax-ws zu funktionieren). Ich habe geschrieben

<definitions ...>

    <message name="empty"/>
    <message name="ExceptionMessage">
        <part name="fault" element="ows:ValidationException"/>
    </message>

    <portType name="TestWebService">
        <operation name="throwException">
            <input message="tns:empty"/>
            <output message="tns:empty"/>
            <fault name="fault" message="tns:ExceptionMessage"/>
        </operation>
    </portType>

    <binding name="TestWebServicePortBinding"
             type="tns:TestWebService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
                      style="document"/>


        <operation name="throwException">
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
            <fault name="fault">
                <soap:fault name="fault" use="literal"/>
            </fault>
        </operation>
    </binding>

  ...
</definitions>

mit in ows definierten Typen: Namespace

<xs:complexType name="BusinessException" abstract="true">
    <xs:sequence>
        <xs:element name="code" type="xs:int"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="InvalidInputException">
    <xs:complexContent>
        <xs:extension base="tns:BusinessException">
            <xs:sequence>
                <xs:element name="validationMessage" type="xs:string"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="InvalidActionException">
    <xs:complexContent>
        <xs:extension base="tns:BusinessException">
            <xs:sequence>
                <xs:element name="actionName" type="xs:string"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:element name="ValidationException" type="tns:InvalidInputException"/>

Wenn ich mvn clean package ausführe, wird Folgendes angezeigt (Getter, Setter, Ctors und Annotationen wurden entfernt):

public interface TestWebService {
    @WebMethod
    public void throwException() throws ExceptionMessage;
}

public class ExceptionMessage extends Exception {
    private InvalidInputException faultInfo;
    (...)
}

public abstract class BusinessException implements Serializable {
    protected int code;
    (...)
}  

public class InvalidActionException extends BusinessException implements Serializable {
    protected String actionName;
    (...)
}

public class InvalidInputException extends BusinessException implements Serializable {
    protected String validationMessage;
    (...)
}

Was ich nicht wollte, weil es eine Ausnahme gibt und es verschiedene faultInto-Daten enthalten kann. Gibt es eine Möglichkeit, eine Ausnahmehierarchie wie oben in XSD / WSDL angegeben zu erstellen? Da die ExceptionMessage-Klasse direkt aus dem <message>-Tag generiert wird, konnte ich dort keine Möglichkeit finden, ein Elternteil / Kind zu erstellen.

War es hilfreich?

Lösung 2

Es scheint, dass dies mit den oben genannten Technologien (WSDL / XSD (Contract-First-Ansatz) unter Verwendung von Maven, jaxws-maven-plugin, wsimport-Ziel) nicht möglich ist.

Andere Tipps

Könnten Sie die WSDL-Operation in ... ändern?

<portType name="TestWebService">
    <operation name="throwException">
        <input message="tns:empty"/>
        <output message="tns:empty"/>
        <fault name="fault" message="tns:BusinessException"/>
    </operation>
</portType>

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top