[richfaces-svn-commits] JBoss Rich Faces SVN: r2357 - in trunk/framework: impl/src/main/java/org/ajax4jsf/resource and 1 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Mon Aug 20 14:43:50 EDT 2007


Author: nbelaevski
Date: 2007-08-20 14:43:49 -0400 (Mon, 20 Aug 2007)
New Revision: 2357

Modified:
   trunk/framework/api/src/main/java/org/ajax4jsf/Messages.java
   trunk/framework/impl/src/main/java/org/ajax4jsf/resource/ResourceBuilderImpl.java
   trunk/framework/impl/src/main/resources/org/ajax4jsf/messages.properties
Log:
EOFException deserializing short byte[] arrays of resource data fixed

Modified: trunk/framework/api/src/main/java/org/ajax4jsf/Messages.java
===================================================================
--- trunk/framework/api/src/main/java/org/ajax4jsf/Messages.java	2007-08-20 17:22:13 UTC (rev 2356)
+++ trunk/framework/api/src/main/java/org/ajax4jsf/Messages.java	2007-08-20 18:43:49 UTC (rev 2357)
@@ -197,6 +197,7 @@
 	public static final String QUERY_STRING_BUILDING_ERROR = "QUERY_STRING_BUILDING_ERROR";
 	public static final String BUILD_RESOURCE_URI_INFO = "BUILD_RESOURCE_URI_INFO";
 	public static final String RESTORE_DATA_FROM_RESOURCE_URI_INFO = "RESTORE_DATA_FROM_RESOURCE_URI_INFO";
+	public static final String STREAM_CORRUPTED_ERROR = "STREAM_CORRUPTED_ERROR";
 	public static final String DESERIALIZE_DATA_INPUT_ERROR = "DESERIALIZE_DATA_INPUT_ERROR";
 	public static final String DATA_CLASS_NOT_FOUND_ERROR = "DATA_CLASS_NOT_FOUND_ERROR";
 	public static final String METHOD_NOT_IMPLEMENTED = "METHOD_NOT_IMPLEMENTED";

Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/resource/ResourceBuilderImpl.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/resource/ResourceBuilderImpl.java	2007-08-20 17:22:13 UTC (rev 2356)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/resource/ResourceBuilderImpl.java	2007-08-20 18:43:49 UTC (rev 2357)
@@ -35,6 +35,8 @@
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.zip.Deflater;
 import java.util.zip.Inflater;
 
@@ -71,7 +73,10 @@
     private static final Log log = LogFactory.getLog(ResourceBuilderImpl.class);
 
     private static final String DATA_SEPARATOR = "/DATA/";
+    private static final String DATA_BYTES_SEPARATOR = "/DATB/";
 
+    private static final Pattern DATA_SEPARATOR_PATTERN = Pattern.compile("/DAT(A|B)/");
+    
     private static Map renderers;
 
     private static ResourceRenderer defaultRenderer = new MimeRenderer(null);
@@ -263,30 +268,31 @@
 	return packageName.append("/").append(path).toString();
     }
 
-    public String getUri(InternetResource resource, FacesContext context, Object storeData) {
+    public String getUri(InternetResource resource, FacesContext context,
+	    Object storeData) {
 	StringBuffer uri = new StringBuffer();// ResourceServlet.DEFAULT_SERVLET_PATH).append("/");
 	uri.append(resource.getKey());
 	// append serialized data as Base-64 encoded request string.
 	if (storeData != null) {
 	    try {
-		String encodedObjectData;
+		byte[] objectData;
 		if (storeData instanceof byte[]) {
-		    byte[] objectData = (byte[]) storeData;
-		    encodedObjectData = new String(encrypt(objectData), "ISO-8859-1");
+			objectData = (byte[]) storeData;
+			uri.append(DATA_BYTES_SEPARATOR);
 		} else {
-		    ByteArrayOutputStream dataSteram = new ByteArrayOutputStream(
-			    1024);
-		    ObjectOutputStream objStream = new ObjectOutputStream(
-			    dataSteram);
-		    objStream.writeObject(storeData);
-		    objStream.flush();
-		    objStream.close();
-		    dataSteram.close();
-		    byte[] objectData = dataSteram.toByteArray();
-		    encodedObjectData = new String(encrypt(objectData), "ISO-8859-1");
+			ByteArrayOutputStream dataSteram = new ByteArrayOutputStream(
+					1024);
+			ObjectOutputStream objStream = new ObjectOutputStream(
+					dataSteram);
+			objStream.writeObject(storeData);
+			objStream.flush();
+			objStream.close();
+			dataSteram.close();
+			objectData = dataSteram.toByteArray();
+			uri.append(DATA_SEPARATOR);
 		}
-		uri.append(DATA_SEPARATOR);
-		uri.append(encodedObjectData);
+		byte[] dataArray = encrypt(objectData);
+		uri.append(new String(dataArray, "ISO-8859-1"));
 
 		// / byte[] objectData = dataSteram.toByteArray();
 		// / uri.append("?").append(new
@@ -317,49 +323,62 @@
          * @return
          */
     public InternetResource getResourceForKey(String key)
-	    throws ResourceNotFoundException {
+    throws ResourceNotFoundException {
 
-	int data = key.indexOf(DATA_SEPARATOR);
-	if (data >= 0) {
-	    key = key.substring(0, data);
-	}
-	return getResource(key);
+    	Matcher matcher = DATA_SEPARATOR_PATTERN.matcher(key);	
+    	if (matcher.find()) {
+    		int data = matcher.start();
+    		key = key.substring(0, data);
+    	}
+
+    	return getResource(key);
     }
 
     public Object getResourceDataForKey(String key) {
-	Object data = null;
-	String dataString = null;
-	int dataStart = key.indexOf(DATA_SEPARATOR);
-	if (dataStart >= 0) {
-	    dataString = key.substring(dataStart + DATA_SEPARATOR.length());
-	}
-	if (log.isDebugEnabled()) {
-	    log.debug(Messages.getMessage(
-		    Messages.RESTORE_DATA_FROM_RESOURCE_URI_INFO, key,
-		    dataString));
-	}
-	if (dataString != null) {
-	    // dataString =
-	    // dataString.substring(dataStart+ResourceServlet.DATA_PARAMETER.length()+1);
-	    byte[] objectArray = null;
-	    try {
-		byte[] dataArray = dataString.getBytes("ISO-8859-1");
-		objectArray = decrypt(dataArray);
+    	Object data = null;
+    	String dataString = null;
+    	boolean serialized = true;
+    	Matcher matcher = DATA_SEPARATOR_PATTERN.matcher(key);
+    	if (matcher.find()) {
+    		int dataStart = matcher.end();
+    		dataString = key.substring(dataStart);
+    		if ("B".equals(matcher.group(1))) {
+    			serialized = false;
+    		}
+    	}
 
-		ObjectInputStream in = new ObjectInputStream(
-			new ByteArrayInputStream(objectArray));
-		data = in.readObject();
-	    } catch (StreamCorruptedException e) {
-		data = objectArray;
-	    } catch (IOException e) {
-		log.error(Messages
-			.getMessage(Messages.DESERIALIZE_DATA_INPUT_ERROR), e);
-	    } catch (ClassNotFoundException e) {
-		log.error(Messages
-			.getMessage(Messages.DATA_CLASS_NOT_FOUND_ERROR), e);
-	    }
-	}
-	return data;
+    	if (log.isDebugEnabled()) {
+    		log.debug(Messages.getMessage(
+    				Messages.RESTORE_DATA_FROM_RESOURCE_URI_INFO, key,
+    				dataString));
+    	}
+    	if (dataString != null) {
+    		// dataString =
+    		// dataString.substring(dataStart+ResourceServlet.DATA_PARAMETER.length()+1);
+    		byte[] objectArray = null;
+    		try {
+    			byte[] dataArray = dataString.getBytes("ISO-8859-1");
+    			objectArray = decrypt(dataArray);
+
+    			if (serialized) {
+    				ObjectInputStream in = new ObjectInputStream(
+    						new ByteArrayInputStream(objectArray));
+    				data = in.readObject();
+    			} else {
+    				data = objectArray;
+    			}
+    		} catch (StreamCorruptedException e) {
+    			log.error(Messages
+    					.getMessage(Messages.STREAM_CORRUPTED_ERROR), e);
+    		} catch (IOException e) {
+    			log.error(Messages
+    					.getMessage(Messages.DESERIALIZE_DATA_INPUT_ERROR), e);
+    		} catch (ClassNotFoundException e) {
+    			log.error(Messages
+    					.getMessage(Messages.DATA_CLASS_NOT_FOUND_ERROR), e);
+    		}
+    	}
+    	return data;
     }
 
     public InternetResource getResource(String path)

Modified: trunk/framework/impl/src/main/resources/org/ajax4jsf/messages.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/ajax4jsf/messages.properties	2007-08-20 17:22:13 UTC (rev 2356)
+++ trunk/framework/impl/src/main/resources/org/ajax4jsf/messages.properties	2007-08-20 18:43:49 UTC (rev 2357)
@@ -145,6 +145,7 @@
 QUERY_STRING_BUILDING_ERROR=Error building query string for store data
 BUILD_RESOURCE_URI_INFO=Build URI for Resource with key [{0}] as \: {1}
 RESTORE_DATA_FROM_RESOURCE_URI_INFO=Restore data object for Resource with key [{0}] from uri string \: {1}
+STREAM_CORRUPTED_ERROR=Stream corrupted error deserializing data 
 DESERIALIZE_DATA_INPUT_ERROR=Input error for deserialize data 
 DATA_CLASS_NOT_FOUND_ERROR=Data class for restore not found
 METHOD_NOT_IMPLEMENTED=Method {0} not implemented




More information about the richfaces-svn-commits mailing list