【问题标题】:JAXB ignores inner elementsJAXB 忽略内部元素
【发布时间】:2017-08-25 16:05:07
【问题描述】:

我一直在尝试将自己创建的 xml 配置文件解组为具有 JAXB 默认实现的对象,我忽略了原因,但是跳过了一些内部元素和值,给我空结果。

这里是xml文档:

<import-sources>
    <domain-objects>
        <domain-object class="xxx.xxx.core.business.mapping.Make">
            <sources>
                <source name="xxxxxx" class="xxx.xxx.core.web.common.model.xxxxxxx.output.MakeDTO">
                    <uri secured="true" value="xxxxxxxxxxxxxxxxxx"/>
                    <key name="api_key" mode="in_uri" value="xxxxxxxxxxxx"/>
                </source>
            </sources>
    </domain-object>
</domain-objects>

这是映射类:

@XmlRootElement(name = "import-sources")
public class ImportSources {

    @XmlType
    public static class DomainObject {

        @XmlType
        public static class Source {

            @XmlType
            public static class URI {

                private String value;

                private boolean secured;
            }

            @XmlType
            public static class Key {

                @XmlEnum
                public enum Mode {
                    @XmlEnumValue("in_uri")
                    IN_URI,
                    @XmlEnumValue("in_header")
                    IN_HEADER
                }

                private String name;

                private String value;

                private Mode mode;
            }


            private String name;


            private URI uri;


            private Key key;

            @XmlElement(name = "class")
            private Class outputClass;
        }

        @XmlAttribute(name = "class")
        private Class<? extends Entity> subjectClass;

        @XmlElementWrapper
        @XmlElement(name = "source")
        private Source[] sources;
    }

    @XmlElementWrapper(name = "domain-objects")
    @XmlElement(name = "domain-object")
    private DomainObject[] domainObjects;
}

使用 Unmarshaller.unmarshall() 解析文档后,所有 Source 的字段都为空,如果我像这样替换它的内部标记属性,我可以获得它的标量字段:

<source>
     <name>....</name>
     <class>...</class>
</source>

由于冗余,我想避免这种情况。

【问题讨论】:

    标签: java xml jaxb unmarshalling


    【解决方案1】:

    我终于通过使用“@XmlAttribute”在打开标签或单个标签中注释我想要的所有字段来解决我的问题。

    【讨论】:

      【解决方案2】:

      我建议相应地将字段明确注释为@XmlElement@XmlAttribute。您的课程将如下所示,并且将填充字段:

      @XmlRootElement(name = "import-sources")
      public class ImportSources {
      
          @XmlType
          public static class DomainObject {
      
              @XmlType
              public static class Source {
      
                  @XmlType
                  public static class URI {
      
      
                      @XmlAttribute //here
                      private String value;
      
                      @XmlAttribute //here
                      private boolean secured;
                  }
      
                  @XmlType
                  public static class Key {
      
                      @XmlEnum
                      public enum Mode {
                          @XmlEnumValue("in_uri")
                          IN_URI,
                          @XmlEnumValue("in_header")
                          IN_HEADER
                      }
      
                      @XmlAttribute //here
                      private String name;
      
                      @XmlAttribute //here
                      private String value;
      
                      @XmlAttribute //here
                      private Mode mode;
                  }
      
      
                  @XmlAttribute //here
                  private String name;
      
                  @XmlElement //here
                  private URI uri;
      
                  @XmlElement //here
                  private Key key;
      
                  @XmlElement(name = "class")
                  private Class outputClass;
              }
      
              @XmlAttribute(name = "class")
              private Class<? extends Entity> subjectClass;
      
              @XmlElementWrapper
              @XmlElement(name = "source")
              private Source[] sources;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-29
        • 2021-11-20
        • 2011-01-25
        • 2011-09-28
        • 2012-10-12
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        相关资源
        最近更新 更多