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));
}