OLTU-80 - Implement JWE support for JWT

git-svn-id: https://svn.apache.org/repos/asf/oltu/trunk@1733424 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jose/jwe/src/main/java/org/apache/oltu/jose/jwe/io/JWEWriter.java b/jose/jwe/src/main/java/org/apache/oltu/jose/jwe/io/JWEWriter.java
index 3bffd66..63a054d 100644
--- a/jose/jwe/src/main/java/org/apache/oltu/jose/jwe/io/JWEWriter.java
+++ b/jose/jwe/src/main/java/org/apache/oltu/jose/jwe/io/JWEWriter.java
@@ -16,23 +16,39 @@
  */
 package org.apache.oltu.jose.jwe.io;
 
-import org.apache.oltu.commons.encodedtoken.TokenWriter;
+import org.apache.oltu.commons.encodedtoken.TokenDecoder;
 import org.apache.oltu.jose.jwe.JWE;
 
-public final class JWEWriter extends TokenWriter<JWE> {
+public final class JWEWriter extends TokenDecoder {
 
-    @Override
+    public final String write(JWE token) {
+        if (token == null) {
+            throw new IllegalArgumentException("Impossible to build a Token from a null JWS representation.");
+        }
+
+        String header = writeHeader(token);
+        String encodedHeader = base64Encode(header);
+        String encodedBody =  writeEncryptedKey(token);
+        String signature = writeContentEncryption(token);
+
+        return new StringBuilder()
+        .append(encodedHeader)
+        .append('.')
+        .append(encodedBody)
+        .append('.')
+        .append(signature)
+        .toString();
+    }
+
     protected String writeHeader(JWE token) {
         return new JWEHeaderWriter().write(token.getHeader());
     }
 
-    @Override
-    protected String writeBody(JWE token) {
+    protected String writeEncryptedKey(JWE token) {
         return token.getEncryptedKey();
     }
 
-    @Override
-    protected String writeSignature(JWE token) {
+    protected String writeContentEncryption(JWE token) {
         return token.getContentEncryption();
     }
 }
diff --git a/jose/jwe/src/test/java/org/apache/oltu/jose/jwe/io/JWEWriterTestCase.java b/jose/jwe/src/test/java/org/apache/oltu/jose/jwe/io/JWEWriterTestCase.java
index 7ab86e9..45bfeec 100644
--- a/jose/jwe/src/test/java/org/apache/oltu/jose/jwe/io/JWEWriterTestCase.java
+++ b/jose/jwe/src/test/java/org/apache/oltu/jose/jwe/io/JWEWriterTestCase.java
@@ -16,8 +16,29 @@
  */
 package org.apache.oltu.jose.jwe.io;
 
-public class JWEWriterTestCase {
+import static org.junit.Assert.assertEquals;
+import org.apache.oltu.jose.jwe.JWE;
+import org.apache.oltu.jose.jwe.JWEConstants;
+import org.junit.Test;
 
+public class JWEWriterTestCase {
     
-    //TODO
+    private final JWEWriter jweWriter = new JWEWriter();
+    
+    @Test
+    public void serialize() {
+        JWE jwe  = new JWE.Builder().setAlgorithm(JWEConstants.A128KW)
+                .setEncryptionAlgorithm(JWEConstants.A128CBC_HS256)
+                .setEncryptedKey("6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ")
+                .setContentEncryption("AxY8DCtDaGlsbGljb3RoZQ.KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY.U0m_YmjN04DJvceFICbCVQ")
+                .build();
+        String actual = jweWriter.write(jwe);
+        String specJWE = "eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0."+
+                "6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ."+
+                "AxY8DCtDaGlsbGljb3RoZQ."+
+                "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY."+
+                "U0m_YmjN04DJvceFICbCVQ";
+        assertEquals(specJWE,
+                actual);
+    }
 }