Как указать конкретную реализацию JAXB?

Кажется, что я уже делал это однажды в прошлом, но я не могу найти никакой ссылки на то, что я сделал, чтобы заставить его работать.

У меня есть веб-приложение, в котором я хочу указать реализацию JAXB, отличную от той, что предоставляется моим веб-сервером/jre. Я загрузил соответствующий артефакт из maven и вижу, что jar правильно упакован в мою войну, однако, когда я запускаю свое веб-приложение, я вижу, что оно все еще использует связанную реализацию JRE.

Я смутно припоминаю что-то о файле свойств, который я мог настроить, но не могу найти ссылку на то, как его нужно настроить. Более того, если реализация, которую я хочу использовать, та же самая (только более новая версия), имена классов будут такими же, как если бы они были упакованы в JRE. Как я могу указать, что я хочу использовать те, которые входят в мой WAR?

РЕДАКТИРОВАТЬ

В настоящее время я работаю на JBoss 7.0.2, с Oracle JDK 1.6_0_27, JAXB RI, который поставляется с JRE (я думаю, что это версия 2.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 зависит от реализации jar-файлов API, активации, jsr и jaxb1. Но они не указаны в jaxb pom. Немного покопавшись в Интернете, я нашел эту ссылку, в которой обсуждается, как использовать JAXB 2.2 в среде Java6SE. К сожалению, это тоже не сработало; Я все еще получаю вышеуказанные сообщения 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

21
задан River 18 October 2017 в 03:23
поделиться