JAXB生成的Java类在rootelment上有名称空间问题

时间:2013-08-09 22:45:59

标签: jaxb xsd jaxb2 xsd.exe xsd-1.1

我有一个xsd文件,如下所示,在eclipse中没有错误:

<?xml version="1.0"?>
<xs:schema id="build-summaries" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           elementFormDefault="qualified">
  <xs:element name="build-summaries" >
    <xs:complexType>
      <xs:choice minOccurs="0" 
                 maxOccurs="unbounded">
        <xs:element name="build">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="project-name" 
                          type="xs:string" 
                          minOccurs="0" />
              <xs:element name="label"  
                          type="xs:string" 
                          minOccurs="0" />
              <xs:element name="build-date"  
                          type="xs:string"  
                          minOccurs="0" />
              <xs:element name="log-file"  
                          type="xs:string"  
                          minOccurs="0" />
              <xs:element name="label-dirty"  
                          minOccurs="0"  
                          maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="message"  
                                type="xs:string"  
                                minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="tests"  
                          minOccurs="0"  
                          maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="total"  
                                type="xs:string"  
                                minOccurs="0" />
                    <xs:element name="failed"  
                                type="xs:string"  
                                minOccurs="0" />
                    <xs:element name="error"  
                                type="xs:string"  
                                minOccurs="0" />
                    <xs:element name="clean"  
                                type="xs:string"  
                                minOccurs="0" />
                    <xs:element name="time"  
                                type="xs:string"  
                                minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="summary"  
                          minOccurs="0"  
                          maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="total-tasks"  
                                type="xs:string"  
                                minOccurs="0" />
                    <xs:element name="failures"  
                                type="xs:string"  
                                minOccurs="0" />
                    <xs:element name="status"  
                                type="xs:string"  
                                minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="families"  
                          minOccurs="0"  
                          maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="family"  
                                minOccurs="0"  
                                maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="name"  
                                      type="xs:string"  
                                      minOccurs="0" />
                          <xs:element name="success"  
                                      type="xs:string"  
                                      minOccurs="0" />
                          <xs:element name="failure"  
                                      type="xs:string"  
                                      minOccurs="0" />
                          <xs:element name="notvalid" 
                                      type="xs:string"  
                                      minOccurs="0" />
                          <xs:element name="sar-total"  
                                      type="xs:string"  
                                      minOccurs="0" />
                          <xs:element name="sar-fails"  
                                      type="xs:string"  
                                      minOccurs="0" />
                          <xs:element name="cbuild-tasks"  
                                      type="xs:string"  
                                      minOccurs="0" />
                          <xs:element name="cbuild-fails"  
                                      type="xs:string"  
                                      minOccurs="0" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

我使用xjc jaxb java classes生成器创建了JAXB类。现在生成的JAXB文件在根元素上有错误:

"Cannot resolve XML element declaration with namespace '' and name 'build-summaries' in this context"

@XmlRootElement(name = "build-summaries")
public class BuildSummaries {

有人可以帮我解决这个问题吗? 当我们创建单个XSD文件时,我们是否需要创建命名空间?

1 个答案:

答案 0 :(得分:1)

如果您希望build-summaries元素位于命名空间中,则需要将targetNamespace="http://example.com/mynamespace"添加到xs:schema元素的start-tag(替换为{{1}所需的命名空间名称})。