含まれているクラスのjavax.validation制約のテーブルを出力するカスタムJavadocドックレットを作成しています。基本的には機能しますが、Docletフレームワークはかなり制限があり柔軟性がないことがわかりました。
背景として、クラス内のプロパティに複数の検証制約がある可能性が非常に高いです。最初にタグレットを作成したとき、プロパティ名が同じであっても、制約ごとにテーブルに個別の行をレンダリングしました。
誰かが、同じ行の単一のプロパティのすべての制約をコンマで区切ってレンダリングするオプションが必要だとコメントしました。私は個人的にそれを望んでいるとは思っていませんでしたが、それを求めるのは合理的なことなので、それを制限する理由はありませんでした.
それで、タグレットで構成オプションを許可するのはどれほど難しいでしょうか? 私が見つけているように、かなり難しい。
まず、構成オプションをとるタグレットを定義できると思いました。それから私はそれをする方法がないことを発見しました。
さて、それで私は少しトリックを使うと思いました。
これが私のタグレットクラスからのコードのブロックです:
public static void register(Map<String, Taglet> tagletMap) {
ValidationConstraintsTaglet taglet = new ValidationConstraintsTaglet();
registerInstance(tagletMap, taglet, taglet.getName());
//ValidationConstraintsTaglet tagletCombined = new ValidationConstraintsTaglet().combineConstraints(true);
//registerInstance(tagletMap, tagletCombined, taglet.getName() + "Combined");
}
private static void registerInstance(Map<String, Taglet> tagletMap, Taglet taglet, String name) {
if (tagletMap.get(name) != null) {
tagletMap.remove(name);
}
tagletMap.put(name, taglet);
}
このようなコードでは、制約ごとに1行をレンダリングして、完全に正常に機能します。
コメントアウトされた2行でコメントを返した場合、これは、タグレットの2番目のインスタンスを別の名前で登録し、名前の末尾に「Combined」を追加しようとする試みです。「toString(Tag)」メソッドでは、その「isCombinedConstraints」オプションをチェックして、単一のプロパティのすべての制約を1行にレンダリングします。「combinedConstraints」がデフォルトで設定されている場合、この機能が機能することを確認しました。
したがって、これらの 2 行にコメントを付けてこれを実行すると、複雑なエラーが発生します。
javadoc: error - com.sun.tools.doclets.internal.toolkit.util.DocletAbortException: java.lang.ClassCastException: com.att.det.taglet.ValidationConstraintsTaglet cannot be cast to com.sun.tools.doclets.internal.toolkit.taglets.Taglet
それが私が得るすべての情報です。これがどこで起こっているのかを教えてくれるスタックトレースもありません。
私が最初にこれを見たとき、私はこれを引き起こすであろう何かを同時に変更したに違いないと思いました。次に、2 つの新しい行をコメントアウトして再テストすると、エラーはなくなりました。
私はこのアプローチを断念しました。それを機能させることができず、ここで応答が得られなかったためです。
私がしなければならないのは、独自の「register」メソッドと異なるタグ名を使用して、サブクラスに構成変更を実装することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加