特定の JAXB 実装を指定するにはどうすればいいですか? 質問する

特定の JAXB 実装を指定するにはどうすればいいですか? 質問する

過去に一度これを実行したことがあるようですが、これを機能させるために何をしたかに関する参考資料が見つかりません。

Web サーバー/JRE によって提供されるものとは異なる JAXB 実装を指定したい Web アプリケーションがあります。適切なアーティファクトを Maven からダウンロードし、jar が WAR に適切にパッケージ化されていることを確認しましたが、Web アプリケーションを起動すると、バンドルされた JRE 実装がまだ使用されていることがわかります。

構成できるプロパティ ファイルについて漠然と何かを覚えていますが、構成方法に関する参照が見つかりません。さらに、使用したい実装が同じもの (単に新しいバージョン) である場合、クラス名は JRE にパッケージ化されている場合と同じになります。WAR にバンドルされているものを使用することを指定するにはどうすればよいですか?

編集

現在、JBoss 7.0.2、Oracle JDK 1.6_0_27、JRE に付属する JAXB RI (v2.1 だと思います) を実行しています。JAXB RI 2.2.5 (MvnRepository にあります) にアップグレードしようとしています。

今朝、もう少し調べてみたところ、ログに奇妙なエラー メッセージがあることに気付きました。

09:43:18,325 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-12) Class Path entry jaxb-api.jar in "/C:/servers/jboss-as-7.0.2.Final/standalone/deployments/LendingSimulationServiceEAR.ear/LendingSimulationService.war/WEB-INF/lib/jaxb-impl-2.2.5.jar"  does not point to a valid jar for a Class-Path reference.
09:43:18,325 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-12) Class Path entry activation.jar in "/C:/servers/jboss-as-7.0.2.Final/standalone/deployments/LendingSimulationServiceEAR.ear/LendingSimulationService.war/WEB-INF/lib/jaxb-impl-2.2.5.jar"  does not point to a valid jar for a Class-Path reference.
09:43:18,326 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-12) Class Path entry jsr173_1.0_api.jar in "/C:/servers/jboss-as-7.0.2.Final/standalone/deployments/LendingSimulationServiceEAR.ear/LendingSimulationService.war/WEB-INF/lib/jaxb-impl-2.2.5.jar"  does not point to a valid jar for a Class-Path reference.
09:43:18,326 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-12) Class Path entry jaxb1-impl.jar in "/C:/servers/jboss-as-7.0.2.Final/standalone/deployments/LendingSimulationServiceEAR.ear/LendingSimulationService.war/WEB-INF/lib/jaxb-impl-2.2.5.jar"  does not point to a valid jar for a Class-Path reference.

これはとても奇妙だと思いました。その情報がどこで見つかるかはわかりませんでした。もう少し調べてみると、MANIFEST.MF に次の行が見つかりました。

Class-Path: jaxb-api.jar activation.jar jsr173_1.0_api.jar jaxb1-impl.jar

それで、私は今まで以上に混乱しています。jaxbの実装は、api、アクティベーション、jsr、jaxb1の実装jarに依存しているようです。しかし、それらはjaxb pomには記載されていません。オンラインで少し調べてみると、このリンクこれは、Java6SE 環境で JAXB 2.2 を使用する方法について説明しています。残念ながら、これもうまくいかないようで、上記の WARN メッセージが引き続き表示されます。

実行中の JAXB 実装をリストするために次のスニペットを使用していますが、これは間違っているでしょうか?

/**
 * Print the JAXB Implementation information
 */
public static void outputJaxpImplementationInfo() {
    logger.debug(getImplementationInfo("DocumentBuilderFactory", DocumentBuilderFactory.newInstance().getClass()));
    logger.debug(getImplementationInfo("XPathFactory", XPathFactory.newInstance().getClass()));
    logger.debug(getImplementationInfo("TransformerFactory", TransformerFactory.newInstance().getClass()));
    logger.debug(getImplementationInfo("SAXParserFactory", SAXParserFactory.newInstance().getClass()));
}

/**
 * Get the JAXB implementation information for a particular class
 * @param componentName
 * @param componentClass
 * @return
 */
private static String getImplementationInfo(String componentName, Class componentClass) {
    CodeSource source = componentClass.getProtectionDomain().getCodeSource();
    return MessageFormat.format(
            "{0} implementation: {1} loaded from: {2}",
            componentName,
            componentClass.getName(),
            source == null ? "Java Runtime" : source.getLocation());
}

このスニペットは次のログを生成します。

10:28:27,402 INFO  [stdout] (MSC service thread 1-14) 2012-04-04 10:28:27,402 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil  - DocumentBuilderFactory implementation: __redirected.__DocumentBuilderFactory loaded from: file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar
10:28:27,403 INFO  [stdout] (MSC service thread 1-14) 2012-04-04 10:28:27,403 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil  - XPathFactory implementation: __redirected.__XPathFactory loaded from: file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar
10:28:27,404 INFO  [stdout] (MSC service thread 1-14) 2012-04-04 10:28:27,404 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil  - TransformerFactory implementation: __redirected.__TransformerFactory loaded from: file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar
10:28:27,406 INFO  [stdout] (MSC service thread 1-14) 2012-04-04 10:28:27,406 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil  - SAXParserFactory implementation: __redirected.__SAXParserFactory loaded from: file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar

ベストアンサー1

エクリプスリンク MOXy

注記:私はEclipseLink JAXB (MOXy)のリーダーでありメンバーであるJAXB2(JSR-222)専門家グループ。

デフォルト以外の JAXB (JSR-222) 実装を指定するには、jaxb.propertiesドメイン クラスと同じパッケージに というファイルを含める必要があります。以下は、jaxb.propertiesJAXB の MOXy 実装を指定するために使用されるファイルの例です。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

詳細については

おすすめ記事