[ 
https://issues.apache.org/jira/browse/CXF-6965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15369088#comment-15369088
 ] 

J. Fiala edited comment on CXF-6965 at 7/9/16 1:53 PM:
-------------------------------------------------------

h3. Overview of issues Swagger/WADL 
(pls move WADL-related  to separate issue)
* Nested parameters - @QueryParam not supported in Swagger
* DataHandler - not supported in WADL (rendered only as 
application/x-www-form-urlencoded )
* DataHandler - not supported in Swagger (rendered as Model instead type:file)


h3. 1. Example for nested parameters @QueryParam("") not supported in Swagger:
{code}
@Path("/myService") 
public class MyServiceImpl {

@Consumes({ MediaType.APPLICATION_JSON })
        @Produces({ MediaType.APPLICATION_JSON })
        @POST
          @Path("/hello")
        public void hello(@QueryParam("")MyQueryParams params) {
                
        }

}

public class MyQueryParams {
        String param1;
        String param2;
//....
}
{code}

will render in WADL (CORRECT):
{code}
<resource path="/hello">
<method name="POST">
<request>
<param name="param2" style="query" type="xs:string"/>
<param name="param1" style="query" type="xs:string"/>
</request>
{code}

and in Swagger (WRONG - nested parameters not picked up): 
{code}
"/myService/hello": {

    "post": {
        "tags": [
            "myService"
        ],
        "operationId": "hello",
        "consumes": [
            "application/json"
        ],
        "produces": [
            "application/json"
        ],
        "parameters": [
            {
                "name": "",
                "in": "query",
                "required": false,
                "type": "string"
            }
        ],
{code}

h3. 2. Example for DataHandler not supported in WADL (pls move to separate 
issue for WadlGenerator):

{code}
@Consumes({ MediaType.MULTIPART_FORM_DATA })
        @Produces({ MediaType.APPLICATION_JSON })
        @POST
        @Path("/helloMultipart")
        public void helloMultipart(@Multipart(value= "payload" , 
type=MediaType.APPLICATION_OCTET_STREAM) DataHandler handler) {

        }
{code}

is renderd in WADL (WRONG):
{code}
<resource path="/helloMultipart"><method name="POST"><request><representation 
mediaType="application/x-www-form-urlencoded"/></request>
{code}

this would be the basic correct WADL rendering:
{code}
<resource path="/helloMultipart"><method name="POST"><request><representation 
mediaType="multipart/form-data"/></request>
{code}

Which will become after wadl2java:
{code}
postHelloMultipart(MultipartBody body);
{code}

Of course it would be nice to have all the Multipart rendered correctly in WADL 
as well.

h3. 3. Example for DataHandler not supported in Swagger:
{code}
"/myService/helloMultipart": {

    "post": {
        "tags": [
            "myService"
        ],
        "operationId": "helloMultipart",
        "consumes": [
            "multipart/form-data"
        ],
        "produces": [
            "application/json"
        ],
        "parameters": [
            {
                "in": "body",
                "name": "body",
                "required": false,
                "schema": {
                    "$ref": "#/definitions/DataHandler"
                }
            }
        ],
{code}
It will also add the definitions for DataHandler, DataSource, DataFlavour, 
InputStream, CommandInfo, Outputstream, which makes no sense in the Swagger 
file.

This would be the correct rendering (type=file)
{code}
{

    "name": "payload",
    "in": "formData",
    "description": "",
    "required": false,
    "type": "file"

}
{code}


was (Author: jfx):
h3. 1. Example for nested parameters @QueryParam("") not supported in Swagger:
{code}
@Path("/myService") 
public class MyServiceImpl {

@Consumes({ MediaType.APPLICATION_JSON })
        @Produces({ MediaType.APPLICATION_JSON })
        @POST
          @Path("/hello")
        public void hello(@QueryParam("")MyQueryParams params) {
                
        }

}

public class MyQueryParams {
        String param1;
        String param2;
//....
}
{code}

will render in WADL (CORRECT):
{code}
<resource path="/hello">
<method name="POST">
<request>
<param name="param2" style="query" type="xs:string"/>
<param name="param1" style="query" type="xs:string"/>
</request>
{code}

and in Swagger (WRONG - nested parameters not picked up): 
{code}
"/myService/hello": {

    "post": {
        "tags": [
            "myService"
        ],
        "operationId": "hello",
        "consumes": [
            "application/json"
        ],
        "produces": [
            "application/json"
        ],
        "parameters": [
            {
                "name": "",
                "in": "query",
                "required": false,
                "type": "string"
            }
        ],
{code}

h3. 2. Example for DataHandler not supported in WADL (pls move to separate 
issue for WadlGenerator):

{code}
@Consumes({ MediaType.MULTIPART_FORM_DATA })
        @Produces({ MediaType.APPLICATION_JSON })
        @POST
        @Path("/helloMultipart")
        public void helloMultipart(@Multipart(value= "payload" , 
type=MediaType.APPLICATION_OCTET_STREAM) DataHandler handler) {

        }
{code}

is renderd in WADL (WRONG):
{code}
<resource path="/helloMultipart"><method name="POST"><request><representation 
mediaType="application/x-www-form-urlencoded"/></request>
{code}

this would be the basic correct WADL rendering:
{code}
<resource path="/helloMultipart"><method name="POST"><request><representation 
mediaType="multipart/form-data"/></request>
{code}

Which will become after wadl2java:
{code}
postHelloMultipart(MultipartBody body);
{code}

Of course it would be nice to have all the Multipart rendered correctly in WADL 
as well.

h3. 3. Example for DataHandler not supported in Swagger:
{code}
"/myService/helloMultipart": {

    "post": {
        "tags": [
            "myService"
        ],
        "operationId": "helloMultipart",
        "consumes": [
            "multipart/form-data"
        ],
        "produces": [
            "application/json"
        ],
        "parameters": [
            {
                "in": "body",
                "name": "body",
                "required": false,
                "schema": {
                    "$ref": "#/definitions/DataHandler"
                }
            }
        ],
{code}
It will also add the definitions for DataHandler, DataSource, DataFlavour, 
InputStream, CommandInfo, Outputstream, which makes no sense in the Swagger 
file.

This would be the correct rendering (type=file)
{code}
{

    "name": "payload",
    "in": "formData",
    "description": "",
    "required": false,
    "type": "file"

}
{code}

> CXF Swagger2Feature does not correctly support QueryParam("") and DataHandler
> -----------------------------------------------------------------------------
>
>                 Key: CXF-6965
>                 URL: https://issues.apache.org/jira/browse/CXF-6965
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>            Reporter: Sergey Beryozkin
>            Priority: Minor
>             Fix For: 3.2.0, 3.1.8
>
>
> See 
> https://github.com/swagger-api/swagger-codegen/issues/2017#issuecomment-230426728



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to