[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