Кажется, что я уже делал это однажды в прошлом, но я не могу найти никакой ссылки на то, что я сделал, чтобы заставить его работать.
У меня есть веб-приложение, в котором я хочу указать реализацию 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