問題タブ [jaxb-episode]
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.
maven-2 - Maven での同じプロジェクトの maven-jaxb2-plugin エピソードはありますか?
私はbasic.xsd
と 2 つの他のA.xsd
とを持っていB.xsd
ます。A.xsd
2 つの異なる Java パッケージにB.xsd
変換されるため、同じプラグインの 2 つの Maven 実行が必要です。
両方の XSD はbasic.xsd
、一部の共有クラスを参照します。別のプロジェクトから来る場合は、クラスの重複を防ぐためにbasic.xsd
使用することで、この問題をうまく解決できます。episodes
しかし、どうすれば現在のプロジェクトを参照できますか?
プラグインの最初の実行は、クラスのみをbasic.xsd
独自の Java 名前空間に生成することです。その後、 と の実行はから生成されたものについて知る必要がA.xsd
あります。B.xsd
basic.xsd
の生成されたエピソードをどうにか指摘できますbasic.xsd
か?
みたいな
<episodes><episodeFile>basicXSD.episode</episodeFile</episodes>
いいでしょうが、私が見る限り、依存関係を追加することしかできません... :-(
maven - XJCにインポートされたスキーマからの型定義の解決に失敗する
JAXBを使用するこのAPIを使用して、XJC(XML-to-Java)コンパイラーによってXMLスキーマから名前付き参照を介して生成されたオブジェクトモデルを便利に使用できます。これは、JAXBコンテキストの作成を抽象化し、あらゆる種類のバックグラウンドマジックとリフレクションによってObjectFactoryメソッドを見つけ出します。その基本的な要点は、常に1つの一般的なスキーマを定義し、次にその一般的なスキーマを「拡張」する任意の数(0の場合もある)のスキーマを定義し、それぞれが独自のデータモデルを作成することです。一般的なスキーマには再利用可能な定義があり、それを拡張するスキーマはそれらを使用して独自のモデルを構成します。
現在、複数のプロジェクトで一般的なスキーマを再利用したいという状況に遭遇しました。一般的な型の定義はプロジェクト間で同じである必要があり、一部のコードはそれらから生成された抽象クラスに対して構築されます。したがって、最初にいくつかの汎用スキーマのクラスを生成し、次にそれらを拡張して個別に使用するクラスを生成する必要があります。ビルドプロセスにMavenを使用しています。
私が直面している問題は、拡張スキーマ内のそのジェネリックスキーマから型定義を解決することです。
私の汎用スキーマの名前が「general.xsd」で、次のようになっているとします。
その隣に、名前のカスタマイズを行い、出力のパッケージ名を設定するためのバインディングファイルがあります。
次に、そのプロジェクトのPOMに次のビットを入れて、Javaクラスを生成します。
ご覧のとおり、私はJAXB2.1Mavenプラグインを使用しています。段階的なコンパイルのためにエピソードファイルを生成するオプションを設定しました。以前の出力を削除するオプションは、バグの回避策でした。最初にすべてがクリーンアップされていることを確認して、再コンパイルを強制するだけです。
ここまでは順調ですね。そのプロジェクトは問題なくコンパイルされます。生成されたJavaクラスとは別に、スキーマを結果のjarファイルにパッケージ化することにも注意してください。したがって、それらはクラスパスで利用できます。ファイルは、sun-jaxb.episode
本来あるべきMETA-INFにあります。
次に、最初にインポートすることにより、上記を拡張するスキーマを使用するプロジェクトを開始します。「サブタイプ」の1つは次のようになります(これをsub.xsdと呼びます)。
ここでも、バインディングファイルがあります。
そして、XJC生成を処理するこのプロジェクトのPOMからのビットは次のとおりです。
元々、すべてのスキーマは1つのフォルダーにありschemaLocation
、インポートの属性をに設定してgeneral.xsd
いましたが、これは正常に機能しました。しかし、物事がプロジェクト間で分離された今、私は問題にぶつかります。最初の問題は、他のスキーマが見つからなかったことです。これを解決schemaLocation
するには、<xs:import />
要素から属性を削除し、属性のみを保持し、上記のPOM抽出で参照されてnamespace
いるカタログファイル()を追加します。catalog.cat
その内容は次のとおりです。
スキーマが見つからないことを示すエラーが発生しなくなったため、これは機能しているようです。しかし、何らかの理由で、インポートされたスキーマからの実際の型定義の解決は引き続き失敗します。例外は次のとおりです。
これが私がこれまでに試したことです:
- カタログファイルを使用します。インポートされたスキーマが見つかるようになったため、部分的に成功しました。
- 一般スキーマのコンパイルでエピソードファイルを生成し、これをサブスキーマのコンパイルに使用します。違いはないようですが、これはタイプが解決された後にのみ役割を果たすはずなので、これはまだ重要ではないと思います。
- 別のJAXP(注:JAXB、JAXPではない)実装を使用してください。例外のスタックトレースでそれを確認できたので、別のものを使用しましたが、最終結果は同じです。
maven-jaxb22-plugin
21の代わりに使用してください。違いはありません。
オンラインで見てみると、少なくとも2006年以来、人々はこの問題に遭遇しているようであり、Xercesリゾルバーの問題に関連している可能性があります。これが、誰も気にせずに6年間潜んでいるバグではないことを願っています。他の誰かがいくつかの提案がありますか?たぶん誰かが同じ問題に遭遇し、解決策を見つけましたか?私が考えることができる唯一の回避策は、「svn:externals」を使用して一般的なスキーマをサブプロジェクトにドラッグし、そこでクラスを再生成することですが、それはダーティであり、svnリポジトリに接続できる場合にのみ機能します。
この長い投稿を読んでくれてありがとう。上記のすべてを既存のプロジェクトから取り除いて、匿名性のためにいくつかの名前空間やその他のものを置き換えたことを覚えておいてください。そのため、いくつかのタイプミスが発生する可能性があります。
java - JAXBミキシングエピソードとjarライブラリのxjc:javaType
他のプロジェクトが依存するJavaライブラリを取得した場合(Mavenを介した.jar依存関係)。このライブラリには、そのライブラリ内の既存のJavaクラスおよびアダプタクラスに単純型をマッピングする要素xs:simpleType
で注釈が付けられたいくつかのsを定義するXSDファイルがあります。xjc:javaType
これはすべて正常に機能しますが、今はを作成したいと思いましたxs:complexType
。org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
バージョン0.8.2で、複合型と追加の.episodeファイルからいくつかのJavaBeanを作成します。
2番目のプロジェクトでは、ライブラリをインポートし、xsdファイルをスキーマディレクトリに解凍し、project2.xsdにlibrary.xsdをインポートさせます。これは、単純型と複雑型を使用しているためです。既存のBeanの二重生成を回避するために、のepisodes
タグに依存関係としてライブラリを追加しましたorg.jvnet.jaxb2.maven2:maven-jaxb2-plugin
。しかし、プラグインはxsdファイルを解析できないと文句を言い、すべての型定義行で例外をスローします。
エピソード(simpleTypesは含まれていませんか?)とxjc:javaType
アノテーションの使用に問題があると思いますか?この問題に対する何らかの回避策はありますか?私はこの問題に関してウェブ上で多くを見つけることができません。ヒントに感謝します。
jaxb - annox のカスタマイズを含む JAXB の個別のエピソードが失敗する: SAXParseException2
私は2つのmavenモジュールを持っています。
- 最初のものには、基本 POJO クラスを生成するための xsd スキーマのみが含まれています。
- 2 番目には、カタログ ファイルを使用して最初のスキーマをインポートし、新しい POJO クラスを生成する xsd スキーマが含まれています。両世代作品。
ここで、annox (Swagger 注釈) を使用して両方の xsd ファイルに注釈を追加します。最初のモジュールのコンパイルは成功しましたが、2 番目のモジュールのコンパイルは例外で失敗します:
最初のモジュール
「Commons.xsd」:
/li>「pom.xml」:
/li>
2 番目のモジュール
「拡張子.xsd」:
/li>「pom.xml」:
/li>「カタログ.xml」!
/li>
このエラーを解決しようとして何日も経ちましたが、成功しませんでした。
java - インクルードを使用した JAXB エピソードのコンパイルが機能しない
私は2つのスキーマA、Bを持っています.BでいくつかのA要素を再利用しています.
名前空間は使用しません。
私は使用しています
スキーマ B にスキーマ A を含めることを次のように定義しました。
とカタログとして
jaxb 構成は次のようになります。
問題は、エピソードの依存関係を指定するたびに、クラスを生成したい B 要素が含まれているにもかかわらず、スキーマがクラスを生成しないことです。
エピソードを削除すると、うまく機能し、スキーマ A のクラスも生成されます。これは実際に避けたいと思います。
何か提案はありますか?
サンプルはJaxb エピソード編集で公開されました
maven-jaxb2-plugin - maven-jaxb22-plugin のエピソードファイル
A.xsd
インポートするスキーマB.xsd
と、その複雑な要素の 1 つがあります<complex-element>
。.episode
これで、 をコンパイルしてファイルを作成し、へのB.xsd
入力として使用しましたA.xsd
。ただし、 を除いて、<complex-element>
他のすべての子要素クラスは再び再生成されます。
A.xsd
B.xsd
pom.xml
実行後、クラスComplexElement
は既存のパッケージを正しく参照しますが、すべての子要素がパッケージ内の既存のクラスを参照する代わりに、パッケージの下にクラス<list>
を生成します。<code>
org.example.com.a
org.example.com.b
bエピソード