JAXB内部元素被忽略

时间:2014-01-13 20:24:51

标签: java xml maven jaxb

我正在使用JAXB处理一些XML。我不明白为什么我无法访问此标记的内部元素。

XML片段:

<binary>
    <route>
        <payload source="SomeService" version="1.2"><![CDATA[ACAA8f///...snip...AAAAAGGAAAARAFR]]>
        </payload>
    </route>
</binary>

由此我生成了一个XSD:

 <xsd:element name="binary">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="route">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="payload">
                  <xsd:complexType>
                    <xsd:attribute name="source" type="xsd:string" />
                    <xsd:attribute name="version" type="xsd:string" />
                  </xsd:complexType>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

我正在使用maven-jaxb2-plugin并且一切正常:

<build>
    <plugins>
      <plugin>
        <inherited>true</inherited>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
</build>

在我的对象上,我有getSource()和getVersion()的方法,但没有getValue()或类似的东西。我从根本上错过了一些东西吗?试图以这种方式访问​​内部元素数据不正确吗?

编辑:包含生成的Java代码

/**
         * <p>Java class for anonymous complex type.
         * 
         * <p>The following schema fragment specifies the expected content contained within this class.
         * 
         * <pre>
         * &lt;complexType>
         *   &lt;complexContent>
         *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
         *       &lt;attribute name="source" type="{http://www.w3.org/2001/XMLSchema}string" />
         *       &lt;attribute name="version" type="{http://www.w3.org/2001/XMLSchema}string" />
         *     &lt;/restriction>
         *   &lt;/complexContent>
         * &lt;/complexType>
         * </pre>
         * 
         * 
         */
        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "")
        public static class Payload {

            @XmlAttribute(name = "source")
            protected String source;
            @XmlAttribute(name = "version")
            protected String version;
            @XmlValue
            protected String value;
            /**
             * Gets the value of the source property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getSource() {
                return source;
            }

            /**
             * Sets the value of the source property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setSource(String value) {
                this.source = value;
            }

            /**
             * Gets the value of the version property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getVersion() {
                return version;
            }

            /**
             * Sets the value of the version property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setVersion(String value) {
                this.version = value;
            }

        }

1 个答案:

答案 0 :(得分:1)

payload元素的模式定义应如下所示,以获取您正在寻找的JAXB类。您需要修复从XML文档生成XML模式的方法。

<element name="payload">
    <complexType>
        <simpleContent>
            <extension base="string">
                <xsd:attribute name="source" type="xsd:string" />
                <xsd:attribute name="version" type="xsd:string" />
            </extension>
        </simpleContent>
    </complexType>
</element>

了解更多信息