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 2015/11/06 11:51:09 UTC

cxf git commit: [CXF-6668] Fixing the case of independent query parameters assumed to be multipart params, patch from Alexei Marchenko applied with thanks

Repository: cxf
Updated Branches:
  refs/heads/master a261507eb -> f02749d14


[CXF-6668] Fixing the case of independent query parameters assumed to be multipart params, patch from Alexei Marchenko applied with thanks


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/f02749d1
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/f02749d1
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/f02749d1

Branch: refs/heads/master
Commit: f02749d14aae91698010ba79cc26749b68436838
Parents: a261507
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Fri Nov 6 10:50:50 2015 +0000
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Fri Nov 6 10:50:50 2015 +0000

----------------------------------------------------------------------
 .../cxf/tools/wadlto/jaxrs/SourceGenerator.java |  7 +++---
 .../tools/wadlto/jaxrs/JAXRSContainerTest.java  | 25 +++++++++++++++++++
 .../resources/wadl/testQueryMultipartParam.wadl | 26 ++++++++++++++++++++
 3 files changed, 55 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/f02749d1/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
----------------------------------------------------------------------
diff --git a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
index c8e034d..285f85f 100644
--- a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
+++ b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
@@ -1201,15 +1201,16 @@ public class SourceGenerator {
         boolean multipart = false;
         boolean formOrMultipartParamsAvailable = false;
         String requestMediaType = null;
+        int currentSize = 0;
         if (requestEl != null) {
             inParamEls.addAll(getWadlElements(requestEl, "param"));
-            int currentSize = inParamEls.size();
+            currentSize = inParamEls.size();
             List<Element> repElements = getWadlElements(requestEl, "representation");
             form = addFormParameters(inParamEls, requestEl, repElements);
             if (form) {
                 formOrMultipartParamsAvailable = currentSize < inParamEls.size();
                 requestMediaType = repElements.get(0).getAttribute("mediaType");
-                multipart = form && requestMediaType.startsWith("multipart/");
+                multipart = requestMediaType.startsWith("multipart/");
             }
         }
                   
@@ -1218,7 +1219,7 @@ public class SourceGenerator {
             Element paramEl = inParamEls.get(i);
             
             Class<?> paramAnn = getParamAnnotation(paramEl.getAttribute("style"));
-            if (paramAnn == QueryParam.class && formOrMultipartParamsAvailable) {
+            if (i >= currentSize && paramAnn == QueryParam.class && formOrMultipartParamsAvailable) {
                 paramAnn = !multipart ? FormParam.class : Multipart.class; 
             } 
             String name = paramEl.getAttribute("name");

http://git-wip-us.apache.org/repos/asf/cxf/blob/f02749d1/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
----------------------------------------------------------------------
diff --git a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
index 7c3e826..e4ad62d 100644
--- a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
+++ b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
@@ -314,6 +314,31 @@ public class JAXRSContainerTest extends ProcessorTestBase {
         }
     }
     
+    @Test
+    public void testQueryMultipartParam() {
+        try {
+            JAXRSContainer container = new JAXRSContainer(null);
+
+            ToolContext context = new ToolContext();
+            context.put(WadlToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath());
+            context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/testQueryMultipartParam.wadl"));
+            context.put(WadlToolConstants.CFG_COMPILE, "true");
+
+            container.setContext(context);
+            container.execute();
+
+            assertNotNull(output.list());
+            
+            List<File> files = FileUtils.getFilesRecurse(output, ".+\\." + "class" + "$");
+            assertEquals(2, files.size());
+            assertTrue(checkContains(files, "application.Test1.class"));
+            assertTrue(checkContains(files, "application.Test2.class"));
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+    
     @Test    
     public void testCodeGenWithImportedSchemaAndResourceSet() {
         try {

http://git-wip-us.apache.org/repos/asf/cxf/blob/f02749d1/tools/wadlto/jaxrs/src/test/resources/wadl/testQueryMultipartParam.wadl
----------------------------------------------------------------------
diff --git a/tools/wadlto/jaxrs/src/test/resources/wadl/testQueryMultipartParam.wadl b/tools/wadlto/jaxrs/src/test/resources/wadl/testQueryMultipartParam.wadl
new file mode 100644
index 0000000..914e68f
--- /dev/null
+++ b/tools/wadlto/jaxrs/src/test/resources/wadl/testQueryMultipartParam.wadl
@@ -0,0 +1,26 @@
+<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
+	<grammars />
+	<resources>
+		<resource id="Test1" path="/1">
+			<method name="PUT" >
+				<request>
+					<param name="standalone" style="query" type="xs:boolean" />
+					<representation mediaType="multipart/mixed">
+						<param name="action" style="query" type="xs:anyType" />
+						<param name="sources" style="query" type="xs:anyType" required="false" />
+					</representation>
+				</request>
+			</method>
+		</resource>
+		<resource id="Test2" path="/2">
+			<method name="PUT" >
+				<request>
+					<param name="snapshot" style="query" type="xs:boolean" required="true" />
+					<representation mediaType="application/json">
+						<param name="flow" style="plain" type="xs:anyType" required="true" />
+					</representation>
+				</request>
+			</method>
+		</resource>
+	</resources>
+</application>