private SecurityTokenReferenceType parseSecurityTokenReference(XMLEventReader xmlEventReader) throws ParsingException {
StartElement startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
StaxParserUtil.validate(startElement, WSTrustConstants.WSSE.SECURITY_TOKEN_REFERENCE);
SecurityTokenReferenceType securityTokenRef = new SecurityTokenReferenceType();
// Get the Token Type attribute
QName tokenType = new QName(WSTrustConstants.WSSE11_NS, WSTrustConstants.TOKEN_TYPE);
Attribute tokenTypeAttr = startElement.getAttributeByName(tokenType);
if (tokenTypeAttr != null) {
tokenType = new QName(WSTrustConstants.WSSE11_NS, WSTrustConstants.TOKEN_TYPE, tokenTypeAttr.getName().getPrefix());
securityTokenRef.addOtherAttribute(tokenType, StaxParserUtil.getAttributeValue(tokenTypeAttr));
}
XMLEvent xmlEvent = null;
EndElement endElement = null;
String tag = null;
while (xmlEventReader.hasNext()) {
xmlEvent = StaxParserUtil.peek(xmlEventReader);
if (xmlEvent instanceof EndElement) {
endElement = (EndElement) xmlEvent;
tag = StaxParserUtil.getEndElementName(endElement);
if (tag.equals(WSTrustConstants.WSSE.SECURITY_TOKEN_REFERENCE)) {
endElement = StaxParserUtil.getNextEndElement(xmlEventReader);
break;
} else if (tag.equals(WSTrustConstants.WSSE.REFERENCE)) {
endElement = StaxParserUtil.getNextEndElement(xmlEventReader);
continue;
} else
throw logger.parserUnknownEndElement(tag);
}
startElement = (StartElement) xmlEvent;
tag = StaxParserUtil.getStartElementName(startElement);
if (tag.equals(WSTrustConstants.WSSE.KEY_IDENTIFIER)) {
startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
KeyIdentifierType keyIdentifierType = new KeyIdentifierType();
Attribute valueTypeAttr = startElement.getAttributeByName(new QName(WSTrustConstants.VALUE_TYPE));
if (valueTypeAttr != null)
keyIdentifierType.setValueType(StaxParserUtil.getAttributeValue(valueTypeAttr));
keyIdentifierType.setValue(StaxParserUtil.getElementText(xmlEventReader));
securityTokenRef.addAny(keyIdentifierType);
} else if (tag.equals(WSTrustConstants.WSSE.REFERENCE)) {
startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
ReferenceType referenceType = new ReferenceType();
Attribute valueTypeAttr = startElement.getAttributeByName(new QName(WSTrustConstants.VALUE_TYPE));
if (valueTypeAttr != null) {
referenceType.setValueType(StaxParserUtil.getAttributeValue(valueTypeAttr));
}
Attribute uriAttr = startElement.getAttributeByName(new QName(WSTrustConstants.WSSE.URI));
if (uriAttr != null) {
referenceType.setURI(StaxParserUtil.getAttributeValue(uriAttr));
}
securityTokenRef.addAny(referenceType);
}
}
return securityTokenRef;
}