1

私の現在のプロジェクトでは、XSDファイルからJAXBBeanを生成します。Beanの行番号情報(XSD検証エラー以外!)が必要なので、ここで指定した-Xlocatorオプションを使用しました。

http://java.sun.com/webservices/docs/1.6/jaxb/xjc.html

ただし、Locatorクラスがありません。その6年前のページで参照されているjarファイルは、どのサイトにもJWSDPのダウンロードがまったく表示されていないため、どこにも見つかりません。

XJCは死んでいますか?他のものを使用する必要がありますか?

編集:ソリューションはJava1.5を使用する必要があります

4

4 に答える 4

3

XJC は死んだわけではありませんが、参照しているページは古く、JAXB 1 に適用されます。Java6 には JAXB 2.1 が含まれています (こちらのドキュメントを参照してください)。今日、Google 検索を行ったときに返されるヒットのほとんどが、廃止された JAXB 1 参照に対するものであることは厄介です。

あなたの要件が何であるかわかりません。「Bean の行番号情報が必要です」とはどういう意味ですか?

編集:@XmlLocation注釈について言及しました。これは、Java6 と、Java5 で使用する JAXB 参照実装の両方の非標準アノテーションです。クラス名はcom.sun.xml.bind.annotation.XmlLocationで、javadoc はここにあります。まだ持っていない場合は、ここから取得できる参照実装。

于 2010-05-26T07:18:09.643 に答える
1

ありがとうございました。jaxb-api.jar は Java 6 API に既に含まれているため、jaxb-impl.jarをダウンロードしました。Wouterが述べたように、間違ったインポートを置き換えるために誰かがLinuxスクリプトを必要とする場合に備えて。

プロジェクト パスに移動し、 と を調整com.abc.generatedabc.xsdます。

#!/bin/sh
xjc -d src/ -p com.abc.generated -Xlocator abc.xsd

FILES=$(find src/ -type f -name *.java)
for f in $FILES
do
    sed -i 's/\(.*import com.sun.xml.internal.bind.Locatable;.*\)/import com.sun.xml.bind.Locatable;/g' $f
    sed -i 's/\(.*import com.sun.xml.internal.bind.annotation.XmlLocation;.*\)/import com.sun.xml.bind.annotation.XmlLocation;/g' $f
done
于 2013-04-16T16:14:08.643 に答える
0

問題、または少なくともその一部を見つけました。XJC は、XmlLocation および Locatable の「内部」パッケージ バージョンへのインポートを生成します。理由は聞かないで!

これらのインポートを正しいものに置き換えるための小さなスクリプトを書きましたが、今では問題なく動作しているようです。

于 2010-05-28T10:20:12.687 に答える
0

Maven-User の場合、依存関係を追加します

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.7</version>
</dependency>

そしてインポートを置き換えます

import com.sun.xml.internal.bind.Locatable;
import com.sun.xml.internal.bind.annotation.XmlLocation;

import com.sun.xml.bind.Locatable;
import com.sun.xml.bind.annotation.XmlLocation;
于 2014-08-13T13:20:03.567 に答える