代码之家  ›  专栏  ›  技术社区  ›  Surya

Pojo到xsd生成

  •  9
  • Surya  · 技术社区  · 16 年前

    4 回复  |  直到 14 年前
        1
  •  8
  •   Vineet Reynolds    16 年前
        2
  •  3
  •   skaffman    16 年前

    JiBX 是这样吗

    模式生成器工具首先读取 Java类的结构 在绑定中引用。通过 将绑定定义与 实际班级信息 模式生成器能够构建 由绑定处理的文档。

        3
  •  3
  •   ra9r    15 年前

    public static void pojoToXSD(Class<?> pojo, OutputStream out) throws IOException, TransformerException, JAXBException {
        JAXBContext context = JAXBContext.newInstance(pojo);
        final List<DOMResult> 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);
    
        // Use a Transformer for output
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer();
    
        DOMSource source = new DOMSource(domResult.getNode());
        StreamResult result = new StreamResult(out);
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.transform(source, result);
    }
    

    如何使用上述方法

    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);
        }
    
        4
  •  -1
  •   Octahedron Rajaram    13 年前

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