2

既存のアプリケーションのJavaJDKバージョンをJava5からJava6(アップデート38)に変更しようとしています。アプリケーションは、いくつかのJAXB生成クラスを使用して、リモートサーバーから送受信するXMLをマーシャリング/アンマーシャリングします。XMLはスキーマ(.xsd)ファイルに準拠しています。

これはすべて、クラスパスにダウンロードされたJAXBバイナリのバンドルを使用してJava5で正常に機能していました。ダウンロードしたJAXBバイナリのバージョンがわかりません(このプロジェクトはすでに私の前にありました)。JDKのバージョンをJava5からJava6(アップデート38)に変更しただけでは、次のような、これまでに発生したことのない単体テストの失敗がいくつか発生します。

[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '2012-08-22T00:00:00-04:00' is not a valid value for 'date'.]

Java 6 JDKをクラスパスの先頭に移動することでこれを解決できるかもしれないと思ったので、外部JAXBバイナリの前にあります。これにより、次のようなコンパイル時エラーが発生しました。

The attribute required is undefined for the annotation type XmlElementRef

このエラーは、JAXBで生成されたクラスの1つ(.xsdファイルに基づく)で報告されました。エラーの原因は次の注釈行です。

@XmlElementRef(name = "DealCalendarId", type = JAXBElement.class, required = false)

だから、次に何をする必要があるのか​​わかりません。私はいくつかのアイデアを持っています:

  • ダウンロードしたJAXBバイナリを削除し、Java 6 SEに組み込まれているJAXBサポートのみに依存します(ただし、これがプロジェクトで機能していなかったことを覚えているようです...)
  • ダウンロードしたJAXBバイナリを新しいバージョンに置き換えます
  • ダウンロードしたJAXBバイナリを新しいバージョンに置き換え、クラスパスでそれらの後にJava6JDKを配置します
  • 上記のいずれかを実行し、.xsdに基づくすべてのJAXBクラスを再生成します

助言がありますか?

4

1 に答える 1

3

問題#1

[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '2012-08-22T00:00:00-04:00' は 'date' の有効な値ではありません]

このメッセージだけ2012-08-22T00:00:00-04:00では、XML スキーマdateタイプの有効な値ではありません。有効な値は2012-08-22、時間情報なしです。提示した値はdateTimeタイプに対応します。使用していた他のバージョンがこの検証を実行していない可能性があります。

問題#2

注釈型 XmlElementRef に必要な属性が定義されていません

Java SE 6 には JAXB 2.1 が含まれています。@XmlElementRef注釈にrequiredプロパティが含まれる Java SE 5 で JAXB 2.2 を使用していたに違いありません。

于 2013-01-08T21:42:17.663 に答える