2012-01-24 70 views

回答

0

說明:我是EclipseLink JAXB (MOXy)的領導和JAXB 2 (JSR-222)專家組的成員。

如果您不能修改類來註釋它們,那麼您可能會對EclipseLink JAXB(MOXy)中的外部映射文檔擴展感興趣。

oxm.xml

下面是外部映射文檔等效我已經在我的博客(JSON Binding with EclipseLink MOXy - Twitter Example)的例子中的一個所指定的元數據。

<?xml version="1.0"?> 
<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    package-name="blog.json.twitter"> 
    <java-types> 
     <java-type name="SearchResults" xml-accessor-type="FIELD"> 
      <java-attributes> 
       <xml-element java-attribute="completedIn" name="completed_in"/> 
      </java-attributes> 
     </java-type> 
     <java-type name="Result" xml-accessor-type="FIELD"> 
      <java-attributes> 
       <xml-element java-attribute="createdAt" name="created_at"> 
        <xml-java-type-adapter value="blog.json.twitter.DateAdapter"/> 
       </xml-element> 
       <xml-element java-attribute="fromUser" name="from_user"/> 
      </java-attributes> 
     </java-type> 
    </java-types> 
</xml-bindings> 

演示

來引導的JAXBContext與外部映射文檔看起來像代碼:

Map<String, Object> properties = new HashMap<String, Object>(1); 
properties.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, "blog/json/twitter/oxm.xml"); 
JAXBContext jc = JAXBContext.newInstance(new Class[] {SearchResults.class}, properties); 

更多信息

0

這爲我工作。在此MyClass中沒有使用JAXB註釋進行註釋。 MyClass是一個典型的java bean類。

 try { 
     JAXBContext jc = JAXBContext.newInstance(MyClass.class); 
     MyClass cl = new MyClass(); 
     Marshaller m = jc.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
     m.marshal(new JAXBElement<MyClass>(new QName("","MyClass"), MyClass.class, cl), System.out); 

    } catch (JAXBException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    }