Repository: cxf
Updated Branches:
  refs/heads/2.7.x-fixes 72e989af3 -> b125a0042


[CXF-5944] Better support for multipart representations, patch from Alexey 
Markevich applied with modifications


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

Branch: refs/heads/2.7.x-fixes
Commit: b125a004280d9731949f476fd9701e35c5a0a464
Parents: 72e989a
Author: Sergey Beryozkin <sberyoz...@talend.com>
Authored: Wed Aug 13 21:36:45 2014 +0100
Committer: Sergey Beryozkin <sberyoz...@talend.com>
Committed: Wed Aug 13 21:45:17 2014 +0100

----------------------------------------------------------------------
 .../cxf/tools/wadlto/jaxrs/SourceGenerator.java | 46 +++++++++++++-------
 .../tools/wadlto/jaxrs/JAXRSContainerTest.java  | 28 ++++++------
 .../cxf/tools/wadlto/jaxrs/WADLToJavaTest.java  |  2 +-
 .../jaxrs/src/test/resources/wadl/bookstore.xml |  2 +-
 4 files changed, 47 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/b125a004/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 78c7862..175267d 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
@@ -91,6 +91,8 @@ import org.apache.cxf.common.xmlschema.XmlSchemaConstants;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.helpers.JavaUtils;
+import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
 import org.apache.cxf.jaxrs.model.wadl.WadlGenerator;
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
@@ -175,6 +177,7 @@ public class SourceGenerator {
         XSD_SPECIFIC_TYPE_MAP.put("date", "java.util.Date");
         XSD_SPECIFIC_TYPE_MAP.put("dateTime", "java.util.Date");
         XSD_SPECIFIC_TYPE_MAP.put("time", "java.util.Date");
+        XSD_SPECIFIC_TYPE_MAP.put("anyType", "String");
     }
 
     private Comparator<String> importsComparator;
@@ -568,7 +571,7 @@ public class SourceGenerator {
     private void writeImplementsInterface(StringBuilder sb, String clsName, 
                                              boolean interfaceIsGenerated) {
         if (generateInterfaces && !interfaceIsGenerated) {
-            sb.append(" implements " + clsName);
+            sb.append(" implements " + StringUtils.capitalize(clsName));
         }
     }
     
@@ -853,13 +856,15 @@ public class SourceGenerator {
         sbCode.append("}");
     }
     
-    private boolean addFormParameters(List<Element> inParamElements, Element 
requestEl) {
-        List<Element> repElements = getWadlElements(requestEl, 
"representation");
- 
+    private boolean addFormParameters(List<Element> inParamElements, 
+                                      Element requestEl,
+                                      List<Element> repElements) {
         if (repElements.size() == 1) {
             String mediaType = repElements.get(0).getAttribute("mediaType");
-            if (MediaType.APPLICATION_FORM_URLENCODED.equals(mediaType)) { 
-                inParamElements.addAll(getWadlElements(repElements.get(0), 
"param"));
+            if (MediaType.APPLICATION_FORM_URLENCODED.equals(mediaType) || 
mediaType.startsWith("multipart/")) {
+                if (!mediaTypesMap.containsKey(mediaType)) {
+                    inParamElements.addAll(getWadlElements(repElements.get(0), 
"param"));
+                }
                 return true;
             }
         }
@@ -963,12 +968,19 @@ public class SourceGenerator {
                                    boolean suspendedAsync) {
     //CHECKSTYLE:ON    
         boolean form = false;
-        boolean formParamsAvailable = false;
+        boolean multipart = false;
+        boolean formOrMultipartParamsAvailable = false;
+        String requestMediaType = null;
         if (requestEl != null) {
             inParamEls.addAll(getWadlElements(requestEl, "param"));
             int currentSize = inParamEls.size();
-            form = addFormParameters(inParamEls, requestEl);
-            formParamsAvailable = 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/");
+            }
         }
                   
         for (int i = 0; i < inParamEls.size(); i++) {
@@ -976,8 +988,8 @@ public class SourceGenerator {
             Element paramEl = inParamEls.get(i);
             
             Class<?> paramAnn = 
getParamAnnotation(paramEl.getAttribute("style"));
-            if (paramAnn == QueryParam.class && form) {
-                paramAnn = FormParam.class; 
+            if (paramAnn == QueryParam.class && 
formOrMultipartParamsAvailable) {
+                paramAnn = !multipart ? FormParam.class : Multipart.class; 
             } 
             String name = paramEl.getAttribute("name");
             boolean enumCreated = false;
@@ -1041,10 +1053,14 @@ public class SourceGenerator {
                 elementParamType = Source.class.getSimpleName();
                 elementParamName = "source";
             }
-        } else if (!formParamsAvailable) {
-            addImport(imports, MultivaluedMap.class.getName());
-            elementParamType = MultivaluedMap.class.getSimpleName();
-            elementParamName = "map";
+        } else if (!formOrMultipartParamsAvailable) {
+            if (requestMediaType != null && 
mediaTypesMap.containsKey(requestMediaType)) {
+                elementParamType = addImportsAndGetSimpleName(imports, 
mediaTypesMap.get(requestMediaType));
+            } else {
+                String fullClassName = !multipart ? 
MultivaluedMap.class.getName() : MultipartBody.class.getName();
+                elementParamType =  addImportsAndGetSimpleName(imports, 
fullClassName);
+            }
+            elementParamName = !multipart ? "map" : "body";
         }
         if (elementParamType != null) {
             if (inParamEls.size() > 0) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/b125a004/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 b82fca6..61ee5cd 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
@@ -80,8 +80,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
 
             assertNotNull(output.list());
             
-            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
-            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
+            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
+            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
             
         } catch (Exception e) {
             e.printStackTrace();
@@ -130,8 +130,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
 
             assertNotNull(output.list());
             
-            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
-            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
+            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
+            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
             
         } catch (Exception e) {
             e.printStackTrace();
@@ -155,8 +155,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
 
             assertNotNull(output.list());
             
-            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
-            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
+            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
+            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
             
         } catch (Exception e) {
             e.printStackTrace();
@@ -551,8 +551,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
 
             assertNotNull(output.list());
             
-            verifyFiles("java", true, false, "superbooks", "custom.books", 10, 
true);
-            verifyFiles("class", true, false, "superbooks", "custom.books", 
10, true);
+            verifyFiles("java", true, false, "superbooks", "custom.books", 11, 
true);
+            verifyFiles("class", true, false, "superbooks", "custom.books", 
11, true);
             
         } catch (Exception e) {
             e.printStackTrace();
@@ -577,8 +577,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
 
             assertNotNull(output.list());
             
-            verifyFiles("java", true, false, "custom.books.schema", 
"custom.books.service", 10, true);
-            verifyFiles("class", true, false, "custom.books.schema", 
"custom.books.service", 10, true);
+            verifyFiles("java", true, false, "custom.books.schema", 
"custom.books.service", 11, true);
+            verifyFiles("class", true, false, "custom.books.schema", 
"custom.books.service", 11, true);
             
         } catch (Exception e) {
             e.printStackTrace();
@@ -602,8 +602,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
 
             assertNotNull(output.list());
             
-            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
-            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 10, true);
+            verifyFiles("java", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
+            verifyFiles("class", true, false, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 11, true);
         } catch (Exception e) {
             fail();
             e.printStackTrace();
@@ -627,8 +627,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
 
             assertNotNull(output.list());
             
-            verifyFiles("java", true, true, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 12, true);
-            verifyFiles("class", true, true, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 12, true);
+            verifyFiles("java", true, true, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 14, true);
+            verifyFiles("class", true, true, "superbooks", 
"org.apache.cxf.jaxrs.model.wadl", 14, true);
         } catch (Exception e) {
             fail();
             e.printStackTrace();

http://git-wip-us.apache.org/repos/asf/cxf/blob/b125a004/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java
----------------------------------------------------------------------
diff --git 
a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java
 
b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java
index deeab25..28acdf3 100644
--- 
a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java
+++ 
b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/WADLToJavaTest.java
@@ -150,7 +150,7 @@ public class WADLToJavaTest extends ProcessorTestBase {
     private void verifyFiles(String ext, boolean subresourceExpected, boolean 
interfacesAndImpl, 
                              String schemaPackage, String resourcePackage) {   
 
         List<File> files = FileUtils.getFilesRecurse(output, ".+\\." + ext + 
"$");
-        int size = interfacesAndImpl ? 11 : 9;
+        int size = interfacesAndImpl ? 11 : 10;
         if (!subresourceExpected) {
             size--;
         }

http://git-wip-us.apache.org/repos/asf/cxf/blob/b125a004/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
----------------------------------------------------------------------
diff --git a/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml 
b/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
index 34e9ad4..05bfc44 100644
--- a/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
+++ b/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
@@ -199,7 +199,7 @@ required="true">
    </resource>
 
    
-  <resource path="/booksubresource" id="{http://superbooks}thebook";>
+  <resource path="/booksubresource" id="{http://superbooks}thebooksub";>
            <doc>Book subresource</doc>
            <param name="id" style="template" type="xs:int"/>
            <param name="mid" style="matrix" type="xs:int"/>

Reply via email to