Author: sergeyb
Date: Fri Aug 30 12:17:08 2013
New Revision: 1518949
URL: http://svn.apache.org/r1518949
Log:
Merged revisions 1518943 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1518943 | sergeyb | 2013-08-30 12:52:10 +0100 (Fri, 30 Aug 2013) | 1 line
[CXF-5243,CXF-5244] Adding a test to confirm a stream can be obtained from
the filter on the trunk, fixing issues with updating content or accept types
........
Modified:
cxf/branches/2.7.x-fixes/ (props changed)
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/trunk:r1518943
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java?rev=1518949&r1=1518948&r2=1518949&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java
(original)
+++
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java
Fri Aug 30 12:17:08 2013
@@ -45,7 +45,7 @@ public class ContainerRequestContextImpl
@Override
public InputStream getEntityStream() {
- return m.get(InputStream.class);
+ return m.getContent(InputStream.class);
}
Modified:
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java?rev=1518949&r1=1518948&r2=1518949&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
(original)
+++
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
Fri Aug 30 12:17:08 2013
@@ -21,6 +21,7 @@ package org.apache.cxf.jaxrs.interceptor
import java.io.IOException;
import java.util.List;
+import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -36,6 +37,7 @@ import javax.ws.rs.core.Response;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.jaxrs.JAXRSServiceImpl;
import org.apache.cxf.jaxrs.ext.RequestHandler;
@@ -124,24 +126,44 @@ public class JAXRSInInterceptor extends
if (JAXRSUtils.runContainerRequestFilters(providerFactory, message,
true, null)) {
return;
}
+ // HTTP method
String httpMethod = HttpUtils.getProtocolHeader(message,
Message.HTTP_REQUEST_METHOD,
HttpMethod.POST, true);
- String requestContentType = (String)message.get(Message.CONTENT_TYPE);
+ // Path to match
+ String rawPath = HttpUtils.getPathToMatch(message, true);
+
+ Map<String, List<String>> protocolHeaders = CastUtils.cast((Map<?,
?>)message.get(Message.PROTOCOL_HEADERS));
+
+ // Content-Type
+ String requestContentType = null;
+ List<String> ctHeaderValues =
protocolHeaders.get(Message.CONTENT_TYPE);
+ if (ctHeaderValues != null) {
+ requestContentType = ctHeaderValues.get(0);
+ message.put(Message.CONTENT_TYPE, requestContentType);
+ }
if (requestContentType == null) {
- requestContentType = MediaType.WILDCARD;
+ requestContentType = (String)message.get(Message.CONTENT_TYPE);
+
+ if (requestContentType == null) {
+ requestContentType = MediaType.WILDCARD;
+ }
}
- String rawPath = HttpUtils.getPathToMatch(message, true);
+ // Accept
+ String acceptTypes = null;
+ List<String> acceptHeaderValues =
protocolHeaders.get(Message.ACCEPT_CONTENT_TYPE);
+ if (acceptHeaderValues != null) {
+ acceptTypes = acceptHeaderValues.get(0);
+ message.put(Message.ACCEPT_CONTENT_TYPE, acceptTypes);
+ }
- //1. Matching target resource class
- Service service = message.getExchange().get(Service.class);
- List<ClassResourceInfo> resources =
((JAXRSServiceImpl)service).getClassResourceInfos();
-
- String acceptTypes = HttpUtils.getProtocolHeader(message,
Message.ACCEPT_CONTENT_TYPE, null);
if (acceptTypes == null) {
- acceptTypes = "*/*";
- message.put(Message.ACCEPT_CONTENT_TYPE, acceptTypes);
+ acceptTypes = HttpUtils.getProtocolHeader(message,
Message.ACCEPT_CONTENT_TYPE, null);
+ if (acceptTypes == null) {
+ acceptTypes = "*/*";
+ message.put(Message.ACCEPT_CONTENT_TYPE, acceptTypes);
+ }
}
List<MediaType> acceptContentTypes = null;
try {
@@ -151,12 +173,17 @@ public class JAXRSInInterceptor extends
}
message.getExchange().put(Message.ACCEPT_CONTENT_TYPE,
acceptContentTypes);
+ //1. Matching target resource class
+ Service service = message.getExchange().get(Service.class);
+ List<ClassResourceInfo> resources =
((JAXRSServiceImpl)service).getClassResourceInfos();
+
MultivaluedMap<String, String> values = new MetadataMap<String,
String>();
ClassResourceInfo resource = JAXRSUtils.selectResourceClass(resources,
rawPath,
values,
message);
if (resource == null) {
+
org.apache.cxf.common.i18n.Message errorMsg =
new org.apache.cxf.common.i18n.Message("NO_ROOT_EXC",
BUNDLE,
Modified:
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java?rev=1518949&r1=1518948&r2=1518949&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
(original)
+++
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
Fri Aug 30 12:17:08 2013
@@ -57,6 +57,7 @@ import javax.ws.rs.ext.WriterInterceptor
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
+import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
@@ -136,6 +137,15 @@ public class BookServer20 extends Abstra
Response.status(500).type("text/plain")
.entity("Prematch filter error").build());
}
+
+ MediaType mt = context.getMediaType();
+ if (mt != null && mt.toString().equals("text/xml")) {
+ context.getHeaders().putSingle("Content-Type",
"application/xml");
+ }
+ List<MediaType> acceptTypes = context.getAcceptableMediaTypes();
+ if (acceptTypes.size() == 1 &&
acceptTypes.get(0).toString().equals("text/mistypedxml")) {
+ context.getHeaders().putSingle("Accept", "text/xml");
+ }
}
}
@@ -168,6 +178,12 @@ public class BookServer20 extends Abstra
if (path.endsWith("books/checkN")) {
URI requestURI = URI.create(path.replace("N", "2"));
context.setRequestUri(requestURI);
+
+ String body =
IOUtils.readStringFromStream(context.getEntityStream());
+ if (!"s".equals(body)) {
+ throw new RuntimeException();
+ }
+
replaceStream(context);
} else if (path.endsWith("books/check2")) {
replaceStream(context);
Modified:
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java?rev=1518949&r1=1518948&r2=1518949&view=diff
==============================================================================
---
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
(original)
+++
cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
Fri Aug 30 12:17:08 2013
@@ -238,6 +238,18 @@ public class JAXRS20ClientServerBookTest
}
@Test
+ public void testPostReplaceBookMistypedCT() throws Exception {
+
+ String endpointAddress = "http://localhost:" + PORT +
"/bookstore/books2";
+ WebClient wc = WebClient.create(endpointAddress,
+ Collections.singletonList(new
ReplaceBodyFilter()));
+
WebClient.getConfig(wc).getHttpConduit().getClient().setReceiveTimeout(1000000L);
+ wc.accept("text/mistypedxml").type("text/xml");
+ Book book = wc.post(new Book("book", 555L), Book.class);
+ assertEquals(561L, book.getId());
+ }
+
+ @Test
public void testPostGetCollectionGenericEntityAndType() throws Exception {
String endpointAddress =