users@jaxb.java.net

Re: JAXB and nillable="true" error

From: juan.velez <juan.velez_at_areva-td.com>
Date: Tue, 13 Jan 2009 08:14:26 -0800 (PST)

My mistake. I should have read better.

Thanks,

Juan

Wolfgang Laun-2 wrote:
>
> If I read this correctly:
> In the schema entry for TargetStatus, there is no nillable attribute,
> hence
> it is false.
> <xs:element minOccurs="0" name="TargetStatus"
> type="tns:ImportExportTargetStatus" />
>
> In the XML file we see nil="true"
> <ns2:TargetStatus xs:nil="true" />
>
> And the error message:
> [org.xml.sax.
>>
>> SAXParseException: cvc-elt.3.1: Attribute
>> 'http://www.w3.org/2001/XMLSchema-instance,nil' must not appear on
>> element
>> 'ns2:TargetStatus', because the {nillable} property of 'ns2:TargetStatus'
>> is
>> false.]
>
>
> Well, that's what it is, in't it?
> -W
>
> On Sat, Jan 10, 2009 at 11:14 PM, juan.velez
> <juan.velez_at_areva-td.com>wrote:
>
>>
>> I do not know if this is a bug, but I think it is. I have the following
>> XML
>> Schema
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <xs:schema
>> xmlns:tns="http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC"
>> elementFormDefault="qualified"
>>
>> targetNamespace="
>> http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC"
>> xmlns:xs="http://www.w3.org/2001/XMLSchema">
>> <xs:complexType name="UpdateImportExportRequestTargetStatus">
>> <xs:sequence>
>> <xs:element name="RequestId" type="xs:decimal" />
>> <xs:element minOccurs="0" name="SequenceId" nillable="true"
>> type="xs:string" />
>> <xs:element minOccurs="0" name="TargetId" nillable="true"
>> type="xs:string" />
>> <xs:element minOccurs="0" name="TargetStatus"
>> type="tns:ImportExportTargetStatus" />
>> <xs:element minOccurs="0" name="TypeId" nillable="true"
>> type="xs:string" />
>> </xs:sequence>
>> </xs:complexType>
>> <xs:element name="UpdateImportExportRequestTargetStatus" nillable="true"
>> type="tns:UpdateImportExportRequestTargetStatus" />
>> <xs:simpleType name="ImportExportTargetStatus">
>> <xs:restriction base="xs:string">
>> <xs:enumeration value="Successful" />
>> <xs:enumeration value="Failed" />
>> </xs:restriction>
>> </xs:simpleType>
>> </xs:schema>
>>
>> I run the JAXB generation code and I end up with the following
>> UpdateImportExportRequestTargetStatus class
>>
>> //
>> // This file was generated by the JavaTM Architecture for XML
>> Binding(JAXB)
>> Reference Implementation, vhudson-jaxb-ri-2.1-646
>> // See http://java.sun.com/xml/jaxb http://java.sun.com/xml/jaxb
>> // Any modifications to this file will be lost upon recompilation of the
>> source schema.
>> // Generated on: 2009.01.10 at 01:55:39 PM PST
>> //
>>
>>
>> package com.areva.csm.service.schema;
>>
>> import java.math.BigDecimal;
>> import javax.xml.bind.JAXBElement;
>> import javax.xml.bind.annotation.XmlAccessType;
>> import javax.xml.bind.annotation.XmlAccessorType;
>> import javax.xml.bind.annotation.XmlElement;
>> import javax.xml.bind.annotation.XmlElementRef;
>> import javax.xml.bind.annotation.XmlType;
>>
>>
>> /**
>> * <p>Java class for UpdateImportExportRequestTargetStatus complex type.
>> *
>> * <p>The following schema fragment specifies the expected content
>> contained
>> within this class.
>> *
>> * <pre>
>> * &lt;complexType name="UpdateImportExportRequestTargetStatus">
>> * &lt;complexContent>
>> * &lt;restriction
>> base="{http://www.w3.org/2001/XMLSchema}anyType<http://www.w3.org/2001/XMLSchema%7DanyType>
>> ">
>> * &lt;sequence>
>> * &lt;element name="RequestId"
>> type="{http://www.w3.org/2001/XMLSchema}decimal<http://www.w3.org/2001/XMLSchema%7Ddecimal>
>> "/>
>> * &lt;element name="SequenceId"
>> type="{http://www.w3.org/2001/XMLSchema}string<http://www.w3.org/2001/XMLSchema%7Dstring>"
>> minOccurs="0"/>
>> * &lt;element name="TargetId"
>> type="{http://www.w3.org/2001/XMLSchema}string<http://www.w3.org/2001/XMLSchema%7Dstring>"
>> minOccurs="0"/>
>> * &lt;element name="TargetStatus"
>> type="{
>> http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC}ImportExportTargetStatus<http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC%7DImportExportTargetStatus>
>> "
>> minOccurs="0"/>
>> * &lt;element name="TypeId"
>> type="{http://www.w3.org/2001/XMLSchema}string<http://www.w3.org/2001/XMLSchema%7Dstring>"
>> minOccurs="0"/>
>> * &lt;/sequence>
>> * &lt;/restriction>
>> * &lt;/complexContent>
>> * &lt;/complexType>
>> * </pre>
>> *
>> *
>> */
>> @XmlAccessorType(XmlAccessType.FIELD)
>> @XmlType(name = "UpdateImportExportRequestTargetStatus", propOrder = {
>> "requestId",
>> "sequenceId",
>> "targetId",
>> "targetStatus",
>> "typeId"
>> })
>> public class UpdateImportExportRequestTargetStatus {
>>
>> @XmlElement(name = "RequestId", required = true)
>> protected BigDecimal requestId;
>> @XmlElementRef(name = "SequenceId", namespace =
>> "http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC", type =
>> JAXBElement.class)
>> protected JAXBElement<String> sequenceId;
>> @XmlElementRef(name = "TargetId", namespace =
>> "http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC", type =
>> JAXBElement.class)
>> protected JAXBElement<String> targetId;
>> @XmlElement(name = "TargetStatus")
>> protected ImportExportTargetStatus targetStatus;
>> @XmlElementRef(name = "TypeId", namespace =
>> "http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC", type =
>> JAXBElement.class)
>> protected JAXBElement<String> typeId;
>>
>> /**
>> * Gets the value of the requestId property.
>> *
>> * @return
>> * possible object is
>> * {_at_link BigDecimal }
>> *
>> */
>> public BigDecimal getRequestId() {
>> return requestId;
>> }
>>
>> /**
>> * Sets the value of the requestId property.
>> *
>> * @param value
>> * allowed object is
>> * {_at_link BigDecimal }
>> *
>> */
>> public void setRequestId(BigDecimal value) {
>> this.requestId = value;
>> }
>>
>> /**
>> * Gets the value of the sequenceId property.
>> *
>> * @return
>> * possible object is
>> * {_at_link JAXBElement }{_at_code <}{_at_link String }{_at_code >}
>> *
>> */
>> public JAXBElement<String> getSequenceId() {
>> return sequenceId;
>> }
>>
>> /**
>> * Sets the value of the sequenceId property.
>> *
>> * @param value
>> * allowed object is
>> * {_at_link JAXBElement }{_at_code <}{_at_link String }{_at_code >}
>> *
>> */
>> public void setSequenceId(JAXBElement<String> value) {
>> this.sequenceId = ((JAXBElement<String> ) value);
>> }
>>
>> /**
>> * Gets the value of the targetId property.
>> *
>> * @return
>> * possible object is
>> * {_at_link JAXBElement }{_at_code <}{_at_link String }{_at_code >}
>> *
>> */
>> public JAXBElement<String> getTargetId() {
>> return targetId;
>> }
>>
>> /**
>> * Sets the value of the targetId property.
>> *
>> * @param value
>> * allowed object is
>> * {_at_link JAXBElement }{_at_code <}{_at_link String }{_at_code >}
>> *
>> */
>> public void setTargetId(JAXBElement<String> value) {
>> this.targetId = ((JAXBElement<String> ) value);
>> }
>>
>> /**
>> * Gets the value of the targetStatus property.
>> *
>> * @return
>> * possible object is
>> * {_at_link ImportExportTargetStatus }
>> *
>> */
>> public ImportExportTargetStatus getTargetStatus() {
>> return targetStatus;
>> }
>>
>> /**
>> * Sets the value of the targetStatus property.
>> *
>> * @param value
>> * allowed object is
>> * {_at_link ImportExportTargetStatus }
>> *
>> */
>> public void setTargetStatus(ImportExportTargetStatus value) {
>> this.targetStatus = value;
>> }
>>
>> /**
>> * Gets the value of the typeId property.
>> *
>> * @return
>> * possible object is
>> * {_at_link JAXBElement }{_at_code <}{_at_link String }{_at_code >}
>> *
>> */
>> public JAXBElement<String> getTypeId() {
>> return typeId;
>> }
>>
>> /**
>> * Sets the value of the typeId property.
>> *
>> * @param value
>> * allowed object is
>> * {_at_link JAXBElement }{_at_code <}{_at_link String }{_at_code >}
>> *
>> */
>> public void setTypeId(JAXBElement<String> value) {
>> this.typeId = ((JAXBElement<String> ) value);
>> }
>>
>> }
>>
>> However, when I try to unmarshall (with schema validation) a valid XML
>> fragment
>>
>> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
>> <ns2:UpdateImportExportRequestTargetStatus
>>
>> xmlns:ns2="http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC"
>> xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
>> <ns2:RequestId>123</ns2:RequestId>
>> <ns2:SequenceId xs:nil="true" />
>> <ns2:TargetId xs:nil="true" />
>> <ns2:TargetStatus xs:nil="true" />
>> <ns2:TypeId xs:nil="true" />
>> </ns2:request>
>>
>> I get the following which I think it must be a JAXB bug
>>
>> Exception in thread "main" javax.xml.bind.UnmarshalException
>> - with linked exception:
>> [org.xml.sax.SAXParseException: cvc-elt.3.1: Attribute
>> 'http://www.w3.org/2001/XMLSchema-instance,nil' must not appear on
>> element
>> 'ns2:TargetStatus', because the {nillable} property of 'ns2:TargetStatus'
>> is
>> false.]
>> at
>>
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
>> at
>>
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:510)
>> at
>>
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:215)
>> at
>>
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184)
>> at
>>
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
>> at
>>
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
>>
>>
>> The code to unmarshall is:
>>
>> SchemaFactory schemaFactory =
>>
>> SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
>>
>> List<InputStream> inputStreams = new ArrayList<InputStream>();
>>
>>
>> inputStreams.add(ClassLoader.getSystemResourceAsStream("Areva.Csm.Service.DC.xsd"));
>>
>> List<Source> sources = new ArrayList<Source>();
>> for (InputStream is: inputStreams) {
>> sources.add(new StreamSource(is));
>> }
>>
>> Source[] schemaSources = new Source[sources.size()];
>> sources.toArray(schemaSources);
>> Schema schema = null;
>> schema = schemaFactory.newSchema(schemaSources);
>>
>> final StringBuffer request = new StringBuffer(
>> "<?xml version=\"1.0\" encoding=\"UTF-8\"
>> standalone=\"yes\"?>"
>> +
>> "<ns2:UpdateImportExportRequestTargetStatus
>> xmlns:ns2=\"http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC\<http://schemas.datacontract.org/2004/07/Areva.Csm.Service.DC%5C>"
>> "
>> +
>> "
>> xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\<http://www.w3.org/2001/XMLSchema-instance%5C>">"
>> +
>> " <ns2:RequestId>123</ns2:RequestId>" +
>> " <ns2:SequenceId xs:nil=\"true\" />"+
>> " <ns2:TargetId xs:nil=\"true\" />"+
>> " <ns2:TargetStatus xs:nil=\"true\" />"+
>> " <ns2:TypeId xs:nil=\"true\" />"+
>> "</ns2:request>");
>>
>> JAXBContext jc;
>> jc = JAXBContext.newInstance( "com.areva.csm.service.schema" );
>> Unmarshaller unmarshaller = jc.createUnmarshaller();
>> unmarshaller.setSchema(schema);
>>
>> JAXBElement<?> element2 = (JAXBElement<?>)
>> unmarshaller.unmarshal(new ByteArrayInputStream(
>> request.toString().getBytes()));
>> UpdateImportExportRequestTargetStatus status =
>> (UpdateImportExportRequestTargetStatus) element2.getValue();
>>
>> BTW I am using Java 1.5 and JAXB-RI 2.1.7
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/JAXB-and-nillable%3D%22true%22-error-tp21393490p21393490.html
>> Sent from the java.net - jaxb users mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jaxb.dev.java.net
>> For additional commands, e-mail: users-help_at_jaxb.dev.java.net
>>
>>
>
>

-- 
View this message in context: http://www.nabble.com/JAXB-and-nillable%3D%22true%22-error-tp21393490p21438958.html
Sent from the java.net - jaxb users mailing list archive at Nabble.com.