Pojo to xsd generation

前端 未结 4 1912
抹茶落季
抹茶落季 2021-01-11 23:30

Is there a library which could generate a xsd schema from a java class? Google yields lots of results the opposite ( java classes from xsd ).

4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-12 00:15

    Thanks for giving your method. Just wanted to add complete example.

    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 results = new ArrayList();
    
                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;
        }
    
        }
    

提交回复
热议问题