Классы Java, сгенерированные JAXB, имеют проблему с пространством имен в корневом элементе.

У меня есть один файл 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>

Я создал классы JAXB, используя генератор классов java xjc jaxb. теперь сгенерированные файлы JAXB имеют ошибку в корневом элементе:

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

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

Может ли кто-нибудь помочь мне решить это? когда мы создаем один файл XSD, нужно ли нам создавать пространство имен?


person ram    schedule 09.08.2013    source источник


Ответы (1)


Если вы хотите, чтобы элемент build-summaries находился в пространстве имен, вам нужно добавить targetNamespace="http://example.com/mynamespace" к начальному тегу элемента xs:schema (заменив http://example.com/mynamespace на имя нужного пространства имен).

person C. M. Sperberg-McQueen    schedule 12.08.2013
comment
После этого мне пришлось регенерировать классы JAXB. Подумал, может кому поможет. - person Arvindh Mani; 25.10.2017