Author: sergeyb
Date: Fri Dec 19 09:13:01 2008
New Revision: 728070

URL: http://svn.apache.org/viewvc?rev=728070&view=rev
Log:
JAXRS : fixing UriInfoImpl 

Modified:
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriInfoImpl.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
    
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriInfoImplTest.java
    
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriInfoImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriInfoImpl.java?rev=728070&r1=728069&r2=728070&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriInfoImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriInfoImpl.java
 Fri Dec 19 09:13:01 2008
@@ -44,10 +44,8 @@
     }
     
     public URI getAbsolutePath() {
-        String address = getBaseUri().toString();
-        address = address.endsWith("/") ? address.substring(0, 
address.length() - 1)
-                                        : address; 
-        return URI.create(address + getPath());
+        String path = getAbsolutePathAsString();
+        return URI.create(path);
     }
 
     public UriBuilder getAbsolutePathBuilder() {
@@ -55,7 +53,7 @@
     }
 
     public URI getBaseUri() {
-        URI u = URI.create(getEndpointAddress());
+        URI u = URI.create(HttpUtils.getEndpointAddress(message));
         return HttpUtils.toAbsoluteUri(u, message);
     }
 
@@ -69,8 +67,7 @@
 
     public String getPath(boolean decode) {
         
-        String path = (String)message.get(Message.REQUEST_URI);
-        return decode ? JAXRSUtils.uriDecode(path) : path;
+        return doGetPath(decode, true);
     }
 
     public List<PathSegment> getPathSegments() {
@@ -91,12 +88,13 @@
                                               decode);
     }
 
-    //TODO : check the fragment as well
     public URI getRequestUri() {
+        String path = getAbsolutePathAsString();
         String queries = (String)message.get(Message.QUERY_STRING);
-        return URI.create(getEndpointAddress() 
-                          + message.get(Message.REQUEST_URI)
-                          + (queries == null ? "" : "?" + queries));
+        if (queries != null) {
+            path += "?" + queries;
+        }
+        return URI.create(path);
     }
 
     public UriBuilder getRequestUriBuilder() {
@@ -108,7 +106,6 @@
     }
 
     public MultivaluedMap<String, String> getPathParameters(boolean decode) {
-        // this needs to be changed
         MetadataMap<String, String> values = new MetadataMap<String, String>();
         for (Map.Entry<String, List<String>> entry : 
templateParams.entrySet()) {
             if (entry.getKey().equals(URITemplate.FINAL_MATCH_GROUP)) {
@@ -121,13 +118,6 @@
         return values;
     }
 
-    protected String getEndpointAddress() {
-        String value = message.getExchange().getDestination().getAddress()
-               .getAddress().getValue();
-        
-        return value;
-    }
-
     public List<Object> getMatchedResources() {
         // TODO Auto-generated method stub
         return null;
@@ -143,5 +133,17 @@
         return null;
     }
 
+    private String doGetPath(boolean decode, boolean addSlash) {
+        String path = HttpUtils.getPathToMatch(message, addSlash);
+        return decode ? JAXRSUtils.uriDecode(path) : path;
+    }
     
+    private String getAbsolutePathAsString() {
+        String address = getBaseUri().toString();
+        String path = doGetPath(true, false);
+        if (path.startsWith("/") && address.endsWith("/")) {
+            address = address.substring(0, address.length() - 1);
+        }
+        return address + path;
+    }
 }

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java?rev=728070&r1=728069&r2=728070&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
 Fri Dec 19 09:13:01 2008
@@ -98,7 +98,7 @@
             requestContentType = "*/*";
         }
         
-        String rawPath = HttpUtils.getPathToMatch(message);
+        String rawPath = HttpUtils.getPathToMatch(message, true);
         
         //1. Matching target resource class
         Service service = message.getExchange().get(Service.class);

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java?rev=728070&r1=728069&r2=728070&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
 Fri Dec 19 09:13:01 2008
@@ -59,36 +59,41 @@
         return u;
     }
     
-    public static String getPathToMatch(Message m) {
-        
+    public static String getPathToMatch(Message m, boolean addSlash) {
         String requestAddress = (String)m.get(Message.REQUEST_URI);
         String baseAddress = getBaseAddress(m);
-        
-        return getPathToMatch(requestAddress, baseAddress);
+        return getPathToMatch(requestAddress, baseAddress, addSlash);
     }
     
+    
     public static String getBaseAddress(Message m) {
         try {
-            String address = null;
-            Destination d = m.getExchange().getDestination();
-            if (d instanceof ServletDestination) {
-                address = 
((ServletDestination)d).getEndpointInfo().getAddress();
-            } else {
-                address = d.getAddress().getAddress().getValue();
-            }
-            return new URL(address).getPath();
+            String endpointAddress = getEndpointAddress(m);
+            return new URL(endpointAddress).getPath();
         } catch (MalformedURLException ex) {
             return (String)m.get(Message.BASE_PATH);
         }
     }
     
-    public static String getPathToMatch(String path, String address) {
+    public static String getEndpointAddress(Message m) {
+        String address = null;
+        Destination d = m.getExchange().getDestination();
+        if (d instanceof ServletDestination) {
+            address = ((ServletDestination)d).getEndpointInfo().getAddress();
+        } else {
+            address = d.getAddress().getAddress().getValue();
+        }
+        
+        return address;
+    }
+    
+    public static String getPathToMatch(String path, String address, boolean 
addSlash) {
         
         int ind = path.indexOf(address);
         if (ind == 0) {
             path = path.substring(ind + address.length());
         }
-        if (!path.startsWith("/")) {
+        if (addSlash && !path.startsWith("/")) {
             path = "/" + path;
         }
         

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriInfoImplTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriInfoImplTest.java?rev=728070&r1=728069&r2=728070&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriInfoImplTest.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriInfoImplTest.java
 Fri Dec 19 09:13:01 2008
@@ -25,11 +25,12 @@
 import org.apache.cxf.jaxrs.model.URITemplate;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
-import org.apache.cxf.transport.Destination;
-import org.apache.cxf.ws.addressing.AttributedURIType;
-import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.servlet.ServletDestination;
 import org.easymock.classextension.EasyMock;
 import org.easymock.classextension.IMocksControl;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -84,7 +85,7 @@
     @Test
     public void testGetRequestURI() {
         
-        UriInfo u = new UriInfoImpl(mockMessage("http://localhost:8080/baz";, 
"/bar", "n=1%202"),
+        UriInfo u = new 
UriInfoImpl(mockMessage("http://localhost:8080/baz/bar";, "/baz/bar", "n=1%202"),
                             null);
 
         assertEquals("Wrong request uri", 
"http://localhost:8080/baz/bar?n=1%202";,
@@ -132,11 +133,10 @@
     @Test
     public void testGetBaseUri() {
         
-        UriInfoImpl u = new 
UriInfoImpl(mockMessage("http://localhost:8080/baz";, "/bar"),
-                                        null);
+        UriInfoImpl u = new 
UriInfoImpl(mockMessage("http://localhost:8080/baz";, null), null);
         assertEquals("Wrong base path", "http://localhost:8080/baz";, 
                      u.getBaseUri().toString());
-        u = new UriInfoImpl(mockMessage("http://localhost:8080/baz/";, "/bar"),
+        u = new UriInfoImpl(mockMessage("http://localhost:8080/baz/";, null),
                                         null);
         assertEquals("Wrong base path", "http://localhost:8080/baz/";, 
                      u.getBaseUri().toString());
@@ -145,17 +145,28 @@
     @Test
     public void testGetPath() {
         
-        UriInfoImpl u = new 
UriInfoImpl(mockMessage("http://localhost:8080/baz";, "/bar"),
+        UriInfoImpl u = new 
UriInfoImpl(mockMessage("http://localhost:8080/bar/baz";, 
+                                                    "/baz"),
                                         null);
-        assertEquals("Wrong path", "/bar", u.getPath());
+        assertEquals("Wrong path", "/baz", u.getPath());
         
-        u = new UriInfoImpl(mockMessage("http://localhost:8080/baz";, 
"/bar%201"),
+        u = new UriInfoImpl(mockMessage("http://localhost:8080/bar/baz";, 
+                            "/bar/baz"), null);
+        assertEquals("Wrong path", "/", u.getPath());
+        
+        u = new UriInfoImpl(mockMessage("http://localhost:8080/bar/baz/";, 
+                "/bar/baz/"), null);
+        assertEquals("Wrong path", "/", u.getPath());
+        
+        u = new UriInfoImpl(mockMessage("http://localhost:8080/baz";, 
"/baz/bar%201"),
                                         null);
         assertEquals("Wrong path", "/bar 1", u.getPath());
         
-        u = new UriInfoImpl(mockMessage("http://localhost:8080/baz";, 
"/bar%201"),
+        u = new UriInfoImpl(mockMessage("http://localhost:8080/baz";, 
"/baz/bar%201"),
                             null);
         assertEquals("Wrong path", "/bar%201", u.getPath(false));
+      
+        
     }
     
     private Message mockMessage(String baseAddress, String pathInfo) {
@@ -168,23 +179,19 @@
     
     private Message mockMessage(String baseAddress, String pathInfo, 
                                 String query, String fragment) {
+        Message m = new MessageImpl();
         control.reset();
-        Message m = control.createMock(Message.class);
         Exchange e = control.createMock(Exchange.class);
-        m.getExchange();
-        EasyMock.expectLastCall().andReturn(e);
-        Destination d = control.createMock(Destination.class);
+        m.setExchange(e);
+        ServletDestination d = control.createMock(ServletDestination.class);
         e.getDestination();
-        EasyMock.expectLastCall().andReturn(d);
-        EndpointReferenceType epr = new EndpointReferenceType(); 
-        epr.setAddress(new AttributedURIType());
-        epr.getAddress().setValue(baseAddress);
-        d.getAddress();
-        EasyMock.expectLastCall().andReturn(epr);
-        m.get(Message.REQUEST_URI);
-        EasyMock.expectLastCall().andReturn(pathInfo);
-        m.get(Message.QUERY_STRING);
-        EasyMock.expectLastCall().andReturn(query);
+        EasyMock.expectLastCall().andReturn(d).anyTimes();
+        EndpointInfo epr = new EndpointInfo(); 
+        epr.setAddress(baseAddress);
+        d.getEndpointInfo();
+        EasyMock.expectLastCall().andReturn(epr).anyTimes();
+        m.put(Message.REQUEST_URI, pathInfo);
+        m.put(Message.QUERY_STRING, query);
         control.replay();
         return m;
     }

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java?rev=728070&r1=728069&r2=728070&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
 Fri Dec 19 09:13:01 2008
@@ -26,13 +26,13 @@
 
     @Test
     public void testUpdatePath() {
-        assertEquals("/", HttpUtils.getPathToMatch("/", "/"));
-        assertEquals("/", HttpUtils.getPathToMatch("/", "/bar"));
-        assertEquals("/bar", HttpUtils.getPathToMatch("/bar", "/"));
+        assertEquals("/", HttpUtils.getPathToMatch("/", "/", true));
+        assertEquals("/", HttpUtils.getPathToMatch("/", "/bar", true));
+        assertEquals("/bar", HttpUtils.getPathToMatch("/bar", "/", true));
         
-        assertEquals("/", HttpUtils.getPathToMatch("/bar", "/bar"));
-        assertEquals("/bar", HttpUtils.getPathToMatch("/baz/bar", "/baz"));
-        assertEquals("/baz/bar/foo/", 
HttpUtils.getPathToMatch("/baz/bar/foo/", "/bar"));
+        assertEquals("/", HttpUtils.getPathToMatch("/bar", "/bar", true));
+        assertEquals("/bar", HttpUtils.getPathToMatch("/baz/bar", "/baz", 
true));
+        assertEquals("/baz/bar/foo/", 
HttpUtils.getPathToMatch("/baz/bar/foo/", "/bar", true));
         
     }
     


Reply via email to