Hard to say. People use BeanParam in mysterious ways and I don't see a reason 
why it should be different  

> On Apr 7, 2017, at 7:08 AM, Théo A. Monteiro <[email protected]> 
> wrote:
> 
> Thanks for the clarification! 😃
> 
> I tried to change the placeOrder in the example to receive the MyParams and 
> the duplication also occurred.
> 
> The important thing is: suggestion 2 worked. The PoC didn't have 
> @ApiOperation, but my actual code does.
> 
> Now I am wondering what should be the correct or ideal behavior. Should 
> @BeanParam be ever parsed as body? I obviously think it must never be a body.
> 
>> On Thursday, April 6, 2017 at 7:47:41 PM UTC-3, Ron wrote:
>> The example works. The operations are hidden as part of the sample to show 
>> how they can be filtered for security purposes.
>> 
>> Try loading the swagger.json as: 
>> http://localhost:8002/api/swagger.json?api_key=special-key
>> 
>>  
>> 
>> I can’t really tell why it doesn’t work for you.
>> 
>> Two suggestions:
>> 
>> 1.       Add @ApiOperation to the operation itself.
>> 
>> 2.       Since it looks like you’re actually just trying to hide the 
>> @BeanParam, try adding the @ApiParam(hidden=true) next to it: public 
>> Response post(@BeanParam @ApiParam(hidden-true) MyParams params,@Valid Body 
>> body)
>> 
>>  
>> 
>>  
>> 
>> From: <[email protected]> on behalf of "Théo A. Monteiro" 
>> <[email protected]>
>> Reply-To: "[email protected]" <[email protected]>
>> Date: Thursday, 6 April 2017 at 9:33
>> To: Swagger <[email protected]>
>> Subject: Re: Duplicated body fields with @BeanParam and JSON body
>> 
>>  
>> 
>> I tried the sample. 
>> 
>> It doesn't work either - I think it must be revised. 
>> 
>> When I try to run jetty the index page is rendered without any CSS or JS and 
>> doesn't work. 
>> The swagger.json generated doesn't describe the /store resource. 
>> 
>> I tried to copy the method placeOrder into PetResource.java, since it has my 
>> scenario with a @Beanparam and a body, but it never shows on the 
>> swagger.json. It seems swagger is only processing methods with @GET, @PUT 
>> and @POST are ignored in this sample.
>> 
>> On Thursday, April 6, 2017 at 11:11:26 AM UTC-3, tony tam wrote:
>> 
>> Can you look at this example?
>> 
>>  
>> 
>> https://github.com/swagger-api/swagger-samples/blob/3f18a37866083d3ee6c7e4e4161e26a5c976309d/java/java-jersey2/src/main/java/io/swagger/sample/resource/PetStoreResource.java#L41
>> 
>>  
>> 
>> On Apr 6, 2017, at 9:48 AM, Théo A. Monteiro <[email protected]> wrote:
>> 
>>  
>> 
>> Moving the annotations to the getters made no difference. I tried with both 
>> swagger-jaxrs and swagger-jersey2-jaxrs.
>> 
>> On Thursday, April 6, 2017 at 10:20:38 AM UTC-3, tony tam wrote:
>> 
>> Try putting the annotation on the getter vs. the private field.
>> 
>>  
>> 
>> On Apr 6, 2017, at 9:19 AM, Théo A. Monteiro <[email protected]> wrote:
>> 
>>  
>> 
>> In MyParams.java in the example the properties are @HeaderParam and 
>> @Context. Why swagger-core is parsing as another body?
>> 
>> On Thursday, April 6, 2017 at 10:11:32 AM UTC-3, tony tam wrote:
>> 
>> You need to set your @BeanParam properties to be either @HeaderParam, 
>> @PathParam or @QueryParam.  Without one of these modifiers, it will be 
>> treated as a body parameter.  In the definition there can be only one body 
>> param
>> 
>>  
>> 
>> On Apr 6, 2017, at 9:06 AM, Théo A. Monteiro <[email protected]> wrote:
>> 
>>  
>> 
>> Hi,
>> 
>> Swagger is creating two body fields when I try to use a @BeanParam and a 
>> JSON body. 
>> 
>> 
>> 
>> 
>> I tried to use swagger-jaxrs and swagger-jersey2-jaxrs [1][2], but both 
>> result the same problem. Is there any way to circumvent this?
>> 
>> [1]. 
>> https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-JAX-RS-Project-Setup-1.5.X
>> [2]. https://github.com/swagger-api/swagger-core/issues/1720
>> 
>> This is a PoC that shows the problem: 
>> 
>> pom.xml
>> 
>> <project 
>> xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>     
>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd";>
>>     <modelVersion>4.0.0</modelVersion>
>>     <groupId>org.example</groupId>
>>     <artifactId>unrested</artifactId>
>>     <version>0.0.1-SNAPSHOT</version>
>>     <packaging>war</packaging>
>> 
>>     <properties>
>>         <version.jboss.bom.eap>7.0.4.GA</version.jboss.bom.eap>
>>         
>> <version.wildfly.maven.plugin>1.0.2.Final</version.wildfly.maven.plugin>
>>     </properties>
>> 
>>     <build>
>>         <pluginManagement>
>>             <plugins>
>>                 <plugin>
>>                     <groupId>org.wildfly.plugins</groupId>
>>                     <artifactId>wildfly-maven-plugin</artifactId>
>>                     <version>${version.wildfly.maven.plugin}</version>
>>                     <configuration>
>>                         <port>9994</port>
>>                     </configuration>
>>                 </plugin>
>>             </plugins>
>>         </pluginManagement>
>>         <plugins>
>>             <plugin>
>>                 <groupId>org.apache.maven.plugins</groupId>
>>                 <artifactId>maven-compiler-plugin</artifactId>
>>                 <configuration>
>>                     <source>1.8</source>
>>                     <target>1.8</target>
>>                     <encoding>UTF-8</encoding>
>>                 </configuration>
>>             </plugin>
>>         </plugins>
>>     </build>
>> 
>>     <dependencyManagement>
>>         <dependencies>
>>             <dependency>
>>                 <groupId>org.jboss.bom</groupId>
>>                 <artifactId>jboss-eap-javaee7-with-tools</artifactId>
>>                 <version>${version.jboss.bom.eap}</version>
>>                 <scope>import</scope>
>>                 <type>pom</type>
>>             </dependency>
>>         </dependencies>
>>     </dependencyManagement>
>> 
>>     <dependencies>
>>         <dependency>
>>             <groupId>org.jboss.spec.javax.ws.rs</groupId>
>>             <artifactId>jboss-jaxrs-api_2.0_spec</artifactId>
>>             <scope>provided</scope>
>>         </dependency>
>>         <dependency>
>>             <groupId>org.jboss.resteasy</groupId>
>>             <artifactId>resteasy-jackson2-provider</artifactId>
>>             <scope>provided</scope>
>>         </dependency>
>>         <dependency>
>>             <groupId>org.jboss.resteasy</groupId>
>>             <artifactId>resteasy-jaxrs</artifactId>
>>             <scope>provided</scope>
>>         </dependency>
>>         <dependency>
>>             <groupId>io.swagger</groupId>
>>             <artifactId>swagger-jaxrs</artifactId>
>>             <version>1.5.13</version>
>>         </dependency>
>>         <dependency>
>>             <groupId>javax.servlet</groupId>
>>             <artifactId>javax.servlet-api</artifactId>
>>             <version>3.1.0.redhat-1</version>
>>             <scope>provided</scope>
>>         </dependency>
>>     </dependencies>
>> </project>
>> 
>> 
>> RestActivator.java
>> 
>> package org.example.un.rest;
>> 
>> import java.util.HashSet;
>> import java.util.Set;
>> 
>> import javax.servlet.ServletContext;
>> import javax.servlet.ServletContextEvent;
>> import javax.servlet.ServletContextListener;
>> import javax.servlet.annotation.WebListener;
>> import javax.ws.rs.ApplicationPath;
>> import javax.ws.rs.core.Application;
>> 
>> import org.reflections.Reflections;
>> 
>> import io.swagger.annotations.Api;
>> import io.swagger.jaxrs.config.BeanConfig;
>> import io.swagger.models.Info;
>> import io.swagger.models.Swagger;
>> 
>> @WebListener
>> @ApplicationPath("/rest")
>> public class RestActivator extends Application 
>> implementsServletContextListener {
>>     
>>     @Override
>>     public Set<Class<?>> getClasses() {
>>         Set<Class<?>> classes = new HashSet<>(super.getClasses());
>>         classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
>>         classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
>>         Reflections reflections = 
>> newReflections(RestActivator.class.getPackage().getName());
>>         classes.addAll(reflections.getTypesAnnotatedWith(Api.class));
>>         return classes;
>>     }
>>     
>>     private Swagger configSwagger(ServletContextcontexto) {
>>         Swagger swagger = newSwagger().info(this.getSwaggerInfos());
>>         return swagger;
>>     }
>>     
>>     private Info getSwaggerInfos() {
>>         BeanConfig config = new BeanConfig();
>>         config.setVersion("0.1");
>>         
>> config.setResourcePackage(RestActivator.class.getPackage().getName());
>>         config.setPrettyPrint(true);
>>         config.setScan();
>>         return config.getInfo();
>>     }
>>     
>>     @Override
>>     public void contextInitialized(ServletContextEventsce) {
>>         ServletContext contexto =sce.getServletContext();
>>         Swagger swagger = this.configSwagger(contexto);
>>         contexto.setAttribute("swagger", swagger);
>>     }
>> 
>>     @Override
>>     public void contextDestroyed(ServletContextEvent sce){
>>     }
>>     
>> }
>> 
>> 
>> Endpoint.java
>> 
>> package org.example.un.rest.ed;
>> 
>> import javax.validation.Valid;
>> import javax.ws.rs.BeanParam;
>> import javax.ws.rs.Consumes;
>> import javax.ws.rs.POST;
>> import javax.ws.rs.Path;
>> import javax.ws.rs.Produces;
>> import javax.ws.rs.core.MediaType;
>> import javax.ws.rs.core.Response;
>> 
>> import org.example.un.rest.ed.params.MyParams;
>> import org.example.un.rest.json.Body;
>> 
>> import io.swagger.annotations.Api;
>> 
>> @Path("/ed")
>> @Api("ed")
>> @Produces({ MediaType.APPLICATION_JSON })
>> public class Endpoint {
>> 
>>     @POST
>>     @Consumes({ MediaType.APPLICATION_JSON,MediaType.TEXT_PLAIN })
>>     public Response post(@BeanParam MyParams params,@Valid Body body) {
>>         //Do things with params.getOauthToken(), params.getUriInfo() and body
>>         return Response.ok().build();
>>     }
>> 
>> }
>> 
>> 
>> MyParams.java
>> 
>> package org.example.un.rest.ed.params;
>> 
>> import javax.ws.rs.HeaderParam;
>> import javax.ws.rs.core.Context;
>> import javax.ws.rs.core.UriInfo;
>> 
>> import io.swagger.annotations.ApiParam;
>> 
>> public class MyParams {
>>     
>>     @HeaderParam("Authorization")
>>     @ApiParam(hidden = true) //It must be true, since after authorization 
>> swagger sends the token
>>     private String oauthToken;
>>     
>>     @Context
>>     private UriInfo uriInfo;
>> 
>>     public String getOauthToken() {
>>         return oauthToken;
>>     }
>> 
>>     public void setOauthToken(String oauthToken) {
>>         this.oauthToken = oauthToken;
>>     }
>> 
>>     public UriInfo getUriInfo() {
>>         return uriInfo;
>>     }
>> 
>>     public void setUriInfo(UriInfo uriInfo) {
>>         this.uriInfo = uriInfo;
>>     }
>> 
>> }
>> 
>> 
>> Body.java
>> 
>> package org.example.un.rest.json;
>> 
>> import javax.validation.constraints.NotNull;
>> 
>> public class Body {
>>     
>>     @NotNull
>>     private String firstField;
>>     @NotNull
>>     private String secondField;
>> 
>>     public String getFirstField() {
>>         return firstField;
>>     }
>>     
>>     public String getSecondField() {
>>         return secondField;
>>     }
>> 
>> }
>> 
>> 
>> I am using JBOSS EAP 7 to host the application. Thanks for the attention and 
>> sorry about any language mistakes, English is not my native language.
>> 
>> 
>>  
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Swagger" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>> 
>>  
>> 
>>  
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Swagger" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>> 
>>  
>> 
>>  
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Swagger" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>> 
>>  
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Swagger" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Swagger" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to