Hi,

this is the debug output of httpclient when uploading a simple text file only 
containing the string "987654321"

> DEBUG [org.apache.http.headers] http-outgoing-0 >> POST /upload?&name=test 
> HTTP/1.1
> DEBUG [org.apache.http.headers] http-outgoing-0 >> Content-Length: 9
> DEBUG [org.apache.http.headers] http-outgoing-0 >> Content-Type: 
> application/vnd.qlik.sense.app
> DEBUG [org.apache.http.headers] http-outgoing-0 >> Host: localhost:4242
> DEBUG [org.apache.http.headers] http-outgoing-0 >> Connection: Keep-Alive
> DEBUG [org.apache.http.headers] http-outgoing-0 >> User-Agent: 
> Apache-HttpClient/4.3.5 (java 1.5)
> DEBUG [org.apache.http.headers] http-outgoing-0 >> Accept-Encoding: 
> gzip,deflate
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "POST /upload?name=test 
> HTTP/1.1[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "Content-Length: 9[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "Content-Type: 
> application/vnd.qlik.sense.app[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "Host: localhost:4242[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "Connection: 
> Keep-Alive[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "User-Agent: 
> Apache-HttpClient/4.3.5 (java 1.5)[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "Accept-Encoding: 
> gzip,deflate[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "[\r][\n]"
> DEBUG [org.apache.http.wire] http-outgoing-0 >> "987654321"

As the service I try to contact is reachable only by https I can not trace the 
network traffic...

Does this answer your question Sergey?

Best regards

> Gesendet: Mittwoch, 05. November 2014 um 16:54 Uhr
> Von: "Sergey Beryozkin" <[email protected]>
> An: [email protected]
> Betreff: Re: Upload file with CXF client proxy
>
> Hi
> 
> What does HttpClient produces, is it actually a multipart request ?
> Can you trace it and let me know what the differences are ?
> 
> Cheers, Sergey
> On 05/11/14 15:35, Daniel H. Peger wrote:
> > Hi,
> > I'm trying to use CXF client proxies to connect to 3rd party REST Services 
> > using typed interfaces. Among other things I need to upload a file with a 
> > POST request to an URL. Using apache-httpclient the call to the service 
> > looks like this and works:
> >
> >> CloseableHttpClient httpclient = HttpClients.createDefault();
> >>
> >> try {
> >>
> >>      HttpPost httppost = new HttpPost(
> >>              "https://localhost/upload?name=test";);
> >>
> >>      File file = new File("d:/ws/file.txt");
> >>
> >>      FileEntity reqEntity = new FileEntity(file,
> >>              ContentType.create("application/vnd.qlik.sense.app"));
> >>
> >>      httppost.setEntity(reqEntity);
> >>
> >>      System.out.println("Executing request: "
> >>              + httppost.getRequestLine());
> >>      CloseableHttpResponse response = httpclient.execute(httppost);
> >>      try {
> >>          System.out.println("----------------------------------------");
> >>          System.out.println(response.getStatusLine());
> >>          System.out.println(EntityUtils.toString(response.getEntity()));
> >>          EntityUtils.consume(response.getEntity());
> >>      } finally {
> >>          response.close();
> >>      }
> >> } finally {
> >>      httpclient.close();
> >> }
> >
> > I tried to use the following interface to create a CXF client proxy to 
> > execute the call via cxf:
> >
> >> public interface UploadService
> >> {
> >>    String QUERY_PARAM_APPNAME = "name";
> >>
> >>    @POST
> >>    @Consumes("application/vnd.qlik.sense.app")
> >>    @Produces("application/json")
> >>    @Path("/upload")
> >>    UploadResponse upload(@QueryParam(QUERY_PARAM_APPNAME) final String 
> >> anAppName, final File anAppFile);
> >> }
> >
> >> final UploadService proxy = JAXRSClientFactory.create(
> >>                            https://localhost,
> >>                            UploadService.class, 
> >> Collections.singletonList(new JacksonJsonProvider()));
> >> proxy.upload("test", new File("d:/ws/file.txt"));
> >
> > Instead of using File I already tried to use InputStream or byte[] but all 
> > the requests result in a 400 response (BadRequest) from the server. As the 
> > server is a 3rd party tool I have no more information about how the file is 
> > to be uploaded other than that the file needs to be the request body.
> >
> > I turned on the logging interceptors and the request looks fine:
> >
> >> Nov 05, 2014 3:42:04 PM org.apache.cxf.interceptor.LoggingOutInterceptor
> >> INFO: Outbound Message
> >> ---------------------------
> >> ID: 1
> >> Address: https://localhost/upload?name=test
> >> Http-Method: POST
> >> Content-Type: application/vnd.qlik.sense.app
> >> Headers: {Content-Type=[application/vnd.qlik.sense.app], 
> >> Accept=[application/json]}
> >> Messages: Outbound Message (saved to tmp file):
> >> Filename: 
> >> C:\Users\dpr\AppData\Local\Temp\2\cxf-tmp-951459\cos1238456137568485932tmp
> >> (message truncated to 102400 bytes)
> >>
> >> Payload: ....
> >
> > But the response is
> >
> >> Nov 05, 2014 3:42:04 PM org.apache.cxf.interceptor.LoggingInInterceptor
> >> INFO: Inbound Message
> >> ----------------------------
> >> ID: 1
> >> Response-Code: 400
> >> Encoding: ISO-8859-1
> >> Content-Type:
> >> Headers: {Cache-Control=[private, must-revalidate, max-age=0], Date=[Wed, 
> >> 05 Nov 2014 14:42:03 GMT], Expires=[Wed, 05 Nov 2014 14:42:04 GMT], 
> >> Server=[Repository API > REST Server/1.0.0.0 Microsoft-HTTPAPI/2.0], 
> >> transfer-encoding=[chunked]}
> >> Payload: File upload error
> >
> > Thus my question is: How can I do the call that works using httpclient with 
> > cxf?
> >
> > Best regards
> >
> 
> 

Reply via email to