質問

私の現在のプロジェクトでは、XSDファイルからJaxB Beansを生成します。豆に関するライン番号情報が必要です(XSD検証エラーを超えて!)。ここで指定されている-Xlocatorオプションを使用しました。

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

ただし、ロケータークラスが欠けています。その6歳のページで参照されているJARファイルは、どこにも見つけることができません。

XJCは死んでいますか?私は何か他のものを使うべきですか?

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

役に立ちましたか?

解決 3

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

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

他のヒント

XJCは死からほど遠いですが、参照しているページは古代であり、JaxB 1に適用されます。 ここ)。今日Google検索を行うとき、あなたが戻ってきたヒットのほとんどが時代遅れのJAXB 1の参照のためのものであることは迷惑です。

あなたが要件が何であるかはわかりません。 「豆に関するライン番号情報が必要だ」とはどういう意味ですか?

編集:あなたはそれに言及しました @XmlLocation 注釈。これは、Java6とJaxBリファレンス実装の両方で非標準の注釈であり、Java5で使用します。クラス名はです com.sun.xml.bind.annotation.XmlLocation, 、そしてJavadocはです ここ. 。あなたが得ることができる参照実装 ここ, 、あなたがまだそれを持っていないなら。

ありがとうございました。ダウンロードしました Jaxb-impl.jar jaxb-api.jarはすでにJava 6 APIに含まれているためです。 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

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top