QName objIdlType = new QName(staxTestNamespaceURI, "TestUnion", staxTestPrefix);
CorbaTypeImpl type = CorbaUtils.getCorbaType(objIdlType, staxBindingImpl.getCorbaTypeMaps());
assertTrue(type instanceof Union);
Union unionType = (Union)type;
TypeCode objTypeCode = CorbaUtils.getTypeCode(orb, objIdlType, staxBindingImpl.getCorbaTypeMaps());
CorbaUnionHandler obj = new CorbaUnionHandler(objName, objIdlType, objTypeCode, unionType);
assertNotNull(obj);
Character unionValue = new Character('u');
TypeCode unionValueTC = CorbaUtils.getTypeCode(orb, CorbaConstants.NT_CORBA_WCHAR,
staxBindingImpl.getCorbaTypeMaps());
CorbaPrimitiveHandler unionValueObj = new CorbaPrimitiveHandler(new QName("case12"),
CorbaConstants.NT_CORBA_WCHAR,
unionValueTC,
null);
unionValueObj.setValue(unionValue);
Short discriminatorValue = new Short((short)1);
TypeCode discriminatorTC = CorbaUtils.getTypeCode(orb, unionType.getDiscriminator(),
staxBindingImpl.getCorbaTypeMaps());
CorbaPrimitiveHandler discriminator = new CorbaPrimitiveHandler(new QName("discriminator"),
unionType.getDiscriminator(),
discriminatorTC,
null);
discriminator.setValue(discriminatorValue);
obj.setDiscriminator(discriminator);
obj.setValue("1", unionValueObj);
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
XMLEventWriter evtWriter = null;
try {
evtWriter = outputFactory.createXMLEventWriter(outStream);
} catch (XMLStreamException ex) {
}
assertNotNull(evtWriter);
try {
XMLEventFactory factory = XMLEventFactory.newInstance();
StartElement startEl = factory.createStartElement(obj.getName(), null, null);
evtWriter.add(startEl);
staxBindingImpl.writeUnionToStax(obj, evtWriter, factory);
EndElement endEl = factory.createEndElement(obj.getName(), null);
evtWriter.add(endEl);
evtWriter.flush();
} catch (XMLStreamException ex) {
}
ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
XMLEventReader evtReader = null;
try {
evtReader = inputFactory.createXMLEventReader(inStream);
// read the first tag which should be a start document
XMLEvent evt = evtReader.nextEvent();
assertTrue(evt.isStartDocument());
} catch (XMLStreamException ex) {
}
assertNotNull(evtReader);
CorbaObjectHandler resultObj = staxBindingImpl.readUnionFromStax(evtReader,
obj.getIdlType(),
obj.getTypeCode());
assertNotNull(resultObj);
assertTrue(resultObj instanceof CorbaUnionHandler);
CorbaUnionHandler result = (CorbaUnionHandler)resultObj;
CorbaObjectHandler resultDiscriminatorObj = result.getDiscriminator();
assertTrue(resultDiscriminatorObj instanceof CorbaPrimitiveHandler);
CorbaPrimitiveHandler resultDiscriminator = (CorbaPrimitiveHandler)resultDiscriminatorObj;
Object resultDiscValueObj = resultDiscriminator.getValue();
assertTrue(resultDiscValueObj instanceof Short);
Short resultDiscValue = (Short)resultDiscValueObj;
assertTrue(resultDiscValue.shortValue() == discriminatorValue.shortValue());
CorbaObjectHandler resultValueObj = result.getValue();
assertTrue(resultValueObj instanceof CorbaPrimitiveHandler);
CorbaPrimitiveHandler resultValue = (CorbaPrimitiveHandler)resultValueObj;
Object unionResultValueObj = resultValue.getValue();
assertTrue(unionResultValueObj instanceof Character);
Character unionResultValue = (Character)unionResultValueObj;