2009-08-24 15 views
8

Javaクラスからxsdスキーマを生成するライブラリがありますか? Googleでは、反対の結果(xsdからのJavaクラス)が多く得られます。xsdからxsdへの生成

答えて

8

JAXB 2.0では、アノテーション付きJavaクラスからXMLスキーマを作成できます。

AMIS blogJavaPassion siteにいくつかの例があります。ここで

+0

私はJAXBのエキスパートであるはずです。私はそれを知らなかったのです。どのように恥ずかしい。あなたに+1してください。 – skaffman

+0

google-fuのいくつかの量があった:)そこに驚くべき理由はありません。 –

+0

ありがとうございました。私のgoogle fuは弱いです。 – Surya

3

JiBXこの

を行い、スキーマ生成ツールは、最初 一つ以上のJiBXの結合の定義を読み取り、バインディングで参照されるJavaクラス の 構造を解釈するためにリフレクションを使用します。 バインディング定義を と組み合わせることによって、 スキーマジェネレータは、 バインディングによって処理されるドキュメントを表す1つ以上の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

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

    } 
関連する問題