Repository: cxf
Updated Branches:
  refs/heads/master dc8b98085 -> 62d904855


[CXF-6211] Updating HTTP Transport Headers helper to check Conent-Type in the 
headers map first


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/62d90485
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/62d90485
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/62d90485

Branch: refs/heads/master
Commit: 62d904855de555476bc6f91259d9cb983adaf124
Parents: dc8b980
Author: Sergey Beryozkin <sberyoz...@talend.com>
Authored: Tue Jan 20 16:38:55 2015 +0000
Committer: Sergey Beryozkin <sberyoz...@talend.com>
Committed: Tue Jan 20 16:38:55 2015 +0000

----------------------------------------------------------------------
 .../org/apache/cxf/transport/http/Headers.java  |  9 +++++-
 .../apache/cxf/systest/jaxrs/BookInterface.java |  4 +++
 .../systest/jaxrs/BookStoreWithInterface.java   | 11 +++++++
 .../systest/jaxrs/BookStoreWithInterface2.java  |  5 ++++
 .../jaxrs/CustomJaxbElementProvider.java        | 10 +++++++
 .../JAXRSClientServerProxySpringBookTest.java   | 31 +++++++++++++++++++-
 .../security/SecureBookStoreNoAnnotations.java  |  4 +++
 7 files changed, 72 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/62d90485/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java
----------------------------------------------------------------------
diff --git 
a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java 
b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java
index baf8b71..19c1538 100644
--- 
a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java
+++ 
b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java
@@ -306,7 +306,14 @@ public class Headers {
     }
 
     public String determineContentType() {
-        String ct  = (String)message.get(Message.CONTENT_TYPE);
+        String ct = null;
+        List<Object> ctList = 
CastUtils.cast(headers.get(Message.CONTENT_TYPE));
+        if (ctList != null && ctList.size() == 1) {
+            ct = ctList.get(0).toString();
+        } else {
+            ct  = (String)message.get(Message.CONTENT_TYPE);
+        }
+        
         String enc = (String)message.get(Message.ENCODING);
 
         if (null != ct) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/62d90485/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookInterface.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookInterface.java 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookInterface.java
index d739072..a7f5e5e 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookInterface.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookInterface.java
@@ -20,6 +20,7 @@
 package org.apache.cxf.systest.jaxrs;
 
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
@@ -42,4 +43,7 @@ public interface BookInterface {
     @Produces("application/xml")
     Book getThatBook() throws BookNotFoundFault;
     
+    @POST
+    @Path("/thosebooks")
+    Book echoBook(Book b);
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/62d90485/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
index 741f1c6..d7eb4e7 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
@@ -39,6 +39,8 @@
 package org.apache.cxf.systest.jaxrs;
 
 import org.apache.cxf.annotations.SchemaValidation;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+import org.apache.cxf.message.Message;
 
 
 
@@ -67,6 +69,15 @@ public class BookStoreWithInterface extends BookStoreStorage 
implements BookInte
         return doGetBook(id);
     }
     
+    public Book echoBook(Book b) {
+        String ct = 
(String)JAXRSUtils.getCurrentMessage().get(Message.CONTENT_TYPE);
+        if ("application/xml;a=b".equals(ct)) {
+            return b;
+        } else {
+            throw new RuntimeException();
+        }
+    }
+    
     private Book doGetBook(Long id) throws BookNotFoundFault {
         //System.out.println("----invoking getBook with id: " + id);
         Book book = books.get(id);

http://git-wip-us.apache.org/repos/asf/cxf/blob/62d90485/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface2.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface2.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface2.java
index c692ad5..4e12566 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface2.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface2.java
@@ -100,4 +100,9 @@ public class BookStoreWithInterface2 extends 
BookStoreStorage implements BookInt
         return books.get(123L);
     }
 
+    public Book echoBook(Book b) {
+        
+        return b;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/62d90485/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
index 76af000..dcc2705 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
@@ -18,11 +18,14 @@
  */
 package org.apache.cxf.systest.jaxrs;
 
+import java.io.IOException;
+import java.io.OutputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.UriInfo;
 
 import org.apache.cxf.annotations.SchemaValidation;
@@ -45,4 +48,11 @@ public class CustomJaxbElementProvider extends 
JAXBElementProvider<Book> {
         }
         
     }
+    @Override
+    public void writeTo(Book obj, Class<?> cls, Type genericType, Annotation[] 
anns,  
+                        MediaType m, MultivaluedMap<String, Object> headers, 
OutputStream os) 
+        throws IOException {
+        headers.putSingle("Content-Type", MediaType.valueOf(m.toString() + 
";a=b"));
+        super.writeTo(obj, cls, genericType, anns, m, headers, os);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/62d90485/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java
index 7141218..a2d1052 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java
@@ -24,8 +24,11 @@ import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
+import java.util.Collections;
 import java.util.List;
 
+import javax.ws.rs.core.Response;
+
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -114,7 +117,33 @@ public class JAXRSClientServerProxySpringBookTest extends 
AbstractBusClientServe
     
     @Test
     public void testGetThatBookInterfacePrototype() throws Exception {
-        getBook("http://localhost:"; + PORT + 
"/test/5/bookstorestorage/thosebooks/123");
+        
+        URL url = new URL("http://localhost:"; + PORT + 
"/test/5/bookstorestorage/thosebooks/123");
+        URLConnection connect = url.openConnection();
+        connect.addRequestProperty("Content-Type", "*/*");
+        connect.addRequestProperty("Accept", "application/xml");
+        connect.addRequestProperty("SpringProxy", "true");
+        InputStream in = connect.getInputStream();           
+
+        InputStream expected = getClass()
+            .getResourceAsStream("resources/expected_get_book123.txt");
+        
assertEquals(stripXmlInstructionIfNeeded(getStringFromInputStream(expected)), 
+                     
stripXmlInstructionIfNeeded(getStringFromInputStream(in)));
+        String ct = connect.getHeaderField("Content-Type");
+        assertEquals("application/xml;a=b", ct);
+    }
+    
+    @Test
+    public void testEchoBook() throws Exception {
+        
+        URL url = new URL("http://localhost:"; + PORT + 
"/test/5/bookstorestorage/thosebooks");
+        WebClient wc = WebClient.create(url.toString(), 
+                                        Collections.singletonList(new 
CustomJaxbElementProvider()));
+        Response r = wc.post(new Book("proxy", 333L));
+        Book book = r.readEntity(Book.class);
+        assertEquals(333L, book.getId());
+        String ct = r.getHeaderString("Content-Type");
+        assertEquals("application/xml;a=b", ct);
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/cxf/blob/62d90485/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/SecureBookStoreNoAnnotations.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/SecureBookStoreNoAnnotations.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/SecureBookStoreNoAnnotations.java
index 5b61277..f980d89 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/SecureBookStoreNoAnnotations.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/security/SecureBookStoreNoAnnotations.java
@@ -53,4 +53,8 @@ public class SecureBookStoreNoAnnotations implements 
BookInterface {
     public Book getThatBook() throws BookNotFoundFault {
         return books.get(123L);
     }
+
+    public Book echoBook(Book b) {
+        return b;
+    }
 }

Reply via email to