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 2013/05/20 12:14:20 UTC
svn commit: r1484415 - in /cxf/trunk/rt/frontend/jaxrs/src:
main/java/org/apache/cxf/jaxrs/ main/java/org/apache/cxf/jaxrs/impl/
main/java/org/apache/cxf/jaxrs/interceptor/
main/java/org/apache/cxf/jaxrs/provider/
main/java/org/apache/cxf/jaxrs/utils/ ...
Author: sergeyb
Date: Mon May 20 10:14:20 2013
New Revision: 1484415
URL: http://svn.apache.org/r1484415
Log:
[CXF-2007] More final API updates for this JIRA issue
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractInterceptorContextImpl.java
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/impl/WriterInterceptorContextImpl.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorMBW.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Mon May 20 10:14:20 2013
@@ -22,7 +22,6 @@ package org.apache.cxf.jaxrs;
import java.io.IOException;
import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ResourceBundle;
@@ -48,11 +47,7 @@ import org.apache.cxf.jaxrs.impl.AsyncRe
import org.apache.cxf.jaxrs.impl.MetadataMap;
import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
-import org.apache.cxf.jaxrs.model.MethodInvocationInfo;
import org.apache.cxf.jaxrs.model.OperationResourceInfo;
-import org.apache.cxf.jaxrs.model.OperationResourceInfoStack;
-import org.apache.cxf.jaxrs.model.Parameter;
-import org.apache.cxf.jaxrs.model.ParameterType;
import org.apache.cxf.jaxrs.model.ProviderInfo;
import org.apache.cxf.jaxrs.model.URITemplate;
import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
@@ -161,8 +156,6 @@ public class JAXRSInvoker extends Abstra
if (!wasSuspended) {
- pushOntoStack(ori, ClassHelper.getRealClass(resourceObject), inMessage);
-
final boolean contextsAvailable = cri.contextsAvailable();
final boolean paramsAvailable = cri.paramsAvailable();
if (contextsAvailable || paramsAvailable) {
@@ -419,32 +412,5 @@ public class JAXRSInvoker extends Abstra
return result;
}
- private void pushOntoStack(OperationResourceInfo ori, Class<?> realClass, Message msg) {
- OperationResourceInfoStack stack = msg.get(OperationResourceInfoStack.class);
- if (stack == null) {
- stack = new OperationResourceInfoStack();
- msg.put(OperationResourceInfoStack.class, stack);
- }
-
-
- @SuppressWarnings("unchecked")
- MultivaluedMap<String, String> params =
- (MultivaluedMap<String, String>)msg.get(URITemplate.TEMPLATE_PARAMETERS);
- List<String> values = null;
- if (params == null || params.size() == 1) {
- values = Collections.emptyList();
- } else {
- values = new ArrayList<String>(params.size() - 1);
- for (Parameter pm : ori.getParameters()) {
- if (pm.getType() == ParameterType.PATH) {
- List<String> paramValues = params.get(pm.getName());
- if (paramValues != null) {
- values.addAll(paramValues);
- }
-
- }
- }
- }
- stack.push(new MethodInvocationInfo(ori, realClass, values));
- }
+
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractInterceptorContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractInterceptorContextImpl.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractInterceptorContextImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractInterceptorContextImpl.java Mon May 20 10:14:20 2013
@@ -51,6 +51,9 @@ public class AbstractInterceptorContextI
}
public void setAnnotations(Annotation[] annotations) {
+ if (annotations == null) {
+ throw new NullPointerException();
+ }
anns = annotations;
}
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=1484415&r1=1484414&r2=1484415&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 Mon May 20 10:14:20 2013
@@ -175,22 +175,29 @@ public class UriInfoImpl implements UriI
if (stack != null) {
List<String> objects = new ArrayList<String>();
List<String> uris = new LinkedList<String>();
- StringBuilder sum = new StringBuilder("");
+ StringBuilder sumPath = new StringBuilder("");
for (MethodInvocationInfo invocation : stack) {
+ List<String> templateObjects = invocation.getTemplateValues();
OperationResourceInfo ori = invocation.getMethodInfo();
URITemplate[] paths = {
ori.getClassResourceInfo().getURITemplate(),
ori.getURITemplate()
};
+ if (paths[0] != null) {
+ int count = paths[0].getVariables().size();
+ List<String> rootObjects = new ArrayList<String>(count);
+ for (int i = 0; i < count && i < templateObjects.size(); i++) {
+ rootObjects.add(templateObjects.get(i));
+ }
+ uris.add(0, createMatchedPath(paths[0].getValue(), rootObjects, decode));
+ }
for (URITemplate t : paths) {
if (t != null) {
- String v = t.getValue();
- sum.append("/" + (decode ? HttpUtils.pathDecode(v) : v));
+ sumPath.append("/").append(t.getValue());
}
}
- UriBuilder ub = UriBuilder.fromPath(sum.toString());
- objects.addAll(invocation.getTemplateValues());
- uris.add(0, ub.build(objects.toArray()).normalize().getRawPath());
+ objects.addAll(templateObjects);
+ uris.add(0, createMatchedPath(sumPath.toString(), objects, decode));
}
return uris;
}
@@ -198,6 +205,10 @@ public class UriInfoImpl implements UriI
return Collections.emptyList();
}
+ private static String createMatchedPath(String uri, List<? extends Object> vars, boolean decode) {
+ String uriPath = UriBuilder.fromPath(uri).buildFromEncoded(vars.toArray()).getRawPath();
+ return decode ? HttpUtils.pathDecode(uriPath) : uriPath;
+ }
private String doGetPath(boolean decode, boolean addSlash) {
String path = HttpUtils.getPathToMatch(message, addSlash);
return decode ? HttpUtils.pathDecode(path) : path;
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorContextImpl.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorContextImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorContextImpl.java Mon May 20 10:14:20 2013
@@ -79,7 +79,11 @@ public class WriterInterceptorContextImp
return;
}
WriterInterceptor next = writers.remove(0);
- next.aroundWriteTo(this);
+ try {
+ next.aroundWriteTo(this);
+ } catch (IOException ex) {
+ throw ex;
+ }
}
@Override
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorMBW.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorMBW.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorMBW.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/WriterInterceptorMBW.java Mon May 20 10:14:20 2013
@@ -31,6 +31,7 @@ import javax.ws.rs.ext.WriterInterceptor
import javax.ws.rs.ext.WriterInterceptorContext;
import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxrs.utils.HttpUtils;
import org.apache.cxf.jaxrs.utils.JAXRSUtils;
import org.apache.cxf.message.Message;
@@ -59,6 +60,9 @@ public class WriterInterceptorMBW implem
Object mtObject = headers.getFirst(HttpHeaders.CONTENT_TYPE);
MediaType mt = mtObject == null ? c.getMediaType() : JAXRSUtils.toMediaType(mtObject.toString());
m.put(Message.CONTENT_TYPE, mtObject.toString());
+
+ HttpUtils.convertHeaderValuesToStringIfNeeded(headers);
+
writer.writeTo(c.getEntity(),
c.getType(),
c.getGenericType(),
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Mon May 20 10:14:20 2013
@@ -221,6 +221,7 @@ public class JAXRSOutInterceptor extends
responseHeaders.putSingle(HttpHeaders.CONTENT_LENGTH, "0");
responseHeaders.remove(HttpHeaders.CONTENT_TYPE);
message.remove(Message.CONTENT_TYPE);
+ HttpUtils.convertHeaderValuesToStringIfNeeded(responseHeaders);
return;
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Mon May 20 10:14:20 2013
@@ -99,7 +99,7 @@ public abstract class ProviderFactory {
private List<ProviderInfo<ContextProvider<?>>> contextProviders =
new ArrayList<ProviderInfo<ContextProvider<?>>>(1);
- private ParamConverterProvider newParamConverter;
+ private List<ParamConverterProvider> newParamConverters;
// List of injected providers
private Collection<ProviderInfo<?>> injectedProviders =
@@ -251,12 +251,15 @@ public abstract class ProviderFactory {
public <T> ParamConverter<T> createParameterHandler(Class<T> paramType) {
- if (newParamConverter != null) {
- return newParamConverter.getConverter(paramType, null, null);
- } else {
- return null;
- }
-
+ if (newParamConverters != null) {
+ for (ParamConverterProvider newParamConverter : newParamConverters) {
+ ParamConverter<T> converter = newParamConverter.getConverter(paramType, null, null);
+ if (converter != null) {
+ return converter;
+ }
+ }
+ }
+ return null;
}
protected <T> void handleMapper(List<T> candidates,
@@ -509,7 +512,10 @@ public abstract class ProviderFactory {
if (ParamConverterProvider.class.isAssignableFrom(providerCls)) {
//TODO: review the possibility of ParamConverterProvider needing to have Contexts injected
Object converter = provider.getProvider();
- newParamConverter = (ParamConverterProvider)converter;
+ if (newParamConverters == null) {
+ newParamConverters = new LinkedList<ParamConverterProvider>();
+ }
+ newParamConverters.add((ParamConverterProvider)converter);
}
}
sortReaders();
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=1484415&r1=1484414&r2=1484415&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 Mon May 20 10:14:20 2013
@@ -42,6 +42,8 @@ import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.PathSegment;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.ext.RuntimeDelegate;
+import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.logging.LogUtils;
@@ -49,6 +51,7 @@ import org.apache.cxf.common.util.String
import org.apache.cxf.common.util.UrlUtils;
import org.apache.cxf.jaxrs.impl.HttpHeadersImpl;
import org.apache.cxf.jaxrs.impl.PathSegmentImpl;
+import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl;
import org.apache.cxf.jaxrs.model.ParameterType;
import org.apache.cxf.message.Message;
import org.apache.cxf.service.model.EndpointInfo;
@@ -66,8 +69,8 @@ public final class HttpUtils {
private static final String REQUEST_PATH_TO_MATCH_SLASH = "path_to_match_slash";
private static final String HTTP_SCHEME = "http";
+ private static final String LOCAL_HOST_IP_ADDRESS = "127.0.0.1";
private static final String ANY_IP_ADDRESS = "0.0.0.0";
- private static final String ANY_IP_ADDRESS_START = "://0.0.0.0";
private static final int DEFAULT_HTTP_PORT = 80;
private static final Pattern ENCODE_PATTERN = Pattern.compile("%[0-9a-fA-F][0-9a-fA-F]");
@@ -194,6 +197,28 @@ public final class HttpUtils {
return Headers.toHttpDate(date);
}
+ public static void convertHeaderValuesToStringIfNeeded(Map<String, List<Object>> headers) {
+ // In theory there could be custom RuntimeDelegates with custom header handlers
+ RuntimeDelegate rd = RuntimeDelegate.getInstance();
+ if (rd instanceof RuntimeDelegateImpl || rd == null) {
+ return;
+ }
+ for (Map.Entry<String, List<Object>> entry : headers.entrySet()) {
+ List<Object> values = entry.getValue();
+ if (!values.isEmpty()) {
+ @SuppressWarnings("unchecked")
+ HeaderDelegate<Object> hd =
+ (HeaderDelegate<Object>)rd.createHeaderDelegate(values.get(0).getClass());
+ if (hd != null) {
+ for (int i = 0; i < values.size(); i++) {
+ values.set(i, hd.toString(values.get(i)));
+ }
+ }
+ }
+ }
+
+ }
+
public static Date getHttpDate(String value) {
if (value == null) {
return null;
@@ -275,13 +300,20 @@ public final class HttpUtils {
HttpServletRequest request =
(HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
boolean absolute = u.isAbsolute();
- if (request != null && (!absolute || u.toString().contains(ANY_IP_ADDRESS_START))) {
+ if (request != null && (!absolute || isLocalHostOrAnyIpAddress(u))) {
String serverAndPort = request.getServerName();
boolean localAddressUsed = false;
- if (absolute && ANY_IP_ADDRESS.equals(serverAndPort)) {
- serverAndPort = request.getLocalAddr();
- localAddressUsed = true;
+ if (absolute) {
+ if (ANY_IP_ADDRESS.equals(serverAndPort)) {
+ serverAndPort = request.getLocalAddr();
+ localAddressUsed = true;
+ }
+ if (LOCAL_HOST_IP_ADDRESS.equals(serverAndPort)) {
+ serverAndPort = "localhost";
+ localAddressUsed = true;
+ }
}
+
int port = localAddressUsed ? request.getLocalPort() : request.getServerPort();
if (port != DEFAULT_HTTP_PORT) {
@@ -292,14 +324,20 @@ public final class HttpUtils {
u = URI.create(base + u.toString());
} else {
int originalPort = u.getPort();
- String replaceValue = originalPort == -1 ? ANY_IP_ADDRESS
- : ANY_IP_ADDRESS + ":" + originalPort;
+ String hostValue = u.getHost().equals(ANY_IP_ADDRESS)
+ ? ANY_IP_ADDRESS : LOCAL_HOST_IP_ADDRESS;
+ String replaceValue = originalPort == -1 ? hostValue : hostValue + ":" + originalPort;
u = URI.create(u.toString().replace(replaceValue, serverAndPort));
}
}
return u;
}
+ private static boolean isLocalHostOrAnyIpAddress(URI u) {
+ String host = u.getHost();
+ return host != null && (LOCAL_HOST_IP_ADDRESS.equals(host)) || ANY_IP_ADDRESS.equals(host);
+ }
+
public static void resetRequestURI(Message m, String requestURI) {
m.remove(REQUEST_PATH_TO_MATCH_SLASH);
m.remove(REQUEST_PATH_TO_MATCH);
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Mon May 20 10:14:20 2013
@@ -135,8 +135,10 @@ import org.apache.cxf.jaxrs.model.BeanPa
import org.apache.cxf.jaxrs.model.BeanResourceInfo;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
import org.apache.cxf.jaxrs.model.ClassResourceInfoComparator;
+import org.apache.cxf.jaxrs.model.MethodInvocationInfo;
import org.apache.cxf.jaxrs.model.OperationResourceInfo;
import org.apache.cxf.jaxrs.model.OperationResourceInfoComparator;
+import org.apache.cxf.jaxrs.model.OperationResourceInfoStack;
import org.apache.cxf.jaxrs.model.Parameter;
import org.apache.cxf.jaxrs.model.ParameterType;
import org.apache.cxf.jaxrs.model.ProviderInfo;
@@ -251,7 +253,7 @@ public final class JAXRSUtils {
public static List<MediaType> getMediaTypes(String[] values) {
List<MediaType> supportedMimeTypes = new ArrayList<MediaType>(values.length);
for (int i = 0; i < values.length; i++) {
- supportedMimeTypes.add(toMediaType(values[i]));
+ supportedMimeTypes.addAll(parseMediaTypes(values[i]));
}
return supportedMimeTypes;
}
@@ -497,6 +499,7 @@ public final class JAXRSUtils {
MEDIA_TYPE_Q_PARAM,
MEDIA_TYPE_QS_PARAM));
}
+ pushOntoStack(ori, matchedValues, message);
return ori;
}
@@ -1375,6 +1378,7 @@ public final class JAXRSUtils {
httpHeaders.putSingle(HttpHeaders.CONTENT_LENGTH, Long.toString(size));
}
}
+ HttpUtils.convertHeaderValuesToStringIfNeeded(httpHeaders);
writer.writeTo(entity, type, genericType, annotations, mediaType,
httpHeaders,
entityStream);
@@ -1808,4 +1812,33 @@ public final class JAXRSUtils {
public static ClassResourceInfo getRootResource(Message m) {
return (ClassResourceInfo)m.getExchange().get(JAXRSUtils.ROOT_RESOURCE_CLASS);
}
+
+ public static void pushOntoStack(OperationResourceInfo ori,
+ MultivaluedMap<String, String> params,
+ Message msg) {
+ OperationResourceInfoStack stack = msg.get(OperationResourceInfoStack.class);
+ if (stack == null) {
+ stack = new OperationResourceInfoStack();
+ msg.put(OperationResourceInfoStack.class, stack);
+ }
+
+
+ List<String> values = null;
+ if (params.size() <= 1) {
+ values = Collections.emptyList();
+ } else {
+ values = new ArrayList<String>(params.size() - 1);
+ for (Parameter pm : ori.getParameters()) {
+ if (pm.getType() == ParameterType.PATH) {
+ List<String> paramValues = params.get(pm.getName());
+ if (paramValues != null) {
+ values.addAll(paramValues);
+ }
+
+ }
+ }
+ }
+ Class<?> realClass = ori.getClassResourceInfo().getServiceClass();
+ stack.push(new MethodInvocationInfo(ori, realClass, values));
+ }
}
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=1484415&r1=1484414&r2=1484415&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 Mon May 20 10:14:20 2013
@@ -191,6 +191,14 @@ public class HttpUtilsTest extends Asser
@Test
public void testReplaceAnyIPAddressWithPort() {
+ doTestReplaceAnyIPAddressWithPort(true);
+ }
+ @Test
+ public void testReplaceLHostIPAddressWithPort() {
+ doTestReplaceAnyIPAddressWithPort(false);
+ }
+
+ private void doTestReplaceAnyIPAddressWithPort(boolean anyIp) {
Message m = new MessageImpl();
HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
m.put(AbstractHTTPDestination.HTTP_REQUEST, req);
@@ -201,7 +209,8 @@ public class HttpUtilsTest extends Asser
req.getServerPort();
EasyMock.expectLastCall().andReturn(8080);
EasyMock.replay(req);
- URI u = HttpUtils.toAbsoluteUri(URI.create("http://0.0.0.0:8080/bar/foo"), m);
+ String host = anyIp ? "0.0.0.0" : "127.0.0.1";
+ URI u = HttpUtils.toAbsoluteUri(URI.create("http://" + host + ":8080/bar/foo"), m);
assertEquals("http://localhost:8080/bar/foo", u.toString());
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java?rev=1484415&r1=1484414&r2=1484415&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Mon May 20 10:14:20 2013
@@ -366,6 +366,27 @@ public class JAXRSUtilsTest extends Asse
}
@Test
+ public void testGetMediaTypes() {
+ List<MediaType> types = JAXRSUtils.getMediaTypes(new String[]{"text/xml"});
+ assertEquals(1, types.size());
+ assertEquals(MediaType.TEXT_XML_TYPE, types.get(0));
+ }
+ @Test
+ public void testGetMediaTypes2() {
+ List<MediaType> types = JAXRSUtils.getMediaTypes(new String[]{"text/xml", "text/plain"});
+ assertEquals(2, types.size());
+ assertEquals(MediaType.TEXT_XML_TYPE, types.get(0));
+ assertEquals(MediaType.TEXT_PLAIN_TYPE, types.get(1));
+ }
+ @Test
+ public void testGetMediaTypes3() {
+ List<MediaType> types = JAXRSUtils.getMediaTypes(new String[]{"text/xml, text/plain"});
+ assertEquals(2, types.size());
+ assertEquals(MediaType.TEXT_XML_TYPE, types.get(0));
+ assertEquals(MediaType.TEXT_PLAIN_TYPE, types.get(1));
+ }
+
+ @Test
public void testFindTargetResourceClassWithTemplates() throws Exception {
JAXRSServiceFactoryBean sf = new JAXRSServiceFactoryBean();
sf.setResourceClasses(org.apache.cxf.jaxrs.resources.BookStoreTemplates.class);
@@ -446,12 +467,12 @@ public class JAXRSUtilsTest extends Asse
String contentTypes = "*/*";
OperationResourceInfo ori = findTargetResourceClass(resources,
- null, "/bookstore/books/123", "GET", new MetadataMap<String, String>(), contentTypes,
+ createMessage2(), "/bookstore/books/123", "GET", new MetadataMap<String, String>(), contentTypes,
getTypes("*/*"));
assertNotNull(ori);
assertEquals("getBook", ori.getMethodToInvoke().getName());
- ori = findTargetResourceClass(resources, null,
+ ori = findTargetResourceClass(resources, createMessage2(),
"/bookstore/books/123/true/chapter/1", "GET", new MetadataMap<String, String>(), contentTypes,
getTypes("*/*"));
assertNotNull(ori);