2009-08-24 85 views

回答

8

JAXB 2.0允許您從註釋的Java類創建XML模式。

您會在AMIS blogJavaPassion site處找到一些示例。

+0

我應該是JAXB專家,我不知道。多麼尷尬。先生,先生+1。 – skaffman 2009-08-25 08:45:47

+0

有一些谷歌fu參與:)沒有理由在那裏感到驚訝。 – 2009-08-25 12:05:24

+0

很感謝。我的谷歌功能很弱。 – Surya 2009-08-25 19:46:07

3

JiBX執行此

架構發生器工具首先讀取 一個或多個JiBX綁定定義 ,然後使用反射來解釋 在綁定中引用的Java類 的結構。通過將綁定定義與 組合,實際的類信息模式生成器能夠構造一個或多個XML模式來表示由綁定處理的文檔。

3

這裏是我會怎麼做:

public void pojoToXSD(JAXBContext context, Object pojo, OutputStream out) 
    throws IOException, TransformerException 
{ 
    final List<DOMResult> results = new ArrayList<DOMResult>(); 

    context.generateSchema(new SchemaOutputResolver() { 

     @Override 
     public Result createOutput(String ns, String file) 
       throws IOException { 
      DOMResult result = new DOMResult(); 
      result.setSystemId(file); 
      results.add(result); 
      return result; 
     } 
    }); 

    DOMResult domResult = results.get(0); 
    Document doc = (Document) domResult.getNode(); 

    // Use a Transformer for output 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(); 

    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(out); 
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    transformer.transform(source, result); 
} 
+0

pojo對象在哪裏去? – FazoM 2017-03-22 11:30:34

-1

感謝給你的方法。只是想添加完整的例子。

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.ArrayList; 
import java.util.List; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.SchemaOutputResolver; 
import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Result; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMResult; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import test.Test; 

public class Main { 
    public static void main(String[] args) throws JAXBException, 
      FileNotFoundException { 

     JAXBContext context = JAXBContext.newInstance("test"); 
     try { 
      new Main().pojoToXSD(context, new Test(), System.out); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (TransformerException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
    public void pojoToXSD(JAXBContext context, Object pojo, OutputStream out) 
      throws IOException, TransformerException 
     { 
      final List<DOMResult> results = new ArrayList<DOMResult>(); 

      context.generateSchema(new SchemaOutputResolver() { 

       @Override 
       public Result createOutput(String ns, String file) 
         throws IOException { 
        DOMResult result = new DOMResult(); 
        result.setSystemId(file); 
        results.add(result); 
        return result; 
       } 
      }); 

      DOMResult domResult = results.get(0); 
      com.sun.org.apache.xerces.internal.dom.DocumentImpl doc = com.sun.org.apache.xerces.internal.dom.DocumentImpl) domResult.getNode(); 

      // Use a Transformer for output 
      TransformerFactory tFactory = TransformerFactory.newInstance(); 
      Transformer transformer = tFactory.newTransformer(); 

      DOMSource source = new DOMSource(doc); 
      StreamResult result = new StreamResult(out); 
      transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
      transformer.transform(source, result); 
     } 
} 

//---------- below will go in test package 

package test; 

import javax.xml.bind.annotation.XmlRegistry; 
import javax.xml.namespace.QName; 




@XmlRegistry 
public class ObjectFactory { 

    private final static QName _Test_QNAME = new Name("urn:vertexinc:enterprise:calendar:1:0", "Test"); 


    public ObjectFactory() { 
    } 
    public Test createTest() { 
     return new Test(); 
    } 

    } 


    package test; 

    public class Test { 
    String name; 
    String cls; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getCls() { 
     return cls; 
    } 

    public void setCls(String cls) { 
     this.cls = cls; 
    } 

    }