POST HTTP method does not work (With 2.0.0-rc3)

34 views
Skip to first unread message

Kuttaiah Robin

unread,
Jun 24, 2019, 5:58:45 AM6/24/19
to dropwizard-dev
Hello,

I have a usecase for importing zip file into our microservice. Hence below is the code I have.

REST RESOURCE
---------------
@Path("/models")
@Provider
@Produces( {"application/json"} )
@OpenAPIDefinition(
    info
= @Info
   
(
        title
= "insightmanager",
        version
= "1.0.0",
        description
= "Insight Manager"
       
),
    servers
= {
       
@Server(
            url
= "{protocol}//{host}:{port}/{basePath}",
            variables
= {
               
@ServerVariable(name = "protocol",defaultValue = "http:"),
               
@ServerVariable(name = "host", defaultValue = "localhost"),
               
@ServerVariable(name = "port", defaultValue = "8765"),
               
@ServerVariable(name = "basePath",defaultValue="insight-server/api/1.0/")
           
})}
   
)
public class ModelResource {


 
@POST
 
@Path(value = "{modelId}/version}/importmodel")
 
@Consumes(MediaType.MULTIPART_FORM_DATA)
 
@Operation(summary = "import model ",
  responses
= {
     
@ApiResponse(responseCode = "200" ,description = "get t2p info",
          content
= @Content(mediaType = "application/json",
          schema
= @Schema(implementation = T2PInfo.class))),
     
@ApiResponse(responseCode = "500", description = "import failed",
      content
= @Content(mediaType="application/json",schema=@Schema(implementation = oracle.insight.server.rest.model.Status.class)))})          
 
public Response importModel(@Context HttpHeaders headers, @FormDataParam("file") InputStream uploadedInputStream,
     
@FormDataParam("file") FormDataContentDisposition fileMetaData, @PathParam("version") String version,
     
@QueryParam("overwrite") boolean overwrite, @QueryParam("locale") String locale) {
     
   
ModelService modelService = ModelServiceFactory.INSTANCE.getModelService();
   
Response response = modelService.importModel(uploadedInputStream, overwrite, locale);
   
return response;
 
}
}


I have a Configuration Bundle like;

public class InsightManagerBundle implements ConfiguredBundle<DWInsightManagerConfiguration> {


 
@Override
 
public void run(final DWInsightManagerConfiguration configuration, final Environment environment) throws Exception {
    configureCors
(environment);
 
}


 
@Override
 
public void initialize(final Bootstrap<?> bootstrap) {
   
// nothing to do here, we need access to configuration and we won't have that until run() is executed.
 
}


 
private void configureCors(Environment environment) {
   
final FilterRegistration.Dynamic cors =
        environment
.servlets().addFilter("CORS", CrossOriginFilter.class);


   
// Configure CORS parameters
    cors
.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
    cors
.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "origin, content-type, accept, authorization");
    cors
.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "OPTIONS,GET,PUT,POST,DELETE,HEAD");
    cors
.setInitParameter(CrossOriginFilter.ALLOW_CREDENTIALS_PARAM, "true");


   
// Add URL mapping
    cors
.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");

 
}
}


This configuration bundle is being added in Application;

public final class DWInsightManagerApplication extends Application<DWInsightManagerConfiguration> {


 
public DWInsightManagerApplication() {
   
super();
 
}


 
@Override
 
public String getName() {
   
return DWInsightManagerConfiguration.ROOT_PATH;
 
}


 
@Override
 
public void run(final DWInsightManagerConfiguration configuration, final Environment environment) {
    insightManager
.customizeRouting(environment.jersey().getResourceConfig());
 
}


 
@Override
 
public void initialize(Bootstrap<DWInsightManagerConfiguration> bootstrap) {
   
super.initialize(bootstrap);
    bootstrap
.addBundle(new InsightManagerBundle());
 
}
}



I tried adding in our Configuration class or within run method of our application itself but it is of no use.

I always get "405 Method Not Allowed"

Response Headers;
HTTP/1.1 405 Method Not Allowed
Server: nginx
Date: Mon, 24 Jun 2019 09:04:50 GMT
Content-Length: 54
Connection: keep-alive
allow: DELETE,GET,OPTIONS,PUT
.........


DELETE, GET, PUT works without issues. This POST rest API works in other framework, so I do not see any issue with that.

Is there something am missing basic stuff or is it an issue with 2.0.0-rc3 candidate. 

Any help would be highly appreciated.

Stephen Souness

unread,
Jun 24, 2019, 6:21:13 AM6/24/19
to dropwiz...@googlegroups.com
There might be a clue in the response headers - it mentions nginx.

-
Stephen
--
You received this message because you are subscribed to the Google Groups "dropwizard-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dropwizard-de...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dropwizard-dev/54ef6033-ccb2-443d-a42f-0b787f44492a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Kuttaiah Robin

unread,
Jun 24, 2019, 12:34:02 PM6/24/19
to dropwizard-dev
Thanks Let me have a look at it. Few of the POST is working. But this is MultiPart. Will analyze further.

regards,
Robin Kuttaiah
To unsubscribe from this group and stop receiving emails from it, send an email to dropwiz...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages