protected CorbaObjectHandler readObjectReferenceFromStax(XMLEventReader reader,
QName idlType,
TypeCode tc,
XmlSchemaObject schemaType) {
CorbaObjectReferenceHandler obj = null;
try {
Object objType = (Object)CorbaUtils.getCorbaType(idlType, typeMaps);
StartElement objStartEl = reader.nextEvent().asStartElement();
obj = new CorbaObjectReferenceHandler(objStartEl.getName(), idlType, tc, objType);
while (true) {
// Try to get the next event as a start element. We should have a start element
// directly after the objects start if the object reference is valie. If it
// isn't, the generated exception should be caught below.
StartElement startEl = reader.nextEvent().asStartElement();
if (startEl.getName().getLocalPart().equals("Metadata")) {
while (true) {
StartElement metaEl = reader.nextEvent().asStartElement();
if (metaEl.getName().getLocalPart().equals("InterfaceName")) {
Characters intfChars = reader.nextEvent().asCharacters();
// TODO: How do we want to handle this information
} else if (metaEl.getName().getLocalPart().equals("ServiceName")) {
Characters svcChars = reader.nextEvent().asCharacters();
// TODO: How do we want to handle this information
}
reader.nextEvent().asEndElement();
if (reader.peek().isEndElement()) {
break;
}
}
} else if (startEl.getName().getLocalPart().equals("Address")) {
Characters addrChars = reader.nextEvent().asCharacters();
org.omg.CORBA.Object ref =
CorbaObjectReferenceHelper.getReferenceById(addrChars.getData());
obj.setReference(ref);
}
reader.nextEvent().asEndElement();
if (reader.peek().isEndElement()) {
// Two end elements in a row at this point should mean we've hit the end