You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2016/05/01 21:36:43 UTC
[27/36] cxf git commit: [CXF-6833] Generalizing Observable writer to
support arbitrary types
[CXF-6833] Generalizing Observable writer to support arbitrary types
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/4ddf74b1
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/4ddf74b1
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/4ddf74b1
Branch: refs/heads/master-jaxrs-2.1
Commit: 4ddf74b1acd8f65b685c8e11b809a06807799f84
Parents: 5c0c7df
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Fri Apr 29 15:23:35 2016 +0100
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Fri Apr 29 15:23:35 2016 +0100
----------------------------------------------------------------------
.../jaxrs/reactive/JAXRSReactiveTest.java | 9 +++++-
.../jaxrs/reactive/ObservableWriter.java | 31 ++++++++++++++------
.../systest/jaxrs/reactive/ReactiveServer.java | 10 ++++++-
.../systest/jaxrs/reactive/ReactiveService.java | 7 +++++
4 files changed, 46 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/4ddf74b1/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java
index c92e8fa..582ab4b 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java
@@ -49,6 +49,13 @@ public class JAXRSReactiveTest extends AbstractBusClientServerTestBase {
String text = wc.accept("text/plain").get(String.class);
assertEquals("Hello, world!", text);
}
-
+ @Test
+ public void testGetHelloWorldJson() throws Exception {
+ String address = "http://localhost:" + PORT + "/reactive/textJson";
+ WebClient wc = WebClient.create(address);
+ String text = wc.accept("application/json").get(String.class);
+ assertTrue("{\"audience\":\"World\",\"greeting\":\"Hello\"}".equals(text)
+ || "{\"greeting\":\"Hello\",\"audience\":\"World\"}".equals(text));
+ }
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/4ddf74b1/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ObservableWriter.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ObservableWriter.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ObservableWriter.java
index 57e7aec..88b7e49 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ObservableWriter.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ObservableWriter.java
@@ -22,22 +22,25 @@ import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.nio.charset.StandardCharsets;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Providers;
import org.apache.cxf.jaxrs.utils.ExceptionUtils;
-import org.apache.cxf.jaxrs.utils.HttpUtils;
import rx.Observable;
-public class ObservableWriter implements MessageBodyWriter<Observable<String>> {
+public class ObservableWriter<T> implements MessageBodyWriter<Observable<T>> {
+ @Context
+ private Providers providers;
+
@Override
- public long getSize(Observable<String> arg0, Class<?> arg1, Type arg2, Annotation[] arg3, MediaType arg4) {
+ public long getSize(Observable<T> arg0, Class<?> arg1, Type arg2, Annotation[] arg3, MediaType arg4) {
// TODO Auto-generated method stub
return -1;
}
@@ -48,16 +51,26 @@ public class ObservableWriter implements MessageBodyWriter<Observable<String>> {
}
@Override
- public void writeTo(Observable<String> obs, Class<?> cls, Type t, Annotation[] anns, MediaType mt,
+ public void writeTo(Observable<T> obs, Class<?> cls, Type t, Annotation[] anns, MediaType mt,
MultivaluedMap<String, Object> headers, OutputStream os)
throws IOException, WebApplicationException {
- final String enc = HttpUtils.getSetEncoding(mt, headers, StandardCharsets.UTF_8.name());
- obs.subscribe(s -> writeToOutputStream(s, os, enc));
+ obs.subscribe(value -> writeToOutputStream(value, anns, mt, headers, os));
}
- private static void writeToOutputStream(String s, OutputStream os, String enc) {
+ private void writeToOutputStream(T value,
+ Annotation[] anns,
+ MediaType mt,
+ MultivaluedMap<String, Object> headers,
+ OutputStream os) {
+ @SuppressWarnings("unchecked")
+ MessageBodyWriter<T> writer =
+ (MessageBodyWriter<T>)providers.getMessageBodyWriter(value.getClass(), value.getClass(), anns, mt);
+ if (writer == null) {
+ throw ExceptionUtils.toInternalServerErrorException(null, null);
+ }
+
try {
- os.write(s.getBytes(enc));
+ writer.writeTo(value, value.getClass(), value.getClass(), anns, mt, headers, os);
} catch (IOException ex) {
throw ExceptionUtils.toInternalServerErrorException(ex, null);
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/4ddf74b1/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveServer.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveServer.java
index b4e3f54..aee7e1b 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveServer.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveServer.java
@@ -19,6 +19,10 @@
package org.apache.cxf.systest.jaxrs.reactive;
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
@@ -31,8 +35,12 @@ public class ReactiveServer extends AbstractBusTestServerBase {
}
protected void run() {
+ Bus bus = BusFactory.getDefaultBus();
+ // Make sure default JSONProvider is not loaded
+ bus.setProperty("skip.default.json.provider.registration", true);
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
- sf.setProvider(new ObservableWriter());
+ sf.setProvider(new ObservableWriter<Object>());
+ sf.setProvider(new JacksonJsonProvider());
sf.setResourceClasses(ReactiveService.class);
sf.setResourceProvider(ReactiveService.class,
new SingletonResourceProvider(new ReactiveService(), true));
http://git-wip-us.apache.org/repos/asf/cxf/blob/4ddf74b1/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveService.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveService.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveService.java
index 7127214..f716bbc 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveService.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/ReactiveService.java
@@ -49,6 +49,13 @@ public class ReactiveService {
}
+ @GET
+ @Produces("application/json")
+ @Path("textJson")
+ public Observable<HelloWorldBean> getJsonText() {
+ return Observable.just(new HelloWorldBean());
+ }
+
private class AsyncResponseSubscriber extends Subscriber<String> {
private StringBuilder sb = new StringBuilder();