2011-02-04 7 views
6

私は、誤った入力や間違ったアクションをユーザーに通知するためにチェック例外を使用するプロジェクトに取り組んでいます。私たちは、Mavenの、jaxws-maven-plugin、目標wsimportを使用してWSDL/XSD(契約最初のアプローチ)からJavaコードを生成JAX-WS Mavenプラグイン(wsimport)を使用したWebServicesのチェック済み例外の階層

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

:このような例外は、次のような階層が必要です。

私はこの(http://www.ibm.com/developerworks/xml/library/ws-tip-jaxrpc.html)チュートリアル(jax-rpcですが、jax-wsでもうまくいくようです)に沿って試してみました。私はOWSで定義されたタイプで

<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> 

を書いた:私はmvn clean packageを実行すると、私は、次の(ゲッター、セッター、ctorsと注釈を削除)を取得

<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"/> 

名前空間:

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; 
    (...) 
} 

1つの例外があり、別のfaultIntoデータを保持できるので、私が望むものではありません。純粋にXSD/WSDLで述べた例外階層を作成する方法はありますか? ExceptionMessageクラスは<message>タグから直接生成されるため、そこに親子を作成する方法を見つけることができませんでした。

+0

あなたはこれに対して別の解決策を見つけましたか?私は多かれ少なかれ同じ問題に直面している – santiagozky

+0

いいえ、以下の私の答えを参照してください。私が知る限り、jaxwsとの契約初めのアプローチではこれを行うことはできません。 –

答えて

0

...にWSDL操作を変更することができます(Mavenの、jaxws-maven-pluginwsimport目標を使用してWSDL/XSD(契約最初のアプローチ))上記の技術を使用して可能ではないようです。

0

あなたは

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

私はそれを変更することができますが、これは私が例外継承を作成するのに役立ちますか? (例えばInvalidInputExceptionはBusinessExceptionを拡張します) –

+0

生成されたコードに正しい継承があるようです。唯一の問題は、throwExceptionメソッドがBusinessExceptionの代わりにExceptionMessageをスローすると宣言していることです。 – Pace

関連する問題