2011-01-24 18 views
9

Estoy utilizando MOXy como Implementación JAXB pero de alguna manera me gustaría mostrar el Nombre de implementación (por ejemplo, Moxy) y el número de versión en alguna pantalla de administración (dinámicamente).¿Cómo saber qué aplicación JAXB se utiliza?

¿Cómo puedo recuperar esa información de JAXB?

Saludos

Respuesta

10

Se podría hacer algo como lo siguiente para averiguar las impl JAXB que se utiliza:

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"); 
     } 
    } 

} 

Puede obtener información acerca de la versión EclipseLink se pueda utilizar desde su clase Versión:

import org.eclipse.persistence.Version; 

public class VersionDemo { 

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

¡Muchas gracias! Esta todo trabajando bien. – basZero

+0

¿Y cómo investigar qué es "Otro"? – Line

0

Basado en la respuesta de Blaise Doughan, una ligera modificación (prueba JUnit). Tenga en cuenta que el paquete de la implementación de Metro parece haber cambiado (tal vez en torno a Java6u4). Todavía no hay una interfaz de autoinspección? ¡TRISTE!

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); 
    } 

} 
Cuestiones relacionadas