Кажется, что я уже делал это один раз в прошлом, но я не могу найти ссылку на то, что я сделал, чтобы заставить его работать.
У меня есть веб-приложение, в котором я хочу указать другую реализацию JAXB, чем тот, который предоставляется моим веб-сервером/jre. Я загрузил соответствующий артефакт из maven и увидел, что банка правильно упакована в моей войне, однако, когда я запускаю свое веб-приложение, я вижу, что он все еще использует встроенную реализацию JRE.
Я смутно помню что-то о файле свойств, который я мог бы настроить, но не могу найти ссылку на то, как его нужно настроить. Более того, если реализация, которую я хочу использовать, такая же (просто более новая версия), имена классов будут такими же, как если бы они были упакованы в JRE. Как я могу указать, что я хочу использовать те, которые были включены в мою WAR?
ИЗМЕНИТЬ
В настоящее время я работаю на JBoss 7.0.2, с Oracle JDK 1.6_0_27, JAXB RI, который поставляется с JRE (я думаю, это 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 зависит от jAp и 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