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 2017/11/21 12:55:37 UTC

[cxf] 01/02: Update TypeVariable check ResourceUtils.java and UnitTest

This is an automated email from the ASF dual-hosted git repository.

sergeyb pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit e08292351231f9c7127a01e846b9c7d4e1023f70
Author: Evaristo Wychoski Benfatti <ev...@ubuntu-server>
AuthorDate: Mon Nov 20 10:04:24 2017 -0200

    Update TypeVariable check ResourceUtils.java and UnitTest
---
 .../org/apache/cxf/jaxrs/utils/ResourceUtils.java  |   4 +-
 .../cxf/jaxrs/model/wadl/WadlGeneratorTest.java    | 120 +++++++++++++++++++++
 2 files changed, 123 insertions(+), 1 deletion(-)

diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
index e280c89..6a980e3 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
@@ -27,6 +27,7 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -685,7 +686,8 @@ public final class ResourceUtils {
             type = InjectionUtils.getActualType(genericType);
             isCollection = true;
         }
-        if (type == Object.class && !(genericType instanceof Class)) {
+        if (type == Object.class && !(genericType instanceof Class)
+            || genericType instanceof TypeVariable) {
             Type theType = InjectionUtils.processGenericTypeIfNeeded(serviceClass,
                                                       Object.class,
                                                       genericType);
diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
index 7086461..8cd7227 100644
--- a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
+++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
@@ -44,6 +44,7 @@ import org.apache.cxf.endpoint.EndpointImpl;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.jaxrs.JAXRSServiceImpl;
 import org.apache.cxf.jaxrs.impl.ContainerRequestContextImpl;
+import org.apache.cxf.jaxrs.model.AbstractResourceInfo;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
 import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
@@ -936,4 +937,123 @@ public class WadlGeneratorTest extends Assert {
             return transfer;
         }
     }
+
+    @XmlRootElement(namespace = "http://example.com")
+    public static class Super {
+        private int id;
+        private String name;
+        public int getId() {
+            return id;
+        }
+        public void setId(int id) {
+            this.id = id;
+        }
+        public String getName() {
+            return name;
+        }
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    public static class SuperResource<T extends Super> {
+
+        @PUT
+        @Path("set")
+        @Produces("application/xml")
+        @Consumes("application/xml")
+        public T set(T transfer) {
+            return transfer;
+        }
+
+    }
+
+    @XmlRootElement(namespace = "http://example.com")
+    public static class Actual extends Super { }
+
+    public static class ActualResource extends SuperResource<Actual> { }
+
+    private void setUpGenericImplementationTest() {
+        ServerProviderFactory.getInstance().clearProviders();
+        AbstractResourceInfo.clearAllMaps();
+    }
+
+    @Test
+    public void testGenericImplementation() throws Exception {
+        setUpGenericImplementationTest();
+
+        WadlGenerator wg = new WadlGenerator();
+        wg.setApplicationTitle("My Application");
+        wg.setNamespacePrefix("ns");
+        ClassResourceInfo cri =
+            ResourceUtils.createClassResourceInfo(ActualResource.class, ActualResource.class, true, true);
+        Message m = mockMessage("http://example.com", "/", WadlGenerator.WADL_QUERY, cri);
+        Response r = handleRequest(wg, m);
+        checkResponse(r);
+        Document doc = StaxUtils.read(new StringReader(r.getEntity().toString()));
+        checkDocs(doc.getDocumentElement(), "My Application", "", "");
+        List<Element> grammarEls = DOMUtils.getChildrenWithName(doc.getDocumentElement(),
+                                                                WadlGenerator.WADL_NS,
+                                                                "grammars");
+        assertEquals(1, grammarEls.size());
+        List<Element> schemasEls = DOMUtils.getChildrenWithName(grammarEls.get(0),
+                                                                Constants.URI_2001_SCHEMA_XSD,
+                                                                "schema");
+        assertEquals(2, schemasEls.size());
+        assertEquals("http://example.com", schemasEls.get(0).getAttribute("targetNamespace"));
+        assertEquals("http://example.com", schemasEls.get(1).getAttribute("targetNamespace"));
+
+        List<Element> importEls = DOMUtils.getChildrenWithName(schemasEls.get(0),
+                Constants.URI_2001_SCHEMA_XSD,
+                "import");
+        assertEquals(1, importEls.size());
+
+        List<Element> typeEls = DOMUtils.getChildrenWithName(schemasEls.get(0),
+                Constants.URI_2001_SCHEMA_XSD,
+                "element");
+        assertEquals(2, typeEls.size());
+        assertEquals("actual", typeEls.get(0).getAttribute("name"));
+        assertEquals("actual", typeEls.get(0).getAttribute("type"));
+        assertEquals("super", typeEls.get(1).getAttribute("name"));
+        assertEquals("super", typeEls.get(1).getAttribute("type"));
+
+        List<Element> complexTypeEls = DOMUtils.getChildrenWithName(schemasEls.get(1),
+                Constants.URI_2001_SCHEMA_XSD,
+                "complexType");
+        assertEquals(2, complexTypeEls.size());
+        assertEquals("actual", complexTypeEls.get(0).getAttribute("name"));
+        assertEquals("super", complexTypeEls.get(1).getAttribute("name"));
+
+        Element ccActualElement =
+                (Element)complexTypeEls.get(0).getElementsByTagNameNS(Constants.URI_2001_SCHEMA_XSD,
+                                                  "complexContent").item(0);
+        Element extensionActualElement =
+            (Element)ccActualElement.getElementsByTagNameNS(Constants.URI_2001_SCHEMA_XSD,
+                                              "extension").item(0);
+        Element sequenceActualElement =
+                (Element)ccActualElement.getElementsByTagNameNS(Constants.URI_2001_SCHEMA_XSD,
+                                                  "sequence").item(0);
+        assertEquals("super", extensionActualElement.getAttribute("base"));
+        assertEquals(0, sequenceActualElement.getChildNodes().getLength());
+
+        Element sequenceSuperElement =
+                (Element)complexTypeEls.get(1).getElementsByTagNameNS(Constants.URI_2001_SCHEMA_XSD,
+                                                  "sequence").item(0);
+        List<Element> superEls = DOMUtils.getChildrenWithName(sequenceSuperElement,
+                Constants.URI_2001_SCHEMA_XSD,
+                "element");
+        assertEquals(2, superEls.size());
+        assertEquals("id", superEls.get(0).getAttribute("name"));
+        assertEquals("xs:int", superEls.get(0).getAttribute("type"));
+        assertEquals("name", superEls.get(1).getAttribute("name"));
+        assertEquals("xs:string", superEls.get(1).getAttribute("type"));
+
+        List<Element> reps = DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(),
+                                       WadlGenerator.WADL_NS, "representation");
+        assertEquals(2, reps.size());
+        assertEquals("ns1:actual", reps.get(0).getAttribute("element"));
+        assertEquals("ns1:actual", reps.get(1).getAttribute("element"));
+
+    }
+
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@cxf.apache.org" <co...@cxf.apache.org>.