既存のアプリケーションの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クラスを再生成します
助言がありますか?