Hi Sergey,  

The CXF version I am using is 3.0.0

Thanks
-Sonam


-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]] 
Sent: Thursday, April 16, 2015 2:34 PM
To: [email protected]
Subject: Re: jaxrs with angularjs file upload question

Hi

Which CXF version is it ?

Cheers, Sergey
On 16/04/15 13:34, Sonam Samdupkhangsar wrote:
> This topic is a little off CXF Forum but I thought I would try anyways to see 
> if someone has come across this.
>
>
> I am working on a JAXRS method to upload a file with AngularJS client. I 
> followed the sample found here for the AngularJS code 
> https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs.
>  On the server side, the method is found but I run into NullPointerException 
> for the header. I will post the stack trace at the end here.
>
> My CXF JAXRS interface :
>
> @Path("/images")
> public interface LinkableImages {
>
>      @POST
>      @Path("/upload")
>      @Produces(MediaType.APPLICATION_JSON)
>      @Consumes(MediaType.MULTIPART_FORM_DATA)
>      public List<Link> uploadFile(@Multipart(value = "userId", type = 
> "application/json")Long userId,
>              @Multipart(value = "folder", type = "application/json") String 
> foldername,
>              @Multipart(value="file") Attachment attachment) throws 
> Exception; }
>
> My html file upload controller with AngularJS:
>
>
> <div data-ng-controller = "uploadCtrl">
>       <input type="file" file-model="myFile"/>
>       <button data-ng-click="uploadFile()">upload me</button>
>      </div>
>
>
> The AngularJS code for the HTML file input:
>
> app.service('fileUpload', ['$http', function ($http) {
>      this.uploadFileToUrl = function(file, uploadUrl){
>          console.log("file about to be uploaded is "+ file);
>          var fd = new FormData();
>
>          fd.append('file', file);
>          fd.append('userId', 3);
>          fd.append('folder', '')
>          $http.post(uploadUrl, fd, {
>              transformRequest: angular.identity,
>              headers: {'Content-Type': 'undefined'}
>          })
>          .success(function(){
>              console.log("done post");
>          })
>          .error(function(data){
>              console.log("failed to post "+data);
>          });
>      }
>
>
>      }
>
> }]);
>
> app.controller('uploadCtrl', ['$scope', 'fileUpload', function($scope, 
> fileUpload){
>
>      $scope.uploadFile = function(){
>          var file = $scope.myFile;
>          console.log('file is ' + JSON.stringify(file) + ' file is '+ file);
>          var uploadUrl = 
> "http://localhost:8080/note/soa/linkableImages/images/upload";;
>          fileUpload.uploadFileToUrl(file, uploadUrl);
>      };
>
> }]);
>
>
> This is the stack trace in the server log:
>
> [2015-04-16 10:30:29,427] DEBUG MultipartFilter 114 doFilterInternal - 
> Request [/note/soa/linkableImages/images/upload] is not a multipart 
> request
> [2015-04-16 10:30:29,428]  INFO CsrfHeaderFilter 31 doFilterInternal - 
> setting csrf token in the cookie
> [2015-04-16 10:30:29,446] DEBUG ServletController 219 
> invokeDestination - Service http request on thread: 
> Thread[http-nio-8080-exec-64,5,main]
> [2015-04-16 10:30:29,448] DEBUG AbstractHTTPDestination 224 invoke - 
> Create a new message for processing
> [2015-04-16 10:30:29,487] DEBUG Headers 380 copyFromRequest - Request 
> Headers: {Accept=[application/json, text/plain, */*], 
> accept-encoding=[gzip, deflate], accept-language=[en-us], 
> connection=[keep-alive], Content-Length=[1113], 
> content-type=[undefined], 
> cookie=[JSESSIONID=9D0598F4A5473149F59C385AC83AF11A; 
> XSRF-TOKEN=d1b24eff-67e3-42f0-8707-7b4d1cbb9f24], dnt=[1], 
> host=[localhost:8080], origin=[http://localhost:8080], 
> referer=[http://localhost:8080/note/user/note], 
> user-agent=[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) 
> AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5], 
> x-xsrf-token=[d1b24eff-67e3-42f0-8707-7b4d1cbb9f24]}
> [2015-04-16 10:30:29,512] DEBUG LogUtils 452 doLog - Could not determine bean 
> name for instance of class org.apache.cxf.bus.managers.PhaseManagerImpl.
> [2015-04-16 10:30:29,529] DEBUG PhaseInterceptorChain 242 add - Adding 
> interceptor 
> org.apache.cxf.interceptor.ServiceInvokerInterceptor@5bcb1378 to phase 
> invoke
> [2015-04-16 10:30:29,531] DEBUG PhaseInterceptorChain 242 add - Adding 
> interceptor 
> org.apache.cxf.interceptor.OutgoingChainInterceptor@716b5a5c to phase 
> post-invoke
> [2015-04-16 10:30:29,531] DEBUG PhaseInterceptorChain 242 add - Adding 
> interceptor 
> org.apache.cxf.interceptor.OneWayProcessorInterceptor@3ef98830 to 
> phase pre-logical
> [2015-04-16 10:30:29,532] DEBUG PhaseInterceptorChain 242 add - Adding 
> interceptor 
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor@705c279c to phase 
> unmarshal
> [2015-04-16 10:30:29,534] DEBUG PhaseInterceptorChain 242 add - Adding 
> interceptor 
> org.apache.cxf.transport.https.CertConstraintsInterceptor@4dce7e88 to 
> phase pre-stream
> [2015-04-16 10:30:29,536] DEBUG PhaseInterceptorChain 722 outputChainToLog - 
> Chain org.apache.cxf.phase.PhaseInterceptorChain@5ba6c109 was created. 
> Current flow:
>    pre-stream [CertConstraintsInterceptor]
>    unmarshal [JAXRSInInterceptor]
>    pre-logical [OneWayProcessorInterceptor]
>    invoke [ServiceInvokerInterceptor]
>    post-invoke [OutgoingChainInterceptor]
>
> [2015-04-16 10:30:29,536] DEBUG PhaseInterceptorChain 304 doIntercept 
> - Invoking handleMessage on interceptor 
> org.apache.cxf.transport.https.CertConstraintsInterceptor@4dce7e88
> [2015-04-16 10:30:29,539] DEBUG PhaseInterceptorChain 304 doIntercept 
> - Invoking handleMessage on interceptor 
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor@705c279c
> [2015-04-16 10:30:29,587] DEBUG JAXRSUtils 296 selectResourceClass - 
> Trying to select a resource class, request path : /images/upload
> [2015-04-16 10:30:29,588] DEBUG MediaTypeHeaderProvider 165 
> handleMediaTypeWithoutSubtype - Converting a malformed media type 'undefined' 
> to '*/*'
> [2015-04-16 10:30:29,593] DEBUG JAXRSUtils 405 findTargetMethod - 
> Trying to select a resource operation on the resource class 
> com.sonam.note.webservice.jaxrs.user.UserImages
> [2015-04-16 10:30:29,595] DEBUG JAXRSUtils 592 logNoMatchMessage - No method 
> match, method name : hello, request path : /upload, method @Path : /hello, 
> HTTP Method : POST, method HTTP Method : POST, ContentType : */*, method 
> @Consumes : multipart/form-data,, Accept : application/json,text/plain,*/*,, 
> method @Produces : application/json,.
> [2015-04-16 10:30:29,595] DEBUG JAXRSUtils 592 logNoMatchMessage - No method 
> match, method name : getFilenames, request path : /upload, method @Path : 
> /user, HTTP Method : POST, method HTTP Method : GET, ContentType : */*, 
> method @Consumes : */*,, Accept : application/json,text/plain,*/*,, method 
> @Produces : application/json,.
> [2015-04-16 10:30:29,596] DEBUG JAXRSUtils 592 logNoMatchMessage - No method 
> match, method name : deleteFile, request path : /upload, method @Path : 
> /user/folder/delete, HTTP Method : POST, method HTTP Method : POST, 
> ContentType : */*, method @Consumes : application/x-www-form-urlencoded,, 
> Accept : application/json,text/plain,*/*,, method @Produces : 
> application/json,.
> [2015-04-16 10:30:29,598] DEBUG JAXRSUtils 449 findTargetMethod - 
> Resource operation uploadFile may get selected
> [2015-04-16 10:30:29,598] DEBUG JAXRSUtils 592 logNoMatchMessage - No method 
> match, method name : multipartObject, request path : /upload, method @Path : 
> /object, HTTP Method : POST, method HTTP Method : POST, ContentType : */*, 
> method @Consumes : multipart/form-data,, Accept : 
> application/json,text/plain,*/*,, method @Produces : application/json,.
> [2015-04-16 10:30:29,599] DEBUG JAXRSUtils 592 logNoMatchMessage - No method 
> match, method name : createFolder, request path : /upload, method @Path : 
> /user/folder/create, HTTP Method : POST, method HTTP Method : POST, 
> ContentType : */*, method @Consumes : application/x-www-form-urlencoded,, 
> Accept : application/json,text/plain,*/*,, method @Produces : 
> application/json,.
> [2015-04-16 10:30:29,600] DEBUG JAXRSUtils 476 findTargetMethod - 
> Resource operation uploadFile on the resource class 
> com.sonam.note.webservice.jaxrs.user.UserImages has been selected
> [2015-04-16 10:30:29,604] DEBUG JAXRSInInterceptor 190 processRequest 
> - Request path is: /images/upload
> [2015-04-16 10:30:29,605] DEBUG JAXRSInInterceptor 191 processRequest 
> - Request HTTP method is: POST
> [2015-04-16 10:30:29,605] DEBUG JAXRSInInterceptor 192 processRequest 
> - Request contentType is: undefined
> [2015-04-16 10:30:29,606] DEBUG JAXRSInInterceptor 193 processRequest 
> - Accept contentType is: application/json, text/plain, */*
> [2015-04-16 10:30:29,606] DEBUG JAXRSInInterceptor 195 processRequest 
> - Found operation: uploadFile
> [2015-04-16 10:30:29,609] DEBUG MediaTypeHeaderProvider 165 
> handleMediaTypeWithoutSubtype - Converting a malformed media type 'undefined' 
> to '*/*'
> [2015-04-16 10:30:29,674] DEBUG PhaseInterceptorChain 477 unwind - 
> Invoking handleFault on interceptor 
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor@705c279c
> [2015-04-16 10:30:29,678] DEBUG PhaseInterceptorChain 477 unwind - 
> Invoking handleFault on interceptor 
> org.apache.cxf.transport.https.CertConstraintsInterceptor@4dce7e88
> [2015-04-16 10:30:29,681]  WARN LogUtils 452 doLog - Interceptor for 
> {http://user.jaxrs.webservice.note.sonam.com/}UserImages has thrown 
> exception, unwinding now java.lang.NullPointerException
>      at 
> org.apache.cxf.attachment.AttachmentUtil.getHeader(AttachmentUtil.java
> :306)
>
>
> thanks for any hints or suggestions I can follow.
>
> -Sonam
>


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to