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 2011/01/03 16:20:28 UTC

svn commit: r1054647 - in /cxf/branches/2.3.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ systests/jax...

Author: sergeyb
Date: Mon Jan  3 15:20:27 2011
New Revision: 1054647

URL: http://svn.apache.org/viewvc?rev=1054647&view=rev
Log:
Merged revisions 1054645 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1054645 | sergeyb | 2011-01-03 15:17:54 +0000 (Mon, 03 Jan 2011) | 1 line
  
  [CXF-3227] Adding JAXRSDataBinding
........

Added:
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXRSDataBinding.java
      - copied unchanged from r1054645, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXRSDataBinding.java
Modified:
    cxf/branches/2.3.x-fixes/   (props changed)
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorld.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorldImpl.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jan  3 15:20:27 2011
@@ -1 +1 @@
-/cxf/trunk:1041183,1041790,1041993,1042346,1042571,1042724,1042805,1042821,1043225,1043229,1043902,1043907,1043954,1044085,1044238-1044305,1045024,1048915,1048919,1048930,1049078,1049426,1049937,1050005,1050021,1050095,1050102,1050113,1050156,1050165,1050280,1051115,1051613,1051790,1051792,1052338,1052516,1052541,1052990,1052993-1052994,1052996-1052997,1053114,1053119,1053123,1053239,1053290,1053402,1053654,1053858,1053868,1053870,1053887
+/cxf/trunk:1041183,1041790,1041993,1042346,1042571,1042724,1042805,1042821,1043225,1043229,1043902,1043907,1043954,1044085,1044238-1044305,1045024,1048915,1048919,1048930,1049078,1049426,1049937,1050005,1050021,1050095,1050102,1050113,1050156,1050165,1050280,1051115,1051613,1051790,1051792,1052338,1052516,1052541,1052990,1052993-1052994,1052996-1052997,1053114,1053119,1053123,1053239,1053290,1053402,1053654,1053858,1053868,1053870,1053887,1054645

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java?rev=1054647&r1=1054646&r2=1054647&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java Mon Jan  3 15:20:27 2011
@@ -81,8 +81,6 @@ public class ThreadLocalMessageContext e
     public void put(Object key, Object value) {
         if (get() != null) {
             get().put(key, value);
-        } else {
-            throw new IllegalStateException("MessageContext is not set");
         }
     }
 

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1054647&r1=1054646&r2=1054647&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Mon Jan  3 15:20:27 2011
@@ -77,6 +77,8 @@ import org.apache.cxf.jaxrs.utils.Inject
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
 import org.apache.cxf.jaxrs.utils.schemas.SchemaHandler;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptorChain;
 import org.apache.cxf.staxutils.DelegatingXMLStreamWriter;
 import org.apache.cxf.staxutils.DepthXMLStreamReader;
 import org.apache.cxf.staxutils.StaxStreamFilter;
@@ -171,15 +173,26 @@ public abstract class AbstractJAXBProvid
     
     protected void checkContentLength() {
         if (mc != null) {
-            List<String> values = mc.getHttpHeaders().getRequestHeader(HttpHeaders.CONTENT_LENGTH);
-            if (values.size() == 1 && "0".equals(values.get(0))) {
-                String message = new org.apache.cxf.common.i18n.Message("EMPTY_BODY", BUNDLE).toString();
-                LOG.warning(message);
-                throw new WebApplicationException(400);
+            HttpHeaders headers = mc.getHttpHeaders();
+            if (headers != null) {
+                List<String> values = mc.getHttpHeaders().getRequestHeader(HttpHeaders.CONTENT_LENGTH);
+                if (values.size() == 1 && "0".equals(values.get(0))) {
+                    String message = new org.apache.cxf.common.i18n.Message("EMPTY_BODY", BUNDLE).toString();
+                    LOG.warning(message);
+                    throw new WebApplicationException(400);
+                }
             }
         }
     }
     
+    protected <T> T getStaxHandlerFromCurrentMessage(Class<T> staxCls) {
+        Message m = PhaseInterceptorChain.getCurrentMessage();
+        if (m != null) {
+            return staxCls.cast(m.getContent(staxCls));
+        }
+        return null;
+    }
+    
     @SuppressWarnings("unchecked")
     protected Object convertToJaxbElementIfNeeded(Object obj, Class<?> cls, Type genericType) 
         throws Exception {

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=1054647&r1=1054646&r2=1054647&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Mon Jan  3 15:20:27 2011
@@ -205,11 +205,15 @@ public class JAXBElementProvider extends
                     reader = factory.createXMLStreamReader(is);
                 } catch (XMLStreamException e) {
                     throw new WebApplicationException(
-                        new RuntimeException("Cant' create XMLStreamReader", e));
+                        new RuntimeException("Can not create XMLStreamReader", e));
                 }
             }
         }
         
+        if (reader == null && is == null) {
+            reader = getStaxHandlerFromCurrentMessage(XMLStreamReader.class);
+        }
+        
         reader = createTransformReaderIfNeeded(reader, is);
         if (InjectionUtils.isSupportedCollectionOrArray(type)) {
             return new JAXBCollectionWrapperReader(createNewReaderIfNeeded(reader, is));
@@ -235,7 +239,7 @@ public class JAXBElementProvider extends
         throws IOException {
         try {
             Object actualObject = checkAdapter(obj, cls, anns, true);
-            Class<?> actualClass = obj != actualObject ? actualObject.getClass() : cls;
+            Class<?> actualClass = obj != actualObject || cls.isInterface() ? actualObject.getClass() : cls;
             String encoding = HttpUtils.getSetEncoding(m, headers, null);
             if (InjectionUtils.isSupportedCollectionOrArray(actualClass)) {
                 actualClass = InjectionUtils.getActualType(genericType);
@@ -385,12 +389,15 @@ public class JAXBElementProvider extends
         }
         XMLStreamWriter writer = getStreamWriter(obj, os, mt);
         if (writer != null) {
-            if (mc != null) {
+            if (os == null) {
+                ms.setProperty(Marshaller.JAXB_FRAGMENT, true);
+            } else if (mc != null) {
                 if (mc.getContent(XMLStreamWriter.class) != null) {
                     ms.setProperty(Marshaller.JAXB_FRAGMENT, true);
                 }
-                mc.put(XMLStreamWriter.class.getName(), writer);
-            }    
+                mc.put(XMLStreamWriter.class.getName(), writer);    
+            }
+                
             marshalToWriter(ms, obj, writer, mt);
             if (mc != null && mc.getContent(XMLStreamWriter.class) != null) {
                 writer.writeEndDocument();
@@ -421,6 +428,10 @@ public class JAXBElementProvider extends
             if (writer == null && enableStreaming) {
                 writer = StaxUtils.createXMLStreamWriter(os);
             }
+        } 
+        
+        if (writer == null && os == null) {
+            writer = getStaxHandlerFromCurrentMessage(XMLStreamWriter.class);
         }
         return createTransformWriterIfNeeded(writer, os);
     }

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=1054647&r1=1054646&r2=1054647&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java Mon Jan  3 15:20:27 2011
@@ -110,6 +110,24 @@ public class JAXRSSoapBookTest extends A
         useHelloService(hw);
     }
     
+    @Test
+    public void testHelloSoapCustomDataBinding() throws Exception {
+        final QName serviceName = new QName("http://hello.com", "HelloWorld");
+        final QName portName = new QName("http://hello.com", "HelloWorldPort");
+        final String address = "http://localhost:" + PORT + "/test/services/hello-soap-databinding";
+        
+        Service service = Service.create(serviceName);
+        service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, address);
+    
+        HelloWorld hw = service.getPort(HelloWorld.class); 
+    
+        User user = new UserImpl("Barry");
+        User user2 = hw.echoUser(user);
+        
+        assertNotSame(user, user2);
+        assertEquals("Barry", user.getName());
+    }
+    
     private void useHelloService(HelloWorld service) {
         assertEquals("Hello Barry", service.sayHi("Barry"));
         assertEquals("Hello Fred", service.sayHiToUser(new UserImpl("Fred")));

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorld.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorld.java?rev=1054647&r1=1054646&r2=1054647&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorld.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorld.java Mon Jan  3 15:20:27 2011
@@ -20,6 +20,8 @@ package org.apache.cxf.systest.jaxrs.jax
 
 import java.util.Map;
 
+import javax.jws.WebParam;
+import javax.jws.WebResult;
 import javax.jws.WebService;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -54,4 +56,11 @@ public interface HelloWorld {
     @Consumes("text/xml")
     @XmlJavaTypeAdapter(IntegerUserMapAdapter.class)
     Map<Integer, User> echoUsers(@XmlJavaTypeAdapter(IntegerUserMapAdapter.class) Map<Integer, User> users);
+    
+    @POST
+    @Produces("text/xml")
+    @Consumes("text/xml")
+    @Path("user")
+    @WebResult(name = "User")
+    User echoUser(@WebParam(name = "User") User user);
 }

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorldImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorldImpl.java?rev=1054647&r1=1054646&r2=1054647&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorldImpl.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/jaxws/HelloWorldImpl.java Mon Jan  3 15:20:27 2011
@@ -50,5 +50,9 @@ public class HelloWorldImpl implements H
         return us;
     }
 
+    public User echoUser(User user) {
+        return user;
+    }
+
 }
 // END SNIPPET: service

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml?rev=1054647&r1=1054646&r2=1054647&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml Mon Jan  3 15:20:27 2011
@@ -73,7 +73,7 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
   <jaxrs:server id="hello_rest" address="/hello-rest">
     <jaxrs:serviceBeans>
       <bean class="org.apache.cxf.systest.jaxrs.jaxws.HelloWorldImpl"/>
-    </jaxrs:serviceBeans>		   
+    </jaxrs:serviceBeans>
   </jaxrs:server>
 
   <jaxws:endpoint xmlns:s="http://hello.com"
@@ -92,7 +92,26 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
       <jaxws:properties>
           <entry key="org.apache.cxf.endpoint.private" value="true"/>
       </jaxws:properties>
-  </jaxws:endpoint>    
+  </jaxws:endpoint>
+  
+  <jaxws:endpoint xmlns:s="http://hello.com"
+      serviceName="s:HelloWorld"
+      endpointName="s:HelloWorldPort"
+      id="hello_soap-databinding"
+      implementor="org.apache.cxf.systest.jaxrs.jaxws.HelloWorldImpl"
+      address="/hello-soap-databinding">
+      
+      <jaxws:dataBinding>
+          <ref bean="jaxrs-data-binding"/>
+      </jaxws:dataBinding>
+      
+  </jaxws:endpoint>        
+
+  <bean id="jaxrs-data-binding" class="org.apache.cxf.jaxrs.provider.JAXRSDataBinding">
+      <property name="provider" ref="jaxbProviderSoap"/>
+  </bean>
+
+  <bean id="jaxbProviderSoap" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/>
 
   <jaxrs:server id="restservice2"
 		        address="/rest2">
@@ -109,7 +128,7 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
     </jaxrs:serviceBeans>
     
     <jaxrs:providers>
-       <ref bean="jaxbProvider" />
+       <ref bean="jaxbProviderFI" />
     </jaxrs:providers>
 
     <jaxrs:properties>
@@ -124,7 +143,7 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
     </jaxrs:serviceBeans>
     
     <jaxrs:providers>
-       <ref bean="jaxbProvider" />
+       <ref bean="jaxbProviderFI" />
     </jaxrs:providers>
   </jaxrs:server>
 
@@ -135,7 +154,7 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
     </jaxrs:serviceBeans>
     
     <jaxrs:providers>
-       <ref bean="jaxbProvider" />
+       <ref bean="jaxbProviderFI" />
     </jaxrs:providers>
     
     <jaxrs:properties>
@@ -143,7 +162,7 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
     </jaxrs:properties>
   </jaxrs:server>
 
-  <bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
+  <bean id="jaxbProviderFI" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
       <property name="produceMediaTypes" ref="fastinfosetType"/>
       <property name="consumeMediaTypes" ref="fastinfosetType"/>
   </bean>