Bugzilla will be upgraded to version 5.0. The upgrade date is tentatively scheduled for 2 December 2018, pending final testing and feedback.
Bug 1127318 - [GSS] (6.4) JAXB Unmarshaller sets the incorrect element as nil
[GSS] (6.4) JAXB Unmarshaller sets the incorrect element as nil
Status: VERIFIED
Product: JBoss Enterprise Application Platform 6
Classification: JBoss
Component: XML Frameworks (Show other bugs)
6.3.0
Unspecified Unspecified
unspecified Severity unspecified
: DR1
: EAP 6.4.0
Assigned To: Jason T. Greene
Pavel Slavicek
eap-docs
:
Depends On:
Blocks: 1127326 1127320 1127946
  Show dependency treegraph
 
Reported: 2014-08-06 11:59 EDT by Kyle Lape
Modified: 2015-05-19 06:13 EDT (History)
2 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 1127320 (view as bug list)
Environment:
Last Closed:
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Kyle Lape 2014-08-06 11:59:38 EDT
Upstream Jira link: https://java.net/jira/browse/JAXB-1028

Given the following schema: 

<xs:schema xmlns:tns="http://jaxb.gss.redhat.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://jaxb.gss.redhat.com/">
  <xs:element name="team" type="tns:team"/>
  <xs:complexType name="team">
    <xs:sequence>
      <xs:element ref="tns:abstractName"/>
      <xs:element ref="tns:member"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element abstract="true"  name="abstractName" nillable="false"/>
  <xs:element abstract="false" name="name"         nillable="true" substitutionGroup="tns:abstractName" type="xs:string"/>
  <xs:element abstract="true"  name="member"       nillable="false"/>
  <xs:element abstract="false" name="programmer"   nillable="true" substitutionGroup="tns:member" type="xs:string"/>
</xs:schema>

And the following XML:

<team xmlns="http://jaxb.gss.redhat.com/">
  <name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
  <programmer>Kyle</programmer>
</team>

A JAXB unmarshaller will mark the <programmer> element as nil, yet still have the value of "Kyle" associated with the JAXBElement.

Code to test:

package com.redhat.gss.jaxb;

import java.net.URL;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;

public class Test {
  private static JAXBContext ctx = null;

  public static void main(String[] args) throws Exception {
    ctx = JAXBContext.newInstance(ObjectFactory.class, Team.class, String.class);
    URL inputUrl = Test.class.getResource("/no-nil.xml");
    System.out.println("Non-nil test.");
    doTest(inputUrl);
    System.out.println("\nNil test.  Member should NOT be nil");
    inputUrl = Test.class.getResource("/nil.xml");
    doTest(inputUrl);
  }

  public static void doTest(URL inputUrl) throws Exception {
    Unmarshaller unm = ctx.createUnmarshaller();
    Object o = unm.unmarshal(inputUrl);
    Team team = ((JAXBElement<Team>)o).getValue();
    System.out.println("Name: " + team.getAbstractName().getValue());
    System.out.println("Name nil? " + (team.getAbstractName().isNil() ? "YES" : "NO"));
    System.out.println("Member: " + team.getMember().getValue());
    System.out.println("Member nil? " + (team.getMember().isNil() ? "YES" : "NO"));
  }
}
Comment 1 Kabir Khan 2014-08-23 06:30:24 EDT
Should be fixed by jaxb upgrade to 2.2.5-redhat-9: https://bugzilla.redhat.com/show_bug.cgi?id=1127326
Comment 2 Jan Blizňák 2014-09-18 06:19:40 EDT
Verified on 6.4.0.DR1

Note You need to log in before you can comment on or make changes to this bug.