servlet - upload files jsp java
¿Cómo saber qué aplicación JAXB se usa? (2)
Podría hacer algo como lo siguiente para descubrir la JAXB impl utilizada:
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 sobre la versión de EclipseLink que se utiliza desde su clase de versión:
import org.eclipse.persistence.Version;
public class VersionDemo {
public static void main(String[] args) {
System.out.println(Version.getVersion());
}
}
Estoy usando MOXy como Implementación de 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 puedo recuperar esa información de JAXB?
Aclamaciones
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);
}
}