JAXBロケーター - 依存関係がありませんか?
質問
私の現在のプロジェクトでは、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.generated
と abc.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;