JAXB java.lang.ClassCastException при составлении списка целых чисел - PullRequest
0 голосов
/ 07 мая 2018

У меня есть класс со списком целых чисел. Этот класс создан из XSD ниже.

  <xs:complexType name="Vehicle">
    <xs:sequence>
      <xs:element name="regNum" type="xs:string" />
      <xs:element name="company" type="xs:string" />
      <xs:element name="model" type="xs:string" />
      <xs:element name="lights" type="vehicle:Lights" />
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="Lights">
    <xs:list>
      <xs:simpleType>
        <xs:restriction base="xs:int">
          <xs:minInclusive value="1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:list>
  </xs:simpleType>

Это сгенерированный следующий класс:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Vehicle", propOrder = {
    "regNum",
    "company",
    "model",
    "lights"
})
@XmlSeeAlso({
    com.vcc.siig.domain.manual.vehicle.Car.class,
    com.vcc.siig.domain.manual.vehicle.Truck.class
})
public class Vehicle {

    @XmlElement(required = true)
    protected String regNum;
    @XmlElement(required = true)
    protected String company;
    @XmlElement(required = true)
    protected String model;
    @XmlList
    @XmlElement(type = Integer.class)
    @XmlSchemaType(name = "anySimpleType")
    protected List<Integer> lights;

    ...
}

Когда я выполняю маршал из объекта Vehicle в XML. Я получаю следующую ошибку:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer incompatible with java.lang.String
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$StringImplImpl.print(RuntimeBuiltinLeafInfoImpl.java:982)
    at com.sun.xml.internal.bind.v2.runtime.reflect.ListTransducedAccessorImpl.print(ListTransducedAccessorImpl.java:115)
    at com.sun.xml.internal.bind.v2.runtime.reflect.DefaultTransducedAccessor.writeLeafElement(DefaultTransducedAccessor.java:66)
    at com.sun.xml.internal.bind.v2.runtime.property.ListElementProperty.serializeBody(ListElementProperty.java:111)
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:337)
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:680)
    at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:147)
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:337)
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:575)
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:318)
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:476)
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:326)
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:255)
    at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:107)
    at com.kishor.temp.MarkX.main(MarkX.java:44)

Если сделать Vehicle.lights равным нулю, я получу XML.

Я не уверен, что это ошибка или проблема с моим xsd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...