2016-01-22 2 views
0

Dropwizard (версия 0.8.2) использует внутреннюю оболочку для предоставления HTTP-клиента. Я использую этот клиент для отправки запроса Multipart POST на внешнюю конечную точку останова в службу SMS. Код приведен ниже, но он, похоже, не работает, потому что я не получаю никакого сообщения через этот метод, и он не вызывает никаких ошибок. URI для первого образца http://enterprise.com/GatewayAPI/rest?userid=%s&password=%s&method=xlsUpload&filetype=zip&msg_type=TEXT&auth_scheme=PLAIN&v=1.1Dropwizard Jersey client Многостраничный http-запрос

FileDataBodyPart fileDataBodyPart = new FileDataBodyPart(fileName, file, 
                 MediaType.APPLICATION_OCTET_STREAM_TYPE); 
     FormDataMultiPart multiPart = new FormDataMultiPart(); 

     multiPart.field("fileName", fileName).bodyPart(fileDataBodyPart); 
     Entity<FormDataMultiPart> entity = 
      Entity.entity(multiPart, multiPart.getMediaType());// MediaType.MULTIPART_FORM_DATA_TYPE) 

     Client tenacityClient = TenacityJerseyClientBuilder 
      .builder(AppDependencyKeys.BULK_SMS) 
      .usingTimeoutPadding(Duration.milliseconds(500)).build(client) 
      .register(MultiPartFeature.class); 

     Invocation invocation = getResourceBuilder(tenacityClient, uri).buildPost(entity); 
     Future<Response> futureResponse = invocation.submit(); 
     long start = System.currentTimeMillis(); 

     futureResponse.get(); 

Но один и та же работа с описанным ниже методом, когда я использую Apache Commons HTTPClient. рабочий код для него приведен ниже.

HttpClient client = new HttpClient(); 
    PostMethod method = new 
     PostMethod("http://enterprise.com/GatewayAPI/rest"); 
    Part[] parts = { 
     new StringPart("method", "xlsUpload"), 
     new StringPart("userid", "*******"), 
     new StringPart("password", "*******"), 
     new StringPart("filetype", "zip"), 
     new StringPart("v", "1.1"), 
     new StringPart("auth_scheme", "PLAIN"), 
     new FilePart(file.getName(), file) 
    }; 
    method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams())); 
    int statusCode = client.executeMethod(method); 
    log.info("Status code: {}", statusCode); 

Но я хочу использовать первый способ, так как это лучше подходит для моей инфраструктуры.

+0

В чем вопрос? – eg04lt3r

+0

Вопрос: почему первый код не работает, пока второй работает? – pradex

ответ

0

Я думаю, что вы должны правильно настроить тип носителя для объекта. В настоящее время вы создали новый FormDataMultiPart, но вы не установили его и не использовали тип мультимедиа, и он использовал значение «text/plain» y default.

Таким образом, вы должны настроить MediaType.APPLICATION_OCTET_STREAM_TYPE на свой формат FormDataMultiPart как тип носителя.

+1

Я попытался сделать это, но я получил следующее исключение .. «пойманное исключение во время обработки запроса javax.ws.rs.ProcessingException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter не найден для типа media = application/octet -stream, type = class org.glassfish.jersey.media.multipart.FormDataMultiPart, genericType = класс org.glassfish.jersey.media.multipart.FormDataMultiPart. ' – pradex

Смежные вопросы