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>