You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2010/01/08 14:16:29 UTC

svn commit: r897196 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/impl/HttpHeadersImpl.java main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java test/java/org/apache/cxf/jaxrs/impl/HttpHeadersImplTest.java

Author: sergeyb
Date: Fri Jan  8 13:16:28 2010
New Revision: 897196

URL: http://svn.apache.org/viewvc?rev=897196&view=rev
Log:
JAX-RS : better parsing of http headers

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpHeadersImpl.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/HttpHeadersImplTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpHeadersImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpHeadersImpl.java?rev=897196&r1=897195&r2=897196&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpHeadersImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpHeadersImpl.java Fri Jan  8 13:16:28 2010
@@ -46,7 +46,7 @@
 
     // TODO : it can be optimized, "Mastering Regular Expressions" has the answers
     private static final String COMPLEX_HEADER_EXPRESSION = 
-        "((\"(([^\"])|(?<=\\\\)\")*\")|([^\",]*))(;[\\w]+)?";
+        "(([\\w]+=\"[^\"]*\")|([\\w]+=[\\w]+)|([\\w]+))(;(([\\w]+=\"[^\"]*\")|([\\w]+=[\\w]+)|([\\w]+)))?";
     private static final Pattern COMPLEX_HEADER_PATTERN =
         Pattern.compile(COMPLEX_HEADER_EXPRESSION);
     private static final String QUOTE = "\"";

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java?rev=897196&r1=897195&r2=897196&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java Fri Jan  8 13:16:28 2010
@@ -279,7 +279,7 @@
         return resourceTagOpened;
     }
     
-    private boolean compareOperations(OperationResourceInfo ori1, OperationResourceInfo ori2) {
+    protected boolean compareOperations(OperationResourceInfo ori1, OperationResourceInfo ori2) {
         if (ori1 == null || ori2 == null
             || !ori1.getURITemplate().getValue().equals(ori2.getURITemplate().getValue())) {
             return false;
@@ -314,7 +314,7 @@
         return true;
     }
     
-    private void handleDynamicSubresource(StringBuilder sb, Set<Class<?>> jaxbTypes, 
+    protected void handleDynamicSubresource(StringBuilder sb, Set<Class<?>> jaxbTypes, 
                  JAXBContextProxy jaxbProxy, Map<Class<?>, QName> clsMap, OperationResourceInfo ori,
                  ClassResourceInfo subcri) {
         
@@ -382,7 +382,7 @@
         }
     }
     
-    private void doWriteParam(StringBuilder sb, Parameter pm, Class<?> type, String paramName) {
+    protected void doWriteParam(StringBuilder sb, Parameter pm, Class<?> type, String paramName) {
         
         sb.append("<param name=\"").append(paramName).append("\" ");
         String style = ParameterType.PATH == pm.getType() ? "template" 
@@ -431,7 +431,7 @@
         }
     }
     
-    private List<OperationResourceInfo> sortOperationsByPath(Set<OperationResourceInfo> ops) {
+    protected List<OperationResourceInfo> sortOperationsByPath(Set<OperationResourceInfo> ops) {
         List<OperationResourceInfo> opsWithSamePath = new LinkedList<OperationResourceInfo>(ops);
         Collections.sort(opsWithSamePath, new Comparator<OperationResourceInfo>() {
 

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/HttpHeadersImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/HttpHeadersImplTest.java?rev=897196&r1=897195&r2=897196&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/HttpHeadersImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/HttpHeadersImplTest.java Fri Jan  8 13:16:28 2010
@@ -49,25 +49,47 @@
     }
 
     @Test
-    public void testGetHeaderWithQuotes1() throws Exception {
+    public void testGetHeaderNameValue() throws Exception {
         
         Message m = control.createMock(Message.class);
         m.get(Message.PROTOCOL_HEADERS);
         MetadataMap<String, String> headers = 
-            createHeader("COMPLEX_HEADER", 
-                         "\"a\", \"a\";param, b, b;param, \"c, d, e\", \"c, d, e\";param");
+            createHeader("COMPLEX_HEADER",  "b=c; param=c, a=b;param=b");
         EasyMock.expectLastCall().andReturn(headers);
         control.replay();
         HttpHeaders h = new HttpHeadersImpl(m);
         List<String> values = h.getRequestHeader("COMPLEX_HEADER");
         assertNotNull(values);
-        assertEquals(6, values.size());
-        assertEquals("\"a\"", values.get(0));
-        assertEquals("\"a\";param", values.get(1));
+        assertEquals(2, values.size());
+        assertEquals("b=c; param=c", values.get(0));
+        assertEquals("a=b;param=b", values.get(1));
+    }
+    
+    @Test
+    public void testGetHeaderWithQuotes1() throws Exception {
+        
+        Message m = control.createMock(Message.class);
+        m.get(Message.PROTOCOL_HEADERS);
+        MetadataMap<String, String> headers = createHeader("COMPLEX_HEADER", 
+            "a1=\"a\", a2=\"a\";param, b, b;param, c1=\"c, d, e\", "
+            + "c2=\"c, d, e\";param, a=b, a=b;p=p1, a2=\"a\";param=p,"
+            + "a3=\"a\";param=\"p,b\"");
+        EasyMock.expectLastCall().andReturn(headers);
+        control.replay();
+        HttpHeaders h = new HttpHeadersImpl(m);
+        List<String> values = h.getRequestHeader("COMPLEX_HEADER");
+        assertNotNull(values);
+        assertEquals(10, values.size());
+        assertEquals("a1=\"a\"", values.get(0));
+        assertEquals("a2=\"a\";param", values.get(1));
         assertEquals("b", values.get(2));
         assertEquals("b;param", values.get(3));
-        assertEquals("\"c, d, e\"", values.get(4));
-        assertEquals("\"c, d, e\";param", values.get(5));
+        assertEquals("c1=\"c, d, e\"", values.get(4));
+        assertEquals("c2=\"c, d, e\";param", values.get(5));
+        assertEquals("a=b", values.get(6));
+        assertEquals("a=b;p=p1", values.get(7));
+        assertEquals("a2=\"a\";param=p", values.get(8));
+        assertEquals("a3=\"a\";param=\"p,b\"", values.get(9));
     }
     
     @Test
@@ -76,18 +98,19 @@
         Message m = control.createMock(Message.class);
         m.get(Message.PROTOCOL_HEADERS);
         MetadataMap<String, String> headers = 
-            createHeader("COMPLEX_HEADER", 
-                         "\"a   \\\"b\\\"\", b;param=b");
+            createHeader("X-WSSE", "UsernameToken Username=\"Foo\", Nonce=\"bar\"");
         EasyMock.expectLastCall().andReturn(headers);
         control.replay();
         HttpHeaders h = new HttpHeadersImpl(m);
-        List<String> values = h.getRequestHeader("COMPLEX_HEADER");
+        List<String> values = h.getRequestHeader("X-WSSE");
         assertNotNull(values);
-        assertEquals(2, values.size());
-        assertEquals("\"a   \\\"b\\\"\"", values.get(0));
-        assertEquals("b;param=b", values.get(1));
+        assertEquals(3, values.size());
+        assertEquals("UsernameToken", values.get(0));
+        assertEquals("Username=\"Foo\"", values.get(1));
+        assertEquals("Nonce=\"bar\"", values.get(2));
     }
     
+    
     @Test
     public void testGetHeaders() throws Exception {