2011-01-24 22 views
9

मैं MOXy का उपयोग JAXB कार्यान्वयन के रूप में कर रहा हूं लेकिन किसी भी तरह से मैं कार्यान्वयन नाम (उदा। मोक्सी) और कुछ व्यवस्थापक स्क्रीन (गतिशील रूप से) संस्करण संस्करण को दिखाना चाहता हूं।कैसे पता चलेगा कि जेएक्सबी कार्यान्वयन का क्या उपयोग किया जाता है?

मैं जेएक्सबी से उस जानकारी को कैसे प्राप्त कर सकता हूं?

चीयर्स

उत्तर

10

आप की तरह JAXB impl यह पता लगाने के लिए निम्न प्रयोग किया जा रहा कुछ कर सकते हैं:

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

ब्लेज़ डोफन के उत्तर के आधार पर, मामूली संशोधन (जुनीट टेस्ट)। ध्यान दें कि मेट्रो कार्यान्वयन का पैकेज बदल गया है (शायद जावा 6u4 के आसपास)। अभी भी कोई आत्म-निरीक्षण इंटरफ़ेस नहीं है? उदास!

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

}