[jboss-cvs] Picketlink SVN: r465 - in federation/trunk/picketlink-fed-core/src: main/java/org/picketlink/identity/federation/core/parsers/wst and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Oct 14 11:02:52 EDT 2010


Author: anil.saldhana at 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 at 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() );
    }
 
 }



More information about the jboss-cvs-commits mailing list