Author: dkatayev
Date: 2010-07-15 09:28:41 -0400 (Thu, 15 Jul 2010)
New Revision: 2793
Modified:
jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/xml/PropertyWriteUtil.java
jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestPropFind.java
Log:
EXOJCR-857 Only special characters in displayname property are decoded.
Modified:
jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/xml/PropertyWriteUtil.java
===================================================================
---
jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/xml/PropertyWriteUtil.java 2010-07-15
09:23:57 UTC (rev 2792)
+++
jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/xml/PropertyWriteUtil.java 2010-07-15
13:28:41 UTC (rev 2793)
@@ -26,6 +26,8 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
@@ -133,15 +135,21 @@
}
writeAttributes(xmlStreamWriter, prop);
-
- try
+
+ if (prop.getName().getLocalPart().equals("displayname") &&
containsEncodedChar(prop.getValue()))
{
- xmlStreamWriter.writeCharacters(URLDecoder.decode(prop.getValue(),
"UTF-8"));
+ try
+ {
+ xmlStreamWriter.writeCharacters(URLDecoder.decode(prop.getValue(),
"UTF-8"));
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ e.printStackTrace();
+ }
+ } else {
+ xmlStreamWriter.writeCharacters(prop.getValue());
}
- catch (UnsupportedEncodingException e)
- {
- e.printStackTrace();
- }
+
xmlStreamWriter.writeEndElement();
}
}
@@ -165,5 +173,17 @@
xmlStreamWriter.writeAttribute(attrName, attrValue);
}
}
+
+ /**
+ * Checks if string contains encoded characters like %2f.
+ * @param str string to check.
+ * @return <code>true</code> if string contains encoded characters,
otherwise returns <code>false</code>
+ */
+ private static boolean containsEncodedChar(String str){
+ Pattern p = Pattern.compile("%[0-9a-fA-F]{2}");
+ Matcher matcher = p.matcher(str);
+ return matcher.find();
+
+ }
}
Modified:
jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestPropFind.java
===================================================================
---
jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestPropFind.java 2010-07-15
09:23:57 UTC (rev 2792)
+++
jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestPropFind.java 2010-07-15
13:28:41 UTC (rev 2793)
@@ -154,6 +154,30 @@
assertTrue(find.contains(authorProp));
assertTrue(find.contains(author));
}
+
+
+
+
+
+ public void testPropWithPercent() throws Exception
+ {
+ String content = TestUtils.getFileContent();
+ String file = TestUtils.getFileName();
+ TestUtils.addContent(session, file, new ByteArrayInputStream(content.getBytes()),
nt_webdave_file, "");
+ String authorValue = "bla % bla";
+ TestUtils.addNodeProperty(session, file, authorProp, authorValue);
+ ContainerResponse responseFind =
+ service(WebDAVMethods.PROPFIND, getPathWS() + file, "", null,
allPropsXML.getBytes());
+ assertEquals(HTTPStatus.MULTISTATUS, responseFind.getStatus());
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ PropFindResponseEntity entity = (PropFindResponseEntity)responseFind.getEntity();
+ entity.write(outputStream);
+ String find = outputStream.toString();
+ assertTrue(find.contains("D:getlastmodified"));
+ assertTrue(find.contains(authorProp));
+ assertTrue(find.contains(authorValue));
+ }
+
@Override
protected String getRepositoryName()
Show replies by date