Boa noite.
Estou com problemas em receber um arquivo do meu cliente android.
Crei um web service rest, só que não sei como que recebo no POST.
Eu testei com um web service .net e deu certo, so que preciso fazer em java.
No android eu fiz a seguinte linha que envia:
Arquivo a = new Arquivo(); (essa classe tem os get's set's)
a.setConteudo(arquivoBase64);
a.setNome("MeuArquivoPDF.pdf");
a.setTamanho(1000);
GsonBuilder b = new GsonBuilder();
Gson j = b.create();
String json = j.toJson(a);
List<NameValuePair> parametros = new ArrayList<NameValuePair>();
parametros.add(new BasicNameValuePair("json", json));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parametros,HTTP.UTF_8);
req.setEntity(formEntity);
nesse caso como pelo que parece o conteúdo do seu json não é apenas o conteúdo do arquivo pdf e sim um objeto do tipo arquivo com atributos conteúdo ,
nome do arquivo e tamanho , então no seu webservice vc não vai receber um pdf e sim um simples json do seu objeto arquivo. O que vc vai fazer é deserializar o json no servidor com gson para um objeto do tipo Arquivo e vai pegar o conteudo que com o getConteudo fazer o decode da base64 e salvar o seu arquivo pdf no servidor. Tudo isso porque não está enviando um arquivo pdf serializado e sim um objeto do tipo Arquivo. Mas acho que ao invés de enviar o arquivo vc poderia simplesmente enviar o conteudo apenas e só gerar o pdf no servidor.
Se você quiser receber uma entidade como JSON, o mais aconselhável é que você mapeie a sua entidade da maneira apropriada e trabalhe com essa entidade (ao invés de utilizar Strings).
Arquivo a = new Arquivo(); (essa classe tem os get's set's)
a.setConteudo(arquivoBase64);
a.setNome("MeuArquivoPDF.pdf");
a.setTamanho(1000);
GsonBuilder b = new GsonBuilder();
Gson j = b.create();
String json = j.toJson(a);
req.setEntity(json);
e no Webservice crie uma classe Arquivo com os mesmo parametros e com mapeamentos Xml
[code] @POST @Path("/ja") @Produces(“application/json”) @Consumes(“application/json”)
public String ja(Arquivo json){
Obrigada pela ajuda.
Mas ali quando crio o Arquivo e busco no meu webservice subentende-se que está em um mesmo pacote.
Mas no caso, por especificação passada, eu tive que criar a aplicação android no eclipse e o meu web service no net beans.
Desculpe, mas nesse caso como que recebo o Arquivo json? Realmente estou confusa.
Não tenho experiencia com java, e estou sofrendo para conseguir ajuda sem que me interpretem de forma que eu “queria que façam por mim”, e sim que me instruam.
no arquivo pede para criar a classe arquivo…
aí eu coloquei Arquivo arquivo = new Arquivo();
mas mesmo assim nessa linha da erro, acusa:
no suitable method found for write(String), method BufferedOutputStream.write(byte[],int,int)…
Pelo que eu “acho” a lógica está certa, eu recebo uma String la do meu android, aí uso a biblioteca gson para tirar do object json, faço o decode do base64 e guardo em um byte[] e depois escrevo os bytes e monto o arquivo.
Só que o problema é que o post não está recebendo a minha String. Eu fiz um teste com o GET, mandando “OI EU SOU O SERVIDOR”, e apareceu no meu emulador, sinal que realmente o meu web service e a aplicação android estão se comunicando.
Mas não estou conseguindo identificar onde está o problema. Estou pesquisando mas não encontro nada que me ajude, acredito que ainda mais pelo fato de eu não ter conhecimento da linguagem aí acaba dificultando mais ainda para entender. E pretendo estudar mais afundo sobre java, só que no momento não tenho tempo hábil para começar desde o princípio até chegar no mais complexo, que é o meu caso hoje.