ram
ram

Reputation: 173

JAXB generated Java classes has the namespace issue on the rootelment

I have a single xsd file created as below with no errors in 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>

I have created the JAXB classes using the xjc jaxb java classes generator. now the generated JAXB files having an error on the root element:

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

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

Can somebody help me resoving this? when we create the single XSD file, Do we need to create the namespace?

Upvotes: 1

Views: 2568

Answers (1)

C. M. Sperberg-McQueen
C. M. Sperberg-McQueen

Reputation: 25034

If you want the build-summaries element to be in a namespace, then you need to add targetNamespace="http://example.com/mynamespace" to the xs:schema element's start-tag (substituting the name of the namespace you want for http://example.com/mynamespace).

Upvotes: 1

Related Questions