You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by na...@apache.org on 2010/09/20 08:23:36 UTC

svn commit: r998793 - in /axis/axis2/java/rampart/trunk/modules: rampart-core/src/main/java/org/apache/rampart/ rampart-tests/src/test/java/org/apache/rahas/ rampart-trust/src/main/java/org/apache/rahas/

Author: nandana
Date: Mon Sep 20 06:23:35 2010
New Revision: 998793

URL: http://svn.apache.org/viewvc?rev=998793&view=rev
Log:
RAMPART-304 Applying the patch. Thanks Amila

Modified:
    axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java
    axis/axis2/java/rampart/trunk/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java
    axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/EncryptedKeyToken.java
    axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
    axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java

Modified: axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java?rev=998793&r1=998792&r2=998793&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java Mon Sep 20 06:23:35 2010
@@ -56,6 +56,7 @@ import org.apache.ws.security.util.WSSec
 import org.opensaml.SAMLAssertion;
 import org.w3c.dom.Document;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Vector;
 import java.util.ArrayList;
@@ -621,18 +622,17 @@ public class RampartMessageData {
             return this.tokenStorage;
         }
 
-        TokenStorage storage = (TokenStorage) this.msgContext.getProperty(
+        TokenStorage storage = (TokenStorage) this.msgContext.getConfigurationContext().getProperty(
                         TokenStorage.TOKEN_STORAGE_KEY);
 
         if (storage != null) {
             this.tokenStorage = storage;
         } else {
-
             if (this.policyData.getRampartConfig() != null &&
                     this.policyData.getRampartConfig().getTokenStoreClass() != null) {
                 Class stClass = null;
                 String storageClass = this.policyData.getRampartConfig()
-                        .getTokenStoreClass(); 
+                        .getTokenStoreClass();
                 try {
                     stClass = Loader.loadClass(msgContext.getAxisService()
                             .getClassLoader(), storageClass);

Modified: axis/axis2/java/rampart/trunk/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java?rev=998793&r1=998792&r2=998793&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java Mon Sep 20 06:23:35 2010
@@ -16,11 +16,19 @@
 
 package org.apache.rahas;
 
-import junit.framework.TestCase;
+import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
 
+import junit.framework.TestCase;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.util.Date;
 
 public class SimpleTokenStoreTest extends TestCase {
@@ -30,8 +38,7 @@ public class SimpleTokenStoreTest extend
         try {
             store.add(getTestToken("id-1"));
         } catch (TrustException e) {
-            fail("Adding a new token to an empty store should not fail, " +
-                 "message : " + e.getMessage());
+            fail("Adding a new token to an empty store should not fail, " + "message : " + e.getMessage());
         }
         Token token = null;
         try {
@@ -40,8 +47,7 @@ public class SimpleTokenStoreTest extend
             fail("Adding an existing token must throw an exception");
         } catch (TrustException e) {
             assertEquals("Incorrect exception message",
-                         TrustException.getMessage("tokenAlreadyExists",
-                                                   new String[]{token.getId()}), e.getMessage());
+                         TrustException.getMessage("tokenAlreadyExists", new String[]{token.getId()}), e.getMessage());
         }
     }
 
@@ -76,9 +82,8 @@ public class SimpleTokenStoreTest extend
             store.update(token1);
             fail("An exception must be thrown at this point : noTokenToUpdate");
         } catch (TrustException e) {
-            assertEquals("Incorrect exception message", TrustException
-                    .getMessage("noTokenToUpdate", new String[]{token1
-                    .getId()}), e.getMessage());
+            assertEquals("Incorrect exception message",
+                         TrustException.getMessage("noTokenToUpdate", new String[]{token1.getId()}), e.getMessage());
         }
         try {
             store.add(token1);
@@ -133,11 +138,13 @@ public class SimpleTokenStoreTest extend
         }
     }
 
-    private Token getTestToken(String tokenId) throws TrustException {
+    private Token getTestToken(String tokenId)
+        throws TrustException {
         return getTestToken(tokenId, new Date());
     }
 
-    private Token getTestToken(String tokenId, Date expiry) throws TrustException {
+    private Token getTestToken(String tokenId, Date expiry)
+        throws TrustException {
         OMFactory factory = DOOMAbstractFactory.getOMFactory();
         OMElement tokenEle = factory.createOMElement("testToken", "", "");
         Token token = new Token(tokenId, tokenEle, new Date(), expiry);
@@ -147,4 +154,48 @@ public class SimpleTokenStoreTest extend
         token.setSecret("Top secret!".getBytes());
         return token;
     }
+
+    public void testSerialize()
+        throws Exception {
+        String fileName = "test.ser";
+
+        OMFactory factory = OMAbstractFactory.getOMFactory();
+        OMNamespace ns1 = factory.createOMNamespace("bar", "x");
+        OMElement elt11 = factory.createOMElement("foo1", ns1);
+
+        Token t = new Token("#1232122", elt11, new Date(), new Date());
+
+        SimpleTokenStore store = new SimpleTokenStore();
+        store.add(t);
+
+        FileOutputStream fos = null;
+        ObjectOutputStream out = null;
+
+        try {
+            fos = new FileOutputStream(fileName);
+            out = new ObjectOutputStream(fos);
+            out.writeObject(store);
+        } finally {
+            out.close();
+        }
+
+        SimpleTokenStore store2 = null;
+        FileInputStream fis = null;
+        ObjectInputStream in = null;
+        try {
+            fis = new FileInputStream(fileName);
+            in = new ObjectInputStream(fis);
+            store2 = (SimpleTokenStore)in.readObject();
+            in.close();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (ClassNotFoundException ex) {
+            ex.printStackTrace();
+        }
+
+        assertEquals(store.getToken("#1232122").getId(), store2.getToken("#1232122").getId());
+        assertEquals(store.getToken("#1232122").getCreated(), store2.getToken("#1232122").getCreated());
+
+    }
+
 }

Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/EncryptedKeyToken.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/EncryptedKeyToken.java?rev=998793&r1=998792&r2=998793&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/EncryptedKeyToken.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/EncryptedKeyToken.java Mon Sep 20 06:23:35 2010
@@ -16,6 +16,9 @@
 
 package org.apache.rahas;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.Date;
 
 import org.apache.axiom.om.OMElement;
@@ -35,6 +38,10 @@ public class EncryptedKeyToken extends T
      * SHA1 value of the encrypted key
      */
     private String sha;
+
+    public EncryptedKeyToken(){
+        super();
+    }
 	
 	public EncryptedKeyToken (String id,Date created, Date expires) {
 		super(id,created,expires);
@@ -59,4 +66,20 @@ public class EncryptedKeyToken extends T
 		return sha;
 	}
 
+    public void writeExternal(ObjectOutput out)
+        throws IOException {
+
+        super.writeExternal(out);
+        out.writeObject(this.sha);
+    }
+
+    public void readExternal(ObjectInput in)
+        throws ClassNotFoundException, IOException {
+
+        super.readExternal(in);
+        this.sha = (String)in.readObject();
+
+    }
+
+
 }

Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java?rev=998793&r1=998792&r2=998793&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java Mon Sep 20 06:23:35 2010
@@ -21,6 +21,8 @@ import org.apache.ws.security.WSConstant
 import org.apache.ws.security.message.token.Reference;
 
 import javax.xml.namespace.QName;
+
+import java.io.Serializable;
 import java.util.*;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
@@ -29,7 +31,7 @@ import java.util.concurrent.locks.Reentr
 /**
  * In-memory implementation of the token storage
  */
-public class SimpleTokenStore implements TokenStorage {
+public class SimpleTokenStore implements TokenStorage, Serializable {
 
     protected Map tokens = new Hashtable();
     
@@ -185,8 +187,7 @@ public class SimpleTokenStore implements
         
         } finally {
             readLock.unlock();
-        }
-      
+        }        
         return token;
     }
 

Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java?rev=998793&r1=998792&r2=998793&view=diff
==============================================================================
--- axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java (original)
+++ axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java Mon Sep 20 06:23:35 2010
@@ -18,164 +18,167 @@ package org.apache.rahas;
 
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.util.XmlSchemaDateFormat;
 
 import javax.xml.namespace.QName;
-
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import java.io.ByteArrayInputStream;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.UnsupportedEncodingException;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.util.Date;
 import java.util.Properties;
 
 /**
- * This represents a security token which can have either one of 4 states.
- * <ul>
- * <li>ISSUED</li>
- * <li>EXPIRED</li>
- * <li>CACELLED</li>
- * <li>RENEWED</li>
- * </ul>
- * Also this holds the <code>OMElement</code>s representing the token in its 
+ * This represents a security token which can have either one of 4 states. <ul> <li>ISSUED</li> <li>EXPIRED</li>
+ * <li>CACELLED</li> <li>RENEWED</li> </ul> Also this holds the <code>OMElement</code>s representing the token in its
  * present state and the previous state.
- * 
- * These tokens are stored using the storage mechanism provided via the 
- * <code>TokenStorage</code> interface.
+ * <p/>
+ * These tokens are stored using the storage mechanism provided via the <code>TokenStorage</code> interface.
+ *
  * @see org.apache.rahas.TokenStorage
  */
-public class Token {
-    
+public class Token implements Externalizable {
+
+    private static Log log = LogFactory.getLog(Token.class);
+
     public final static int ISSUED = 1;
+
     public final static int EXPIRED = 2;
+
     public final static int CANCELLED = 3;
+
     public final static int RENEWED = 4;
-    
+
     /**
      * Token identifier
      */
     private String id;
-    
+
     /**
      * Current state of the token
      */
     private int state = -1;
-    
+
     /**
      * The actual token in its current state
      */
     private OMElement token;
-    
+
     /**
      * The token in its previous state
      */
     private OMElement previousToken;
-    
+
     /**
-     * The RequestedAttachedReference element
-     * NOTE : The oasis-200401-wss-soap-message-security-1.0 spec allows 
-     * an extensibility mechanism for wsse:SecurityTokenReference and 
-     * wsse:Reference. Hence we cannot limit to the 
-     * wsse:SecurityTokenReference\wsse:Reference case and only hold the URI and 
-     * the ValueType values.
+     * The RequestedAttachedReference element NOTE : The oasis-200401-wss-soap-message-security-1.0 spec allows an
+     * extensibility mechanism for wsse:SecurityTokenReference and wsse:Reference. Hence we cannot limit to the
+     * wsse:SecurityTokenReference\wsse:Reference case and only hold the URI and the ValueType values.
      */
     private OMElement attachedReference;
-    
+
     /**
-     * The RequestedUnattachedReference element
-     * NOTE : The oasis-200401-wss-soap-message-security-1.0 spec allows 
-     * an extensibility mechanism for wsse:SecurityTokenRefence and 
-     * wsse:Reference. Hence we cannot limit to the 
-     * wsse:SecurityTokenReference\wsse:Reference case and only hold the URI and 
-     * the ValueType values.
+     * The RequestedUnattachedReference element NOTE : The oasis-200401-wss-soap-message-security-1.0 spec allows an
+     * extensibility mechanism for wsse:SecurityTokenRefence and wsse:Reference. Hence we cannot limit to the
+     * wsse:SecurityTokenReference\wsse:Reference case and only hold the URI and the ValueType values.
      */
     private OMElement unattachedReference;
-    
+
     /**
      * A bag to hold any other properties
      */
-    private Properties  properties;
+    private Properties properties;
 
     /**
      * A flag to assist the TokenStorage
      */
     private boolean changed;
-    
+
     /**
      * The secret associated with the Token
      */
     private byte[] secret;
-    
+
     /**
      * Created time
      */
     private Date created;
-    
+
     /**
      * Expiration time
      */
     private Date expires;
-    
+
     /**
      * Issuer end point address
      */
     private String issuerAddress;
-    
+
     private String encrKeySha1Value;
-    
+
+    public Token() {
+    }
+
     public Token(String id, Date created, Date expires) {
-    	this.id = id;
-    	this.created = created;
-    	this.expires = expires;
-    }
-    
-    public Token(String id,
-                 OMElement tokenElem,
-                 Date created,
-                 Date expires) throws TrustException {
         this.id = id;
-        StAXOMBuilder stAXOMBuilder = new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(),
-                tokenElem.getXMLStreamReader());
+        this.created = created;
+        this.expires = expires;
+    }
+
+    public Token(String id, OMElement tokenElem, Date created, Date expires)
+        throws TrustException {
+        this.id = id;
+        StAXOMBuilder stAXOMBuilder =
+            new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(), tokenElem.getXMLStreamReader());
         stAXOMBuilder.setNamespaceURIInterning(true);
         this.token = stAXOMBuilder.getDocumentElement();
         this.created = created;
         this.expires = expires;
     }
 
-    public Token(String id,
-                 OMElement tokenElem,
-                 OMElement lifetimeElem) throws TrustException {
+    public Token(String id, OMElement tokenElem, OMElement lifetimeElem)
+        throws TrustException {
         this.id = id;
-        StAXOMBuilder stAXOMBuilder = new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(),
-                tokenElem.getXMLStreamReader());
+        StAXOMBuilder stAXOMBuilder =
+            new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(), tokenElem.getXMLStreamReader());
         stAXOMBuilder.setNamespaceURIInterning(true);
         this.token = stAXOMBuilder.getDocumentElement();
         this.processLifeTime(lifetimeElem);
     }
-    
+
     /**
      * @param lifetimeElem
-     * @throws TrustException 
+     * @throws TrustException
      */
-    private void processLifeTime(OMElement lifetimeElem) throws TrustException {
+    private void processLifeTime(OMElement lifetimeElem)
+        throws TrustException {
         try {
             DateFormat zulu = new XmlSchemaDateFormat();
             OMElement createdElem =
-                    lifetimeElem.getFirstChildWithName(new QName(WSConstants.WSU_NS,
-                                                                 WSConstants.CREATED_LN));
+                lifetimeElem.getFirstChildWithName(new QName(WSConstants.WSU_NS, WSConstants.CREATED_LN));
             this.created = zulu.parse(createdElem.getText());
-            
+
             OMElement expiresElem =
-                    lifetimeElem.getFirstChildWithName(new QName(WSConstants.WSU_NS,
-                                                                 WSConstants.EXPIRES_LN));
+                lifetimeElem.getFirstChildWithName(new QName(WSConstants.WSU_NS, WSConstants.EXPIRES_LN));
             this.expires = zulu.parse(expiresElem.getText());
         } catch (OMException e) {
-            throw new TrustException("lifeTimeProcessingError",
-                                     new String[]{lifetimeElem.toString()}, e);
+            throw new TrustException("lifeTimeProcessingError", new String[]{lifetimeElem.toString()}, e);
         } catch (ParseException e) {
-            throw new TrustException("lifeTimeProcessingError",
-                                     new String[]{lifetimeElem.toString()}, e);
+            throw new TrustException("lifeTimeProcessingError", new String[]{lifetimeElem.toString()}, e);
         }
     }
 
@@ -192,7 +195,7 @@ public class Token {
     public void setChanged(boolean chnaged) {
         this.changed = chnaged;
     }
-    
+
     /**
      * @return Returns the properties.
      */
@@ -253,8 +256,8 @@ public class Token {
      * @param presivousToken The presivousToken to set.
      */
     public void setPreviousToken(OMElement presivousToken) {
-        this.previousToken = new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(),
-                presivousToken.getXMLStreamReader()).getDocumentElement();
+        this.previousToken = new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(), presivousToken.getXMLStreamReader())
+            .getDocumentElement();
     }
 
     /**
@@ -282,9 +285,9 @@ public class Token {
      * @param attachedReference The attachedReference to set.
      */
     public void setAttachedReference(OMElement attachedReference) {
-        if(attachedReference != null) {
-            this.attachedReference = new StAXOMBuilder(DOOMAbstractFactory
-                    .getOMFactory(), attachedReference.getXMLStreamReader())
+        if (attachedReference != null) {
+            this.attachedReference =
+                new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(), attachedReference.getXMLStreamReader())
                     .getDocumentElement();
         }
     }
@@ -300,9 +303,9 @@ public class Token {
      * @param unattachedReference The unattachedReference to set.
      */
     public void setUnattachedReference(OMElement unattachedReference) {
-        if(unattachedReference != null) {
-            this.unattachedReference = new StAXOMBuilder(DOOMAbstractFactory
-                    .getOMFactory(), unattachedReference.getXMLStreamReader())
+        if (unattachedReference != null) {
+            this.unattachedReference =
+                new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(), unattachedReference.getXMLStreamReader())
                     .getDocumentElement();
         }
     }
@@ -335,4 +338,150 @@ public class Token {
     public void setIssuerAddress(String issuerAddress) {
         this.issuerAddress = issuerAddress;
     }
+
+    /**
+     * Implementing serialize logic according to our own protocol. We had to follow this, because
+     * OMElement class is not serializable. Making OMElement serializable will have an huge impact
+     * on other components. Therefore implementing serialization logic according to a manual
+     * protocol.
+     * @param out Stream which writes serialized bytes.
+     * @throws IOException If unable to serialize particular member.
+     */
+    public void writeExternal(ObjectOutput out)
+        throws IOException {
+
+        out.writeObject(this.id);
+
+        out.writeInt(this.state);
+        
+        String stringElement = convertOMElementToString(this.token);
+        out.writeObject(stringElement);
+
+        stringElement = convertOMElementToString(this.previousToken);
+        out.writeObject(stringElement);
+
+        stringElement = convertOMElementToString(this.attachedReference);
+        out.writeObject(stringElement);
+
+        stringElement = convertOMElementToString(this.unattachedReference);
+        out.writeObject(stringElement);
+
+        out.writeObject(this.properties);
+
+        out.writeBoolean(this.changed);
+
+        int secretLength = 0;
+        if (null != this.secret) {
+            secretLength = this.secret.length;
+        }
+
+        // First write the length of secret
+        out.writeInt(secretLength);
+        if (0 != secretLength) {
+            out.write(this.secret);
+        }
+
+        out.writeObject(this.created);
+
+        out.writeObject(this.expires);
+
+        out.writeObject(this.issuerAddress);
+
+        out.writeObject(this.encrKeySha1Value);
+    }
+
+    /**
+     * Implementing de-serialization logic in accordance with the serialization logic.
+     * @param in Stream which used to read data.
+     * @throws IOException If unable to de-serialize particular data member.
+     * @throws ClassNotFoundException 
+     */
+    public void readExternal(ObjectInput in)
+        throws IOException, ClassNotFoundException {
+
+        this.id = (String)in.readObject();
+
+        this.state = in.readInt();
+
+        String stringElement = (String)in.readObject();
+        this.token = convertStringToOMElement(stringElement);
+
+        stringElement = (String)in.readObject();
+        this.previousToken = convertStringToOMElement(stringElement);
+
+        stringElement = (String)in.readObject();
+        this.attachedReference = convertStringToOMElement(stringElement);
+
+        stringElement = (String)in.readObject();
+        this.unattachedReference = convertStringToOMElement(stringElement);
+
+        this.properties = (Properties)in.readObject();
+
+        this.changed = in.readBoolean();
+
+        // Read the length of the secret
+        int secretLength = in.readInt();
+
+        if (0 != secretLength) {
+            byte[] buffer = new byte[secretLength];
+            if (secretLength != in.read(buffer)) {
+                throw new IllegalStateException("Bytes read from the secret key is not equal to serialized length");
+            }
+            this.secret = buffer;
+        }else{
+            this.secret = null;
+        }
+
+        this.created = (Date)in.readObject();
+
+        this.expires = (Date)in.readObject();
+
+        this.issuerAddress = (String)in.readObject();
+
+        this.encrKeySha1Value = (String)in.readObject();
+    }
+
+    private String convertOMElementToString(OMElement element)
+        throws IOException {
+        String serializedToken = "";
+
+        if (null == element) {
+            return serializedToken;
+        }
+
+        try {
+            serializedToken = element.toStringWithConsume();
+        } catch (XMLStreamException e) {
+            throw new IOException("Could not serialize token OM element");
+        }
+
+        return serializedToken;
+    }
+
+    private OMElement convertStringToOMElement(String stringElement)
+        throws IOException {
+
+        if (null == stringElement || stringElement.trim().equals("")) {
+            return null;
+        }
+
+        try {
+            InputStream is = new ByteArrayInputStream(stringElement.getBytes("UTF-8"));
+            XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(is);
+            StAXOMBuilder builder = new StAXOMBuilder(parser);
+            OMElement documentElement = builder.getDocumentElement();
+
+            XMLStreamReader llomReader = documentElement.getXMLStreamReader();
+            OMFactory doomFactory = DOOMAbstractFactory.getOMFactory();
+            StAXOMBuilder doomBuilder = new StAXOMBuilder(doomFactory, llomReader);
+            return doomBuilder.getDocumentElement();
+            
+        } catch (UnsupportedEncodingException e) {
+            log.error("Cannot convert de-serialized string to OMElement. Incorrect encoding format", e);
+            throw new IOException("Cannot convert de-serialized string to OMElement. Incorrect encoding format", e);
+        } catch (XMLStreamException e) {
+            log.error("Cannot convert de-serialized string to OMElement. Could not create XML stream.", e);
+            throw new IOException("Cannot convert de-serialized string to OMElement. Could not create XML stream.", e);
+        }
+    }
 }