Vraptor FileUpload + dados com angularjs

Ola estou apanhando para fazer um cadastro com upload de imagens ao submeter o formulário os dados não chegam ao controller e não recebo nenhuma exception, já adicionei as bibliotecas necessárias para upload. Segue abaixo códigos. Desde já agradeço.

Estabelecimento.html

    > <div class="container">
		<form id="form_upload" enctype="multipart/form-data" >
					<div class="col-md-offset-3 col-md-6">
						<div class="title-container">
							<h3 class="title text-center" data-ng-hide="estabelecimento.id" >Cadastre seu estabelecimento</h3>
							<h3 class="title text-center" data-ng-show="estabelecimento.id" >Alterar dados estabelecimento</h3>
							<h4 class="sub-title text-center">É rápido e fácil</h4>
						</div>
						<div class="content-form">
							<div class="form-group">
								<div class="col-md-12">
									<span class="dados-obrigatorios"></span>
									<input class="form-control" placeholder="Nome do Estabelecimento *"
										data-ng-model="estabelecimento.nome" />
								</div>
							</div>
							<div class="form-group" data-ng-hide="mostrarEndereco">
								<label for="txtSigla" class="col-lg-2 control-label">Cep:</label>
								<div class="col-lg-10">
									<input type="text" class="form-control" id="txtSigla" data-ng-model="estabelecimento.endereco.cep" >
								</div>
								<a class="btn btn-primary" data-ng-click="buscarEndereco()">Buscar</a>
							</div>
					
							<div class="form-group" data-ng-show="mostrarEndereco" >
								<div class="row">
									<input type="text" disabled class="field1 disabled state" data-ng-model="estabelecimento.endereco.estado.nome">
									<input type="text" disabled class="field2 disabled city" data-ng-model="estabelecimento.endereco.cidade.nome">
								</div><!-- /.row -->
								<div class="row">
									<input type="text" class="field4 disabled address" disabled placeholder="Digite seu endereço" data-ng-model="estabelecimento.endereco.logradouro" >
									<input id="streetNumber" type="text" class="field5 streetNumber" autofocus="autofocus" placeholder="Nº" data-ng-model="estabelecimento.endereco.numero">
								</div><!-- /.row -->
								<div class="row">
									<span class="radio-holder  field-n7"><a href="#" class="unchecked"></a><input type="checkbox" class="semcompl" value="" data-ng-model="semComplemento" >Sem Complemento</span>
									<input type="text" placeholder="Complemento" class="field-n6 compl semComplId tooltip-example" id="semComplId" maxlength="20" 
									data-helpermessage="apartamento, bloco, condomínio, etc" data-ng-model="estabelecimento.endereco.complemento" data-ng-disabled="semComplemento" >
									<input type="text" placeholder="Ponto de referência" class="field-n8 reference tooltip-example" maxlength="180" 
									data-helpermessage="Lugares ou estabelecimento próximos que facilitem a entrega"><span class="tooltip tooltip-helper" 
									style="position: fixed; top: 436px; left: 895.781px; max-width: 335px; display: none;" data-ng-model="estabelecimento.endereco.pontoReferencia">
									Lugares ou estabelecimentos próximos que facilitem a entrega</span>
								</div><!-- /.row -->
							
						</div>
						<div class="form-group">
								<div class="col-md-6">
									<input class="form-control" placeholder="Estabelecimento abre ás *"
										data-ng-model="estabelecimento.horaAbertura" />
								</div>
								<div class="col-md-6">
									<input class="form-control" placeholder="Estabelecimento fecha ás *"
										data-ng-model="estabelecimento.horaFechamento" />
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-12">
									<input class="form-control" placeholder="Nome completo do responsável pelo estabelecimento *"
										data-ng-model="estabelecimento.responsavel"/>
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-12">
									<input class="form-control" placeholder="E-mail do responsável pelo estabelecimento *"
										data-ng-model="estabelecimento.emailResponsavel"/>
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-6">
						            <label>Cobra taxa de entrega? *:
									    <input type="checkbox" data-ng-model="estabelecimento.cobraEntrega"
									           data-ng-true-value="'Sim'" data-ng-false-value="'Não'">
									   </label>
								</div>
								<div class="col-md-6">
									<input id="taxaEntrega" data-ng-model="estabelecimento.taxaEntrega"
										class="form-control" placeholder="Taxa de entrega (em R$) *"  />
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-6">
						            <label>Distância máxima entrega:
									    <input data-ng-model="estabelecimento.distanciaEntrega">
									   </label>
								</div>
							</div>
							
							<div class="form-group">
								<div class="col-md-12">
									<div class="input-group">
										<input data-file-model="myFile" type="file" />
									    <div class="label label-info">
									      {{ myFile.name }}
									    </div>
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-12">
									<input class="form-control" placeholder="Insira um nome de até 12 letras para ser usado no link do seu estabelecimento"
										data-ng-model="estabelecimento.nomeCurto"  maxlength="12" />
								</div>
							</div>
							
					</div>
				</div>
			</form>
				<div class="form-group">
					<div class="col-md-12">
						<a class="btn btn-primary" data-ng-click="save()">Salvar</a>
					</div>
				</div>
</div>

EstabelecimentoController,js

angular.module(‘app’).controller(‘EstabelecimentoController’, [’$scope’, ‘$http’, ‘$acaoSistema’, ‘$message’, ‘$table’,‘fileService’,‘Upload’,
function($scope, $http, $acaoSistema, $message, $table, fileService, Upload) {

  $scope.save = function() {
  var file = fileService[0];
  Upload.upload({
        url: 'estabelecimento/save',
        file: file,
        method: 'POST',
        headers: {'Content-Type': 'multipart/form-data'}, // only for html5
        data: {'estabelecimento': $scope.estabelecimento}
    }).error(function (data) {
    	$message.addMsgInf('faio');
  });

}
}

Código java para upload

@Post
@Path(“estabelecimento/save”)
@Consumes(“application/json”)
@Secured
public void save(EstabelecimentoTO estabelecimento, UploadedFile file) {
try {
estabelecimentoBO.salvar(estabelecimento);
result.use(Results.http()).body(ResourceMessageUtil.getDescricao(MessageCode.MSG_005)).setStatusCode(200);
} catch (NegocioException e) {
adicionarMensagemErroNegocio(e);
} catch (Exception e) {
adicionarMensagemErroInesperado(e);
}
}

Qual a versao do vraptor que esta usando?

4.1.4

Ative o log de debug do vraptor e post a saida do console

14:39:22,576 DEBUG [ParametersInstantiator] Conversion errors: []
14:39:22,576 DEBUG [ParametersInstantiator] Parameter values for [DefaultControllerMethod: public void br.com.app.ssd.controller.EstabelecimentoController.save(br.com.app.ssd.to.EstabelecimentoTO,br.com.caelum.vraptor.observer.upload.UploadedFile)] are [br.com.app.ssd.to.EstabelecimentoTO@69d0b721, DefaultUploadedFile{fileName=c.jpg}]
14:39:22,577 DEBUG [CDIBasedContainer ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor
14:39:22,578 DEBUG [CDIBasedContainer ] beans for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor] with qualifiers [@Any @Default]]
14:39:22,579 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor$Proxy$_$$WeldClientProxy
14:39:22,579 DEBUG [CDIBasedContainer ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.FlashInterceptor
14:39:22,579 DEBUG [CDIBasedContainer ] beans for class br.com.caelum.vraptor.interceptor.FlashInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.FlashInterceptor] with qualifiers [@Any @Default]]
14:39:22,580 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor$Proxy$
$$_WeldClientProxy
14:39:22,584 DEBUG [ExecuteMethod ] Invoking public void br.com.app.ssd.controller.EstabelecimentoController.save(br.com.app.ssd.to.EstabelecimentoTO,br.com.caelum.vraptor.observer.upload.UploadedFile)
14:39:31,224 DEBUG [DefaultControllerTranslator] trying to access /resources/js/angular/angular.js
14:39:31,225 DEBUG [VRaptor ] VRaptor ended the request
14:39:32,370 DEBUG [DefaultResult ] including attribute vmessages: br.com.caelum.vraptor.validator.Messages@160527d9
14:39:32,371 DEBUG [CDIBasedContainer ] asking cdi to get instance for interface br.com.caelum.vraptor.view.HttpResult
14:39:32,371 DEBUG [CDIBasedContainer ] beans for interface br.com.caelum.vraptor.view.HttpResult is [Managed Bean [class br.com.caelum.vraptor.view.DefaultHttpResult] with qualifiers [@Any @Default]]
14:39:32,371 DEBUG [DefaultInterceptorStack] All registered interceptors have been called. End of VRaptor Request Execution.
14:39:32,371 DEBUG [ForwardToDefaultView] Request already dispatched and commited somewhere else, not forwarding.
14:39:32,371 DEBUG [VRaptor ] VRaptor ended the request

Aqui mostra que voce esta recebendo o arquivo.

Coloque um breakpoint no method save e veja como esta o file.

Correto, o arquivo está preenchido não está chegando os dados.

o atribute file esta null?

Altere o valor do model data-file-model=“myFile” para data-file-model=“file” e tenta novamente

Os dados do modelo que não estão chegado, apenas os do arquivo. Alguma ideia do por que disso?