У сгенерированных JAXB Java-классов есть проблема с пространством имен в rootelment
У меня есть один 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, используя генератор классов jjxjaxb xjc. теперь сгенерированные файлы JAXB с ошибкой в корневом элементе:
"Cannot resolve XML element declaration with namespace '' and name 'build-summaries' in this context"
@XmlRootElement(name = "build-summaries")
public class BuildSummaries {
Может ли кто-нибудь помочь мне восстановить это? когда мы создаем один файл XSD, нужно ли нам создавать пространство имен?
1 ответ
Если вы хотите, чтобы элемент build-summary был в пространстве имен, то вам нужно добавить targetNamespace="http://example.com/mynamespace"
в начальный тег элемента xs:schema (подставляя имя пространства имен, для которого вы хотите http://example.com/mynamespace
).