私は、誤った入力や間違ったアクションをユーザーに通知するためにチェック例外を使用するプロジェクトに取り組んでいます。私たちは、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>
タグから直接生成されるため、そこに親子を作成する方法を見つけることができませんでした。
あなたはこれに対して別の解決策を見つけましたか?私は多かれ少なかれ同じ問題に直面している – santiagozky
いいえ、以下の私の答えを参照してください。私が知る限り、jaxwsとの契約初めのアプローチではこれを行うことはできません。 –