2011-01-24 4 views
9

Я использую MOXy как реализацию JAXB, но каким-то образом я хотел бы показать имя реализации (например, Moxy) и номер версии на каком-то экране администратора (динамически).Как узнать, какая реализация JAXB используется?

Как я могу получить эту информацию от JAXB?

Приветствия

ответ

10

Вы могли бы сделать что-то вроде следующего, чтобы выяснить осущ JAXB используется:

import javax.xml.bind.JAXBContext; 

public class Demo { 

    private static final String MOXY_JAXB_CONTEXT = "org.eclipse.persistence.jaxb.JAXBContext"; 
    private static final String METRO_JAXB_CONTEXT = "com.sun.xml.bind.v2.runtime.JAXBContextImpl"; 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Root.class); 

     String jaxbContextImpl = jc.getClass().getName(); 
     if(MOXY_JAXB_CONTEXT.equals(jaxbContextImpl)) { 
      System.out.println("EclipseLink MOXy"); 
     } else if(METRO_JAXB_CONTEXT.equals(jaxbContextImpl)) { 
      System.out.println("Metro"); 
     } else { 
      System.out.println("Other"); 
     } 
    } 

} 

Вы можете получить информацию о версии EclipseLink которая используется от его версии класс:

import org.eclipse.persistence.Version; 

public class VersionDemo { 

    public static void main(String[] args) { 
     System.out.println(Version.getVersion()); 
    } 
} 
+0

Большое спасибо! Все это прекрасно работает. – basZero

+0

И как исследовать, что такое «Другое»? – Line

0

Основываясь на ответе Блейза Доукана, небольшая модификация (тест JUnit). Обратите внимание, что пакет реализации Metro, похоже, изменился (возможно, вокруг Java6u4). До сих пор нет интерфейса самоконтроля? ГРУСТНЫЙ!

import org.junit.Test; 

public class JaxbVersion { 

    @Test 
    public void printJaxbInformation() throws JAXBException { 
     String MOXY = "org.eclipse.persistence.jaxb"; 
     String METRO_EARLY = "com.sun.xml.bind.v2"; 
     String METRO_LATE = "com.sun.xml.internal.bind.v2"; // since JDK 6u4 (?) 
     String CAMEL = "org.apache.camel.converter.jaxb";  
     Class<?> clazz = SomeJaxbGeneratedClass.class; 
     // http://docs.oracle.com/javaee/7/api/javax/xml/bind/JAXBContext.html 
     JAXBContext jc = JAXBContext.newInstance(clazz); 
     String jcClassName = jc.getClass().getName(); 
     String res; 
     if (jcClassName.startsWith(MOXY)) { 
      res = "EclipseLink MOXy"; 
     } else if (jcClassName.startsWith(METRO_EARLY) || jcClassName.startsWith(METRO_LATE)) { 
      res = "Oracle Metro"; 
     } else if (jcClassName.startsWith(CAMEL)) { 
      res = "Apache Camel"; 
     } else { 
      res = "Unknown"; 
     } 
     res = res + "(" + jcClassName + ")";   
     System.out.println(res); 
    } 

} 
Смежные вопросы