問題タブ [sun-codemodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
388 参照

java - JAXB、XJC: クラス アウトラインへのフィールドの生成

私の質問は、JAXB プラグイン、特にClassOutline内部の記述に関するものです。

フィールドcom.sun.tools.xjc.outline.ClassOutlineがあります:

  • 目標
  • 参照
  • 実装クラス
  • implRef

コード:

私の知る限り(SO Answer):

  • target- に情報を保持しますModel。これは、解析および分析されたスキーマ ファイル (.xsd) を表します。
  • refは通常 に等しくimplClass、両方が成立しますCode Model
  • implClass新しく生成されたフィールド、メソッドなどを配置するのに適した場所です。
  • implRef- それは何ですか?

で記述されたクラスに新しいフィールドを追加したいClassOutlineので、コードは次のようになります。

上記のコードが実行され、com.sun.tools.xjc.outline.ClassOutline.getDeclaredFields()メソッドを使用した後に機能する別のプラグインがあるまで、それはうまく機能します。

想像してみてください-Plugin1新しいフィールドを作成し、次にCopyablePluginclone()が実行され、すべてのフィールドをコピーするメソッドを追加したいと考えています。ただし、次のようなusesメソッドからすべてのフィールドを取得するため、-CopyablePluginによって新しく生成されたフィールドは表示されません。Plugin1ClassOutlineCopyablePlugincom.sun.tools.xjc.outline.ClassOutline.getDeclaredFields()

これは、フィールド (これは- 解析された XSD スキーマです)getDeclaredFields()からプロパティを取得し、 に生成されたコードを完全に無視することに注意してください。ClassOutline.targetModelClassOutline.implClass

それはバグですか、それとも機能ですか?

今のところ、回避策を見つけました。同じフィールドがプロパティとして にも追加されますtarget:


質問

  1. の役割を教えてくださいref/implClass/implRef
  2. 完全に新しいフィールド/メソッドをどこで生成する必要がありますか? ref/implClassに?
  3. との間で一貫性を保つ必要がref/implClassありtargetますか? に追加された新しいフィールドimplClassは にも追加されるべきtargetですよね?
  4. 正しいcom.sun.tools.xjc.outline.ClassOutline.getDeclaredFields()ですか?または、ClassOutline からすべてのフィールドを適切に取得するにはどうすればよいですか? たぶん、これはtargetimplClassコンテンツの結合である必要がありますか?