Oracle Java 7 Update 3を使用してUbuntuでテストを実行しています。リリースノートによると、JAXB-2.2.4が含まれています。
/home/ubuntu# update-alternatives --config java
There is only one alternative in link group java: /usr/lib/jvm/java-7-oracle/bin/java
Nothing to configure.
マシンは、JAXB-2.2.4 があると言っています。
$ wsimport -version
JAX-WS RI 2.2.4-b01
$ java -バージョン
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode)
ただし、JAX-RS を使用し、いくつかのオブジェクトを JAXB でマーシャリングするアプリを実行すると、次のエラーが発生します。
Apr 05, 2012 10:45:50 AM com.sun.jersey.api.json.JSONConfiguration natural
SEVERE: NATURAL JSON notation configured, but JAXB RI 2.1.10 not found. For the
recent builds to get this working correctly, you need even at least JAXB version
2.1.12. Please add it to your classpath!
Apr 05, 2012 10:45:50 AM com.sun.jersey.core.spi.component.ProviderFactory __get
ComponentProvider
SEVERE: The provider class, class com.marketchorus.rest.config.JAXBContextResolv
er, could not be instantiated. Processing will continue but the class will not b
e utilized
java.lang.RuntimeException: NATURAL JSON notation configured, but JAXB RI 2.1.10
not found. For the recent builds to get this working correctly, you need even a
t least JAXB version 2.1.12. Please add it to your classpath!
サーバー側では、最初に同じエラーが発生したため、metro-2.2-standalone を tomcat にインストールして問題を修正しました。(Java 7で実行されていましたが)。
Windows クライアントでは、JAXB-2.2.5 api、impl、および jsr173 jar を承認済みの Java ディレクトリに追加して、動作させる必要がありました (Java 7 update 3 も同様です)。
ubuntu で jaxb トリックを実行しようとすると、ファイルを /usr/lib/jvm/java-7-oracle/jre/lib/endorsed の下に配置すると、別のエラーが発生します。
ERROR 10:55:44.694 taskScheduler-1 org.springframework.scheduling.support.TaskUt
ils$LoggingErrorHandler - Unexpected error occurred in scheduled task.
javax.xml.stream.FactoryConfigurationError: Provider com.bea.xml.stream.MXParser
Factory not found
次のように、クラスで JAX-RS/JAXB コードを初期化しています。
config = new DefaultClientConfig();
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
config.getClasses().add(JAXBContextResolver.class);
client = Client.create(config);
service = client.resource(UriBuilder.fromUri(proc.getUrl()).build());
まだ1.6に設定されていたので、ソース= 1.7とターゲット= 1.7でコンパイルしようとしましたが、1.6の初期リリースの古いバージョンを想定していたので、古すぎると思っていましたが、それでも問題は解決しませんでした。
@andih のテスト プログラムを実行しましたが、まだエラーが発生します。VMの問題だと思い始めています:
ubuntu@ip-10-202-155-29:~/test$ java -cp jersey-client-1.12.jar:jersey-core-1.1
2.jar:jersery-fastinfoset-1.12.jar:jersey-json-1.12.jar:. TestNaturalJson
Apr 23, 2012 10:17:21 AM com.sun.jersey.api.json.JSONConfiguration natural
SEVERE: NATURAL JSON notation configured, but JAXB RI 2.1.10 not found. For the
recent builds to get this working correctly, you need even at least JAXB version
2.1.12. Please add it to your classpath!
Exception in thread "main" java.lang.RuntimeException: NATURAL JSON notation con
figured, but JAXB RI 2.1.10 not found. For the recent builds to get this working
correctly, you need even at least JAXB version 2.1.12. Please add it to your cl
asspath!
at com.sun.jersey.api.json.JSONConfiguration.natural(JSONConfiguration.j
ava:447)
at TestNaturalJson.main(TestNaturalJson.java:6)
ubuntu@ip-10-202-155-29:~/test$ java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode)
JAXB-2.2.5 RI で承認されたソリューションを振り返ると、次のファイルをインストールしました。
jaxb-api.jar
jaxb-impl.jar
jsr173_1.0_api.jar
に:
/usr/lib/jvm/java-7-oracle/jre/lib/endorsed
ディレクトリ。これを行うと、Spring から上記のエラー MXParser エラーが発生します。ここで奇妙なのは、Windowsではこれが機能しますが、Ubuntuでは機能しません。以下の@andhiのテストプログラムを承認済みのセットアップで実行すると、エラーではなくOKになります。しかし、何らかの理由で、Ubuntu の Spring は、承認されたディレクトリ (STAX 実装) にインストールされている JSR173 jar ファイルを取得していないようです。