Author: anil.saldhana(a)jboss.com
Date: 2010-10-14 11:02:51 -0400 (Thu, 14 Oct 2010)
New Revision: 465
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/StaxParserUtil.java
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenCollectionParser.java
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenParser.java
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTrustParser.java
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/wstrust/WSTrustConstants.java
federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/wst/WSTrustBatchValidateParsingTestCase.java
Log:
PLFED-109: wst stax parsing
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/StaxParserUtil.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/StaxParserUtil.java 2010-10-14
15:02:21 UTC (rev 464)
+++
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/StaxParserUtil.java 2010-10-14
15:02:51 UTC (rev 465)
@@ -53,6 +53,24 @@
}
/**
+ * Get the element text.
+ * @param xmlEventReader
+ * @return A <b>trimmed</b> string value
+ * @throws ParsingException
+ */
+ public static String getElementText( XMLEventReader xmlEventReader ) throws
ParsingException
+ {
+ try
+ {
+ return xmlEventReader.getElementText().trim();
+ }
+ catch (XMLStreamException e)
+ {
+ throw new ParsingException( e );
+ }
+ }
+
+ /**
* Get the XML event reader
* @param is
* @return
@@ -91,6 +109,12 @@
return builder.toString();
}
+ /**
+ * Get the next xml event
+ * @param xmlEventReader
+ * @return
+ * @throws ParsingException
+ */
public static XMLEvent getNextEvent( XMLEventReader xmlEventReader ) throws
ParsingException
{
try
@@ -173,6 +197,37 @@
return trim( endElement.getName().getLocalPart() );
}
+
+ /**
+ * Match that the start element with the expected tag
+ * @param startElement
+ * @param tag
+ * @return boolean if the tags match
+ */
+ public static boolean matches( StartElement startElement, String tag )
+ {
+ String elementTag = getStartElementName( startElement );
+ return tag.equals( elementTag );
+ }
+
+ /**
+ * Match that the end element with the expected tag
+ * @param endElement
+ * @param tag
+ * @return boolean if the tags match
+ */
+ public static boolean matches( EndElement endElement, String tag )
+ {
+ String elementTag = getEndElementName( endElement );
+ return tag.equals( elementTag );
+ }
+
+ /**
+ * Peek at the next event
+ * @param xmlEventReader
+ * @return
+ * @throws ParsingException
+ */
public static XMLEvent peek( XMLEventReader xmlEventReader ) throws ParsingException
{
try
@@ -249,4 +304,30 @@
throw new IllegalArgumentException("Input str is null");
return str.trim();
}
+
+ /**
+ * Validate that the start element has the expected tag
+ * @param startElement
+ * @param tag
+ * @throws RuntimeException mismatch
+ */
+ public static void validate( StartElement startElement, String tag )
+ {
+ String elementTag = getStartElementName( startElement );
+ if( !tag.equals( elementTag ))
+ throw new RuntimeException( "Expecting <" + tag + ">.
Found <" + elementTag + ">" );
+ }
+
+ /**
+ * Validate that the end element has the expected tag
+ * @param endElement
+ * @param tag
+ * @throws RuntimeException mismatch
+ */
+ public static void validate( EndElement endElement, String tag )
+ {
+ String elementTag = getEndElementName( endElement );
+ if( !tag.equals( elementTag ))
+ throw new RuntimeException( "Expecting <" + tag + ">.
Found <" + elementTag + ">" );
+ }
}
\ No newline at end of file
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenCollectionParser.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenCollectionParser.java 2010-10-14
15:02:21 UTC (rev 464)
+++
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenCollectionParser.java 2010-10-14
15:02:51 UTC (rev 465)
@@ -39,9 +39,10 @@
* @since Oct 11, 2010
*/
public class WSTRequestSecurityTokenCollectionParser implements ParserNamespaceSupport
-{
- public static final String LOCALPART = "RequestSecurityTokenCollection";
-
+{
+ /**
+ * @see {@link ParserNamespaceSupport#parse(XMLEventReader)}
+ */
public Object parse( XMLEventReader xmlEventReader ) throws ParsingException
{
try
@@ -53,19 +54,18 @@
throw new ParsingException( e );
}
- RequestSecurityTokenCollection requestCollection = new
RequestSecurityTokenCollection();
+ RequestSecurityTokenCollection requestCollection = new
RequestSecurityTokenCollection();
-
//Peek at the next event
while( true )
{
StartElement peekedElement = StaxParserUtil.peekNextStartElement( xmlEventReader
);
- if( peekedElement == null )
- break;
-
+ if( peekedElement == null )
+ break;
+
String tag = StaxParserUtil.getStartElementName( peekedElement );
- if( WSTRequestSecurityTokenParser.LOCALPART.equalsIgnoreCase( tag ) )
+ if( WSTrustConstants.RST.equalsIgnoreCase( tag ) )
{
WSTRequestSecurityTokenParser rstParser = new
WSTRequestSecurityTokenParser();
RequestSecurityToken rst = ( RequestSecurityToken ) rstParser.parse(
xmlEventReader );
@@ -75,9 +75,12 @@
return requestCollection;
}
+ /**
+ * @see {@link ParserNamespaceSupport#supports(QName)}
+ */
public boolean supports( QName qname )
{
return ( qname.getNamespaceURI().equals( WSTrustConstants.BASE_NAMESPACE )
- && qname.getLocalPart().equals(
WSTRequestSecurityTokenCollectionParser.LOCALPART ) );
+ && qname.getLocalPart().equals( WSTrustConstants.RST_COLLECTION ) );
}
}
\ No newline at end of file
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenParser.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenParser.java 2010-10-14
15:02:21 UTC (rev 464)
+++
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTRequestSecurityTokenParser.java 2010-10-14
15:02:51 UTC (rev 465)
@@ -37,6 +37,7 @@
import org.picketlink.identity.federation.core.parsers.util.StaxParserUtil;
import org.picketlink.identity.federation.core.wstrust.WSTrustConstants;
import org.picketlink.identity.federation.core.wstrust.wrappers.RequestSecurityToken;
+import org.picketlink.identity.federation.ws.trust.ValidateTargetType;
/**
* Parse the WS-Trust RequestSecurityToken
@@ -44,9 +45,10 @@
* @since Oct 11, 2010
*/
public class WSTRequestSecurityTokenParser implements ParserNamespaceSupport
-{
- public static final String LOCALPART = "RequestSecurityToken";
-
+{
+ /**
+ * @see {@link ParserNamespaceSupport#parse(XMLEventReader)}
+ */
public Object parse(XMLEventReader xmlEventReader) throws ParsingException
{
StartElement startElement = StaxParserUtil.getNextStartElement( xmlEventReader );
@@ -58,8 +60,20 @@
String contextValue = StaxParserUtil.getAttributeValue( contextAttribute );
requestToken.setContext( contextValue );
- while( true )
+ while( xmlEventReader.hasNext() )
{
+ XMLEvent xmlEvent = StaxParserUtil.peek( xmlEventReader );
+ if( xmlEvent == null )
+ break;
+ if( xmlEvent instanceof EndElement )
+ {
+ xmlEvent = StaxParserUtil.getNextEvent( xmlEventReader );
+ EndElement endElement = (EndElement) xmlEvent;
+ String endElementTag = StaxParserUtil.getEndElementName( endElement );
+ if( endElementTag.equals( WSTrustConstants.RST ) )
+ break;
+ }
+
try
{
StartElement subEvent = StaxParserUtil.getNextStartElement( xmlEventReader
);
@@ -70,21 +84,22 @@
if( tag.equals( WSTrustConstants.REQUEST_TYPE ))
{
String value = xmlEventReader.getElementText();
- requestToken.setRequestType( new URI( value ));
+ requestToken.setRequestType( new URI( value ));
}
else if( tag.equals( WSTrustConstants.TOKEN_TYPE ))
{
String value = xmlEventReader.getElementText();
requestToken.setTokenType( new URI( value ));
}
-
- XMLEvent xmlEvent = xmlEventReader.peek();
- if( xmlEvent.isEndElement() )
+ else if( tag.equals( WSTrustConstants.VALIDATE_TARGET ))
{
- EndElement endElement = (EndElement) xmlEvent;
- if( StaxParserUtil.getEndElementName( endElement ).equalsIgnoreCase(
WSTrustConstants.RST ) )
- break;
- }
+ WSTValidateTargetParser wstValidateTargetParser = new
WSTValidateTargetParser();
+ ValidateTargetType validateTarget = (ValidateTargetType)
wstValidateTargetParser.parse( xmlEventReader );
+ requestToken.setValidateTarget( validateTarget );
+ EndElement validateTargetEndElement =
StaxParserUtil.getNextEndElement(xmlEventReader);
+ if( !StaxParserUtil.getEndElementName( validateTargetEndElement ).equals(
WSTrustConstants.VALIDATE_TARGET ) )
+ throw new RuntimeException( "</" +
WSTrustConstants.VALIDATE_TARGET + "> expected" );
+ }
}
catch( XMLStreamException e )
{
@@ -99,6 +114,9 @@
return requestToken;
}
+ /**
+ * @see {@link ParserNamespaceSupport#supports(QName)}
+ */
public boolean supports(QName qname)
{
return false;
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTrustParser.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTrustParser.java 2010-10-14
15:02:21 UTC (rev 464)
+++
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/wst/WSTrustParser.java 2010-10-14
15:02:51 UTC (rev 465)
@@ -63,11 +63,16 @@
StartElement startElement = (StartElement) xmlEvent;
String elementName = StaxParserUtil.getStartElementName( startElement );
- if( elementName.equalsIgnoreCase(
WSTRequestSecurityTokenCollectionParser.LOCALPART ))
+ if( elementName.equalsIgnoreCase( WSTrustConstants.RST_COLLECTION ))
{
WSTRequestSecurityTokenCollectionParser wstrcoll = new
WSTRequestSecurityTokenCollectionParser();
return wstrcoll.parse(xmlEventReader);
}
+ else if( elementName.equalsIgnoreCase( WSTrustConstants.RST ))
+ {
+ WSTRequestSecurityTokenParser wst = new WSTRequestSecurityTokenParser();
+ return wst.parse(xmlEventReader);
+ }
}
else
{
@@ -81,7 +86,7 @@
}
}
}
- return null;
+ throw new RuntimeException( "WSTrust Parsing has failed" );
}
/**
Modified:
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/wstrust/WSTrustConstants.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/wstrust/WSTrustConstants.java 2010-10-14
15:02:21 UTC (rev 464)
+++
federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/wstrust/WSTrustConstants.java 2010-10-14
15:02:51 UTC (rev 465)
@@ -40,6 +40,7 @@
public static final String RENEW_REQUEST = BASE_NAMESPACE + "/Renew";
public static final String CANCEL_REQUEST = BASE_NAMESPACE + "/Cancel";
public static final String VALIDATE_REQUEST = BASE_NAMESPACE + "/Validate";
+ public static final String BATCH_VALIDATE_REQUEST = BASE_NAMESPACE +
"/BatchValidate";
// WS-Trust validation constants.
public static final String STATUS_TYPE = BASE_NAMESPACE + "/RSTR/Status";
@@ -76,9 +77,11 @@
//Token Types
public static final String SAML2_TOKEN_TYPE =
"http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0";
+ public static final String RSTR_STATUS_TOKEN_TYPE =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTR/Status";
//Element Names
public static final String RST = "RequestSecurityToken";
+ public static final String RST_COLLECTION =
"RequestSecurityTokenCollection";
public static final String REQUEST_TYPE = "RequestType";
public static final String TOKEN_TYPE = "TokenType";
public static final String VALIDATE_TARGET = "ValidateTarget";
Modified:
federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/wst/WSTrustBatchValidateParsingTestCase.java
===================================================================
---
federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/wst/WSTrustBatchValidateParsingTestCase.java 2010-10-14
15:02:21 UTC (rev 464)
+++
federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/wst/WSTrustBatchValidateParsingTestCase.java 2010-10-14
15:02:51 UTC (rev 465)
@@ -27,7 +27,6 @@
import java.io.InputStream;
import java.util.List;
-import org.junit.Ignore;
import org.junit.Test;
import org.picketlink.identity.federation.core.parsers.wst.WSTrustParser;
import org.picketlink.identity.federation.core.wstrust.WSTrustConstants;
@@ -35,13 +34,13 @@
import
org.picketlink.identity.federation.core.wstrust.wrappers.RequestSecurityTokenCollection;
/**
+ * Validate the parsing of wst-batch-validate.xml
* @author Anil.Saldhana(a)redhat.com
* @since Oct 12, 2010
*/
public class WSTrustBatchValidateParsingTestCase
{
- @Test
- @Ignore
+ @Test
public void testWST_BatchValidate() throws Exception
{
ClassLoader tcl = Thread.currentThread().getContextClassLoader();
@@ -54,15 +53,15 @@
List<RequestSecurityToken> tokens =
requestCollection.getRequestSecurityTokens();
assertEquals( 2, tokens.size() );
- /*RequestSecurityToken rst1 = tokens.get( 0 );
- assertEquals( "context1", rst1.getContext() );
- assertEquals( WSTrustConstants.BATCH_ISSUE_REQUEST,
rst1.getRequestType().toASCIIString() );
- assertEquals( WSTrustConstants.SAML2_TOKEN_TYPE,
rst1.getTokenType().toASCIIString() );
+ RequestSecurityToken rst1 = tokens.get( 0 );
+ assertEquals( "validatecontext1", rst1.getContext() );
+ assertEquals( WSTrustConstants.BATCH_VALIDATE_REQUEST,
rst1.getRequestType().toASCIIString() );
+ assertEquals( WSTrustConstants.RSTR_STATUS_TOKEN_TYPE,
rst1.getTokenType().toASCIIString() );
RequestSecurityToken rst2 = tokens.get( 1 );
- assertEquals( "context2", rst2.getContext() );
- assertEquals( WSTrustConstants.BATCH_ISSUE_REQUEST ,
rst2.getRequestType().toASCIIString() );
- assertEquals( "http://www.tokens.org/SpecialToken" ,
rst2.getTokenType().toASCIIString() ); */
+ assertEquals( "validatecontext2", rst2.getContext() );
+ assertEquals( WSTrustConstants.BATCH_VALIDATE_REQUEST ,
rst2.getRequestType().toASCIIString() );
+ assertEquals( WSTrustConstants.RSTR_STATUS_TOKEN_TYPE ,
rst2.getTokenType().toASCIIString() );
}
}