2011-01-24 4 views
9

私はJAXB実装としてMOXyを使用していますが、何らかの方法で実装例(Moxyなど)とバージョン番号を管理画面(動的に)に表示したいと思います。どのようなJAXB実装が使用されているかを知るには?

JAXBからその情報を取得するにはどうすればよいですか?あなたが使用しているJAXBのIMPLを把握するために、次のような何かを行うことができ

乾杯

答えて

10

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

Blaise Doughanの答えに基づいて、わずかな変更(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); 
    } 

} 
関連する問題