Author: anil.saldhana(a)jboss.com
Date: 2010-10-14 12:07:45 -0400 (Thu, 14 Oct 2010)
New Revision: 469
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLAssertionParser.java
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLSubjectParser.java
Log:
PLFED-110: saml parsing
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLAssertionParser.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLAssertionParser.java 2010-10-14
15:10:28 UTC (rev 468)
+++
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLAssertionParser.java 2010-10-14
16:07:45 UTC (rev 469)
@@ -35,6 +35,7 @@
import org.picketlink.identity.federation.core.parsers.ParserNamespaceSupport;
import org.picketlink.identity.federation.core.parsers.util.StaxParserUtil;
import org.picketlink.identity.federation.core.saml.v2.constants.JBossSAMLConstants;
+import org.picketlink.identity.federation.core.saml.v2.constants.JBossSAMLURIConstants;
import org.picketlink.identity.federation.saml.v2.assertion.AssertionType;
import org.picketlink.identity.federation.saml.v2.assertion.ConditionsType;
import org.picketlink.identity.federation.saml.v2.assertion.NameIDType;
@@ -70,6 +71,7 @@
XMLEvent xmlEvent = StaxParserUtil.peek( xmlEventReader );
if( xmlEvent == null )
break;
+
if( xmlEvent instanceof EndElement )
{
xmlEvent = StaxParserUtil.getNextEvent( xmlEventReader );
@@ -78,6 +80,7 @@
if( endElementTag.equals( JBossSAMLConstants.ASSERTION.get() ) )
break;
}
+
StartElement peekedElement = null;
if( xmlEvent instanceof StartElement )
@@ -154,9 +157,18 @@
*/
public boolean supports(QName qname)
{
- return false;
+ String nsURI = qname.getNamespaceURI();
+ String localPart = qname.getLocalPart();
+
+ return nsURI.equals( JBossSAMLURIConstants.ASSERTION_NSURI.get() )
+ && localPart.equals( JBossSAMLConstants.ASSERTION.get() );
}
+ /**
+ * We really don't care about the ds:signature stuff for building the object
model
+ * @param xmlEventReader
+ * @throws ParsingException
+ */
private void bypassXMLSignatureBlock( XMLEventReader xmlEventReader ) throws
ParsingException
{
while ( xmlEventReader.hasNext() )
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLSubjectParser.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLSubjectParser.java 2010-10-14
15:10:28 UTC (rev 468)
+++
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLSubjectParser.java 2010-10-14
16:07:45 UTC (rev 469)
@@ -55,27 +55,26 @@
public Object parse(XMLEventReader xmlEventReader) throws ParsingException
{
StaxParserUtil.getNextEvent(xmlEventReader);
-
+
SubjectType subject = new SubjectType();
-
+
//Peek at the next event
while( xmlEventReader.hasNext() )
{
XMLEvent xmlEvent = StaxParserUtil.peek(xmlEventReader);
if( xmlEvent instanceof EndElement )
{
- EndElement endElement = (EndElement) xmlEvent;
- String endElementValue = StaxParserUtil.getEndElementName(endElement);
- if( endElementValue.equalsIgnoreCase( JBossSAMLConstants.SUBJECT.get() ))
+ EndElement endElement = (EndElement) xmlEvent;
+ if( StaxParserUtil.matches(endElement , JBossSAMLConstants.SUBJECT.get() ))
break;
}
-
+
StartElement peekedElement = StaxParserUtil.peekNextStartElement(
xmlEventReader );
if( peekedElement == null )
break;
String tag = StaxParserUtil.getStartElementName( peekedElement );
-
+
if( JBossSAMLConstants.NAMEID.get().equalsIgnoreCase( tag ) )
{
try
@@ -85,50 +84,51 @@
if( nameQualifier == null )
nameQualifier = nameIDElement.getAttributeByName( new QName(
JBossSAMLURIConstants.ASSERTION_NSURI.get(),
JBossSAMLConstants.NAME_QUALIFIER.get() ));
-
+
String nameIDValue = xmlEventReader.getElementText();
-
+
NameIDType nameID = new NameIDType();
nameID.setValue( nameIDValue );
if( nameQualifier != null )
{
nameID.setNameQualifier(
StaxParserUtil.getAttributeValue(nameQualifier) );
}
-
+
JAXBElement<NameIDType> jaxbNameID = objectFactory.createNameID(
nameID );
subject.getContent().add( jaxbNameID );
-
+
//There is no need to get the end tag as the "getElementText"
call above puts us past that
}
catch (XMLStreamException e)
{
- throw new ParsingException( e );
+ throw new ParsingException( e );
}
}
else if( JBossSAMLConstants.SUBJECT_CONFIRMATION.get().equalsIgnoreCase( tag )
)
{
- StartElement subjectConfirmationElement =
StaxParserUtil.getNextStartElement( xmlEventReader );
- Attribute method = subjectConfirmationElement.getAttributeByName( new
QName( "", JBossSAMLConstants.METHOD.get() ));
- if( method == null )
- method = subjectConfirmationElement.getAttributeByName( new QName(
JBossSAMLURIConstants.ASSERTION_NSURI.get(),
- JBossSAMLConstants.METHOD.get() ));
-
- SubjectConfirmationType subjectConfirmationType = new
SubjectConfirmationType();
-
- if( method != null )
- {
- subjectConfirmationType.setMethod( StaxParserUtil.getAttributeValue(
method ) );
- }
-
- JAXBElement<SubjectConfirmationType> jaxbSubjectConf =
objectFactory.createSubjectConfirmation( subjectConfirmationType );
- subject.getContent().add(jaxbSubjectConf);
-
- //Get the end tag
- StaxParserUtil.getNextEvent(xmlEventReader);
+ StartElement subjectConfirmationElement = StaxParserUtil.getNextStartElement(
xmlEventReader );
+ Attribute method = subjectConfirmationElement.getAttributeByName( new QName(
"", JBossSAMLConstants.METHOD.get() ));
+ if( method == null )
+ method = subjectConfirmationElement.getAttributeByName( new QName(
JBossSAMLURIConstants.ASSERTION_NSURI.get(),
+ JBossSAMLConstants.METHOD.get() ));
+
+ SubjectConfirmationType subjectConfirmationType = new
SubjectConfirmationType();
+
+ if( method != null )
+ {
+ subjectConfirmationType.setMethod( StaxParserUtil.getAttributeValue(
method ) );
+ }
+
+ JAXBElement<SubjectConfirmationType> jaxbSubjectConf =
objectFactory.createSubjectConfirmation( subjectConfirmationType );
+ subject.getContent().add(jaxbSubjectConf);
+
+ //Get the end tag
+ EndElement endElement = (EndElement)
StaxParserUtil.getNextEvent(xmlEventReader);
+ StaxParserUtil.matches(endElement,
JBossSAMLConstants.SUBJECT_CONFIRMATION.get() );
}
else throw new RuntimeException( "Unknown tag:" + tag );
}
-
+
return subject;
}
Show replies by date