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 2021/06/22 21:52:36 UTC
[cxf] 01/02: Fixing CXF-8514 & CXF-8515,
NPE during ResourceContext contextual injection (#817)
This is an automated email from the ASF dual-hosted git repository.
reta pushed a commit to branch 3.3.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 5e5352eeb29df607822217c7f0276f6752ece071
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Mon Jun 21 22:04:01 2021 -0400
Fixing CXF-8514 & CXF-8515, NPE during ResourceContext contextual injection (#817)
(cherry picked from commit 60752e33639c92f912936c72f836bb1c6e6603f4)
(cherry picked from commit 179f96b1568b30e728e5bc1e9fb5b0679a844f0d)
---
.../org/apache/cxf/jaxrs/utils/JAXRSUtils.java | 5 ++-
.../systest/jaxrs/JAXRS20ClientServerBookTest.java | 38 +++++++++++++++++++++-
2 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
index 52a8bf1..5923836 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
@@ -1175,7 +1175,10 @@ public final class JAXRSUtils {
} else if (ResourceInfo.class.isAssignableFrom(clazz)) {
o = new ResourceInfoImpl(contextMessage);
} else if (ResourceContext.class.isAssignableFrom(clazz)) {
- o = new ResourceContextImpl(contextMessage, contextMessage.getExchange().get(OperationResourceInfo.class));
+ final OperationResourceInfo ori = contextMessage.getExchange().get(OperationResourceInfo.class);
+ if (ori != null) {
+ o = new ResourceContextImpl(contextMessage, ori);
+ }
} else if (Request.class.isAssignableFrom(clazz)) {
o = new RequestImpl(contextMessage);
} else if (Providers.class.isAssignableFrom(clazz)) {
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
index 3a2e996..9c105a1 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
@@ -45,6 +45,8 @@ import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.InvocationCallback;
import javax.ws.rs.client.ResponseProcessingException;
import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.container.ResourceContext;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.core.GenericEntity;
@@ -240,6 +242,17 @@ public class JAXRS20ClientServerBookTest extends AbstractBusClientServerTestBase
assertEquals(124L, book.getId());
}
+
+ @Test
+ public void testGetBookWebTargetInjectableProvider() {
+ String address = "http://localhost:" + PORT + "/bookstore/bookheaders";
+ Client client = ClientBuilder.newClient();
+ client.register(new BookInfoInjectableReader());
+ BookInfo book = client.target(address).path("simple")
+ .request("application/xml").get(BookInfo.class);
+ assertEquals(124L, book.getId());
+
+ }
@Test
public void testGetBookSyncWithAsync() {
@@ -1061,9 +1074,31 @@ public class JAXRS20ClientServerBookTest extends AbstractBusClientServerTestBase
}
- private static class BookInfoReader implements MessageBodyReader<BookInfo> {
+ private static class BookInfoInjectableReader implements MessageBodyReader<BookInfo> {
+ @Context private ResourceContext resourceContext;
+
+ @Override
+ public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2, MediaType arg3) {
+ return true;
+ }
@Override
+ public BookInfo readFrom(Class<BookInfo> arg0, Type arg1, Annotation[] anns, MediaType mt,
+ MultivaluedMap<String, String> headers, InputStream is) throws IOException,
+ WebApplicationException {
+
+ if (resourceContext == null) {
+ throw new WebApplicationException("The resourceContext should not be null");
+ }
+
+ Book book = new JAXBElementProvider<Book>().readFrom(Book.class, Book.class, anns, mt, headers, is);
+ return new BookInfo(book);
+ }
+
+ }
+
+ private static class BookInfoReader implements MessageBodyReader<BookInfo> {
+ @Override
public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2, MediaType arg3) {
return true;
}
@@ -1077,6 +1112,7 @@ public class JAXRS20ClientServerBookTest extends AbstractBusClientServerTestBase
}
}
+
private static class ClientTestFeature implements Feature {
@Override