【问题标题】:Two different schemas and JAXB Marshaller两种不同的模式和 JAXB Marshaller
【发布时间】:2014-09-03 18:14:10
【问题描述】:

假设我们的 XML 与 Schema 和 Java 类有一些共同的字段:

    <objectFromSchema1>
     <element1/>
     <commonElement1/>
     <commonElement2/>
     <element2/>
    </objectFromSchema1>

   public class X {
     private String element1;
     private String commonElement1;
     private String commonElement2;
     private String element2;
   }

是一种将这种 XML 解组为 Java 对象的好方法吗?这意味着:转换所有同意的字段并在休息时设置 null。

【问题讨论】:

  • 我可以知道你问这个的原因吗?这是一种非常方便和简单的方法

标签: java jaxb schema marshalling


【解决方案1】:

答案是“是”。这就是 JAXB 的工作方式。查看基本的 JAXB 教程,例如https://jaxb.java.net/tutorial/

http://docs.oracle.com/javase/tutorial/jaxb/intro/

http://www.vogella.com/tutorials/JAXB/article.html

【讨论】:

    【解决方案2】:

    “是”

    如果你有 xsd,你也可以通过&lt;artifactId&gt;maven-jaxb2-plugin&lt;/artifactId&gt;maven 插件自动生成这些类。

    你的类的一个例子

    import java.io.Serializable;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "objectFromSchema1", propOrder = {
    
    })
    @XmlRootElement(name = "objectFromSchema1")
    public class ObjectFromSchema1
    implements Serializable
    {
    
        private final static long serialVersionUID = 12343L;
        protected String element1;
        protected String element2;
        protected String commonElement1;
        protected String commonElement2;
        public String getElement1() {
            return element1;
        }
        public void setElement1(String element1) {
            this.element1 = element1;
        }
        public String getElement2() {
            return element2;
        }
        public void setElement2(String element2) {
            this.element2 = element2;
        }
        public String getCommonElement1() {
            return commonElement1;
        }
        public void setCommonElement1(String commonElement1) {
            this.commonElement1 = commonElement1;
        }
        public String getCommonElement2() {
            return commonElement2;
        }
        public void setCommonElement2(String commonElement2) {
            this.commonElement2 = commonElement2;
        }
    
    }
    

    主要使用方法

    public static void main(String[] args) throws JAXBException {
            final JAXBContext context = JAXBContext.newInstance(ObjectFromSchema1.class);
            final Marshaller m = context.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    
            final ObjectFromSchema1 objectFromSchema1 = new ObjectFromSchema1();
    
            objectFromSchema1.setCommonElement1("commonElement1");
            objectFromSchema1.setCommonElement2("commonElement2");
            objectFromSchema1.setElement1("element1");
            objectFromSchema1.setElement2("element2");
    
            m.marshal(objectFromSchema1, System.out);
        }
    

    输出

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <objectFromSchema1>
        <element1>element1</element1>
        <element2>element2</element2>
        <commonElement1>commonElement1</commonElement1>
        <commonElement2>commonElement2</commonElement2>
    </objectFromSchema1>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      相关资源
      最近更新 更多