9
votes

Pojo à la génération XSD

Y a-t-il une bibliothèque qui pourrait générer un schéma XSD d'une classe Java? Google donne beaucoup de résultats les résultats opposés (classes Java de XSD).


0 commentaires

4 Réponses :


3
votes

Jibx fait cela

L'outil générateur de schéma est d'abord lit une ou plusieurs définitions de liaison à JIBX puis utilise la réflexion pour interpréter la structure des classes Java référencé dans les fixations. Par combinant les définitions de liaison avec les informations de la classe actuelles le Le générateur de schéma est capable de construire un ou plusieurs schemas XML pour représenter les documents traités par les liaisons.


0 commentaires


4
votes

Voici comment je le ferais:

try {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        pojoToXSD(NESingleResponse.class, stream);

        String finalString = new String(stream.toByteArray());
        System.out.println(finalString);
    } catch (JAXBException ex) {
        Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }


1 commentaires

Où va l'objet pojo?



-1
votes

Merci d'avoir donné votre méthode. Je voulais juste ajouter un exemple complet.

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

    }


0 commentaires