問題タブ [xjc]
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.
java - XSD で基本型の @XmlRootElement クラスを生成する方法は?
XJC を使用して XSD から適切な JAXB アノテーションを使用して Java クラスを生成する際に問題が発生しています。
XML スキーマを定義する比較的単純な XSD ファイルがあります。<xs:extension>
XSD 内の複合型は、タグを使用して継承を利用します。私が抱えている問題は、@XmlRootElement
.
@XmlRootElement
残念ながら、XJC がクラスを生成する方法は、 (基本クラスではなく)派生クラスのみが取得されることを意味します。XJC で直面した他の多くの問題を確実に解決するために、単純なグローバル バインディング ディレクティブを使用しています。
XSD のスニペットの例を次に示します。
上記のスニペットからわかるように、EmailArtifact
extends Artifact
.
の Java クラス コードにEmailArtifact
は、次のものが含まれます。
の Java クラス コードにArtifact
は、次のものが含まれます。
にEmailArtifact
は が含まれています@XmlRootElement
が、基本型にArtifact
は が含まれていません@XmlRootElement
。
@XmlRootElement
基本型を含むすべてのクラスに対してXJC を強制的に生成するにはどうすればよいですか。
java - デフォルトのsaxパーサーを使用すると、巧妙に細工されたxmlによってjaxb unmarshalが悪用されますか?
したがって、現在のプロジェクトでは、JAXB RI を Sun の JRE (Xerces だと思います) のデフォルトの Java パーサーで使用して、任意の XML を非整列化します。
まず、XJC を使用して次の形式の XSD をコンパイルします。
「良いケース」では、すべてが設計どおりに機能します。つまり、このスキーマに準拠する XML が渡された場合、JAXB はそれをオブジェクト ツリーに正しく非整列化します。
問題は、外部DTD参照を含むXMLを渡されたときに発生します。
このようなものをアンマーシャリングすると、SAX パーサーはリモート エンティティ (" http://somehost/foobar.dtd ") をロードしようとしますが、このスニペットは以前に XJC でコンパイルしたスキーマに明らかに準拠していません。
この動作を回避するには、適合する XML (コンパイルした XSD によると) がリモート エンティティの読み込みを必要としないことを知っているため、すべてのリモート エンティティの読み込みを回避するカスタム EntityResolver を定義する必要があります。したがって、次のようなことをする代わりに:
私はこれを行うことを余儀なくされています:
だから私の究極の質問は:
JAXB でアンマーシャリングする場合、問題の XML がそれらのリモート エンティティをロードせずに無効であると認識できる場合、基礎となる SAX パーサーによるリモート エンティティのロードを自動的に短絡する必要がありますか?
また、これはセキュリティ上の問題のように思えませんか? JAX-WS が内部で JAXB に依存していることを考えると、特別に細工された XML を任意の JAX-WS ベースの Web サービスに渡し、WS ホストに任意の URL をロードさせることができるようです。
私はこれに比較的初心者なので、おそらく何かが欠けている可能性があります。もしそうなら教えてください!
java - xjcの外部バインディングファイルを作成するにはどうすればよいですか?
JAXBxjcのドキュメントには次のように書かれています。
-b処理する1つ以上の外部バインディングファイルを指定します。(各バインディングファイルには、独自の「-b」スイッチが必要です。)外部バインディングファイルの構文は非常に柔軟です。複数のスキーマのカスタマイズを含む単一のバインディングファイルがある場合もあれば、カスタマイズを複数のバインディングファイルに分割する場合もあります。
さらに、コマンドラインでのスキーマファイルとバインディングファイルの順序は重要ではありません。
しかし、この「外部バインディングファイル」のドキュメントはどこにありますか?
ant - jaxb と Ant xjc タスクを使用して複数の xsd スキーマを処理するにはどうすればよいですか?
次のように、jaxb を使用して、Ant スクリプト内の xml スキーマから Java オブジェクト クラスを生成しています。
現在、これは 1 つのスキーマ (この例では ff.xsd) に対して見事に機能します。複数のスキーマ (つまり、複数の xsd ファイル) を処理するにはどうすればよいですか?
スキーマごとに個別の Ant タスクを用意しようとしましたが、どういうわけか、Ant が最初のタスクを処理し、次のスキーマの「ファイルは最新です」と言うので、これは機能しません!
java - JAXB XJC コード生成 - Marshaller によって生成された xml に「schemaLocation」がありません
XJC ツールを使用して、XSD スキーマの Java クラスを生成します。JAXB Marshaller を使用してクラスを XML ペイロードにマーシャリングすると、出力 XML に「schemaLocation」パラメーターがありませんが、このパラメーターを xsd ファイルで宣言します。出力XMLで「schemaLocation」パラメータを強制する方法は?
以下は、コード生成に使用される xsd スキーマ ファイルの冒頭です。
よろしく
java - xjc とカスタマイズされたバインディングを使用して XMLElementWrapper アノテーションを生成する方法
私は JAXB と xjc を使用して、XML スキーマを Java クラスにコンパイルしています。この生成されたクラスを手動で編集したくありません。私はそのようなxmlスキーマを持っています:
xjc はItems
、オブジェクトのリストのみを含むクラスを生成しItem
ます。クラスを省略しItems
て、オブジェクトのリストをクラスItem
に直接持つ可能性はありますRoot
か?
これは注釈で実行できることは知ってい@XMLElementWrapper
ますが、xjc に注釈を作成するように指示する方法がわかりません。
ご提案ありがとうございます。
よろしく、 マーカス
java - JAXBコンパイル用に含まれているXSDの名前の競合を解決します
現在、JAXB(IBMビルド2.1.3)を使用して1組のスキーマファイルを同じパッケージにコンパイルしようとしています。それぞれが独自にコンパイルされますが、それらを一緒にコンパイルしようとすると、インクルードが原因で要素の名前が競合します。私の質問は; 名前の衝突に対する解決策を外部バインディングで指定する方法はありますか。
サンプルファイルは次のとおりです。この例では、問題のある要素は「共通」と呼ばれ、incAとincBの両方で定義されています。
incA.xsd
incB.xsd
A.xsd
B.xsd
両方がxjbの1つの呼び出しからコンパイルされる場合のコンパイラエラー:
(参考までに、これはOAGIS8 SP3パッケージのコンパイルに関する問題を解決するための一般化です)
java - XJC を使用した XML スキーマから Java クラスへの変換
私は xjc を使用して XML スキーマから Java クラスを生成しています。以下は XSD の抜粋です。
ほとんどの場合、生成されたクラスは問題ありませんが、上記のブロックでは次のようになります。
その上に次のコメントを付けます。
問題の 2 行の最後にコメントを入れました。
現時点では、スキーマを変更するのは簡単ではないと思います。これはベンダー間で決定されたものであり、進行がかなり遅くなるため、(可能であれば) このルートには行きたくありません。
検索したところ、このページを見つけました。外部カスタマイズは私がやりたいことですか? 私は主に生成されたクラスを扱ってきたので、これらのクラスを生成するプロセスに完全に精通しているわけではありません。「プロパティのカスタマイズ」の簡単な例は素晴らしいでしょう! Java クラスを生成する別の方法は、スキーマを使用できる限り問題ありません。
UnstructuredName
編集:2つが実際に同じ要素であることを明確にする必要があります。
java - JAXBロケーター-依存関係がありませんか?
私の現在のプロジェクトでは、XSDファイルからJAXBBeanを生成します。Beanの行番号情報(XSD検証エラー以外!)が必要なので、ここで指定した-Xlocatorオプションを使用しました。
http://java.sun.com/webservices/docs/1.6/jaxb/xjc.html
ただし、Locatorクラスがありません。その6年前のページで参照されているjarファイルは、どのサイトにもJWSDPのダウンロードがまったく表示されていないため、どこにも見つかりません。
XJCは死んでいますか?他のものを使用する必要がありますか?
編集:ソリューションはJava1.5を使用する必要があります