PeopleSoft が提供する WSDL からカスタム Java コードを生成しています。生成されたコードをクリーンアップして使いやすくするために、いくつかの XJC プラグインを作成しました (インターフェイスやカスタム メソッドの追加など)。
ただし、生成された例外クラスに共通のインターフェイスを追加したいのですが、プラグイン内にクラスが存在しないようです。
生成された Exception クラスは次のようになります。
public class M286565V1 extends Exception
それらはすべて同じ命名パターン (M の後に数字の文字列が続き、V1 で終わる) を持ち、すべて java.lang.Exception を拡張します。getFaultInfo()
ただし、それらはすべて、インターフェースに追加したい共通のメソッド も持っています。
私のプラグインでは、によって提供されるすべてのクラスをループし、Outline.getClasses()
java.lang.Exception を拡張するかどうかをそれぞれチェックします。
for ( ClassOutline classOutline : outline.getClasses() ) {
final JDefinedClass implClass = classOutline.implClass;
JClass superClass = implClass._extends();
if ( superClass != null && superClass.fullName().equals( "java.lang.Exception" ) ) {
//This class is an Exception class
}
}
これにより、例外クラスが見つかりません。
私も名前でマッチングを試みました:
for ( ClassOutline classOutline : outline.getClasses() ) {
final JDefinedClass implClass = classOutline.implClass;
//Try to capture exception classes by name
//Exception classes start with an M, followed by a number
final String className = implClass.name();
LOG.debug( "Checking class {}", className );
if ( className.startsWith( "M" ) && Character.isDigit( className.charAt( 1 ) ) ) {
//This class is an Exception class
}
}
これも失敗し、ログ メッセージ ("Checking class…") には、最終的に生成される例外クラスが出力されません。
また、プロセスの後半で実行されるコードが役立つことを期待して、このコードをメソッドからプラグインrun()
のメソッドに移動しようとしました。postProcessModel()
これも失敗しました。
コードは期待どおりに実行されるので、プラグインの構成は正しいと確信しています。また、同じ方法で他のクラスをキャプチャして変更しました。実行時にモデルに例外がないように見えます。ただし、例外クラスは毎回正しく生成されます。
実行時に XJC プラグインからこれらのクラスをキャプチャする方法はありますか?
ご協力いただきありがとうございます。