Erro de serialização ao enviar json de nota fiscal eletrônica através de integração com servidor rest
Ao enviar json com dados da nota via post no Jsf, dá o erro abaixo com api Jackson. Por enquanto estou usando somente variáveis locais. Já tentei resolver com algumas anotações na classe do managed bean mas sem sucesso, ex:
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
Código do método
Erro
Advertência: #{contasReceberBean.nfseAutorizar()}: com.sun.jersey.api.client.ClientHandlerException: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.codehaus.jettison.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
javax.faces.FacesException: #{contasReceberBean.nfseAutorizar()}: com.sun.jersey.api.client.ClientHandlerException: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.codehaus.jettison.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
Código do método
public String nfseAutorizar() throws JSONException, JsonParseException {
String login = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
/* Substituir pela sua identificação interna da nota. */
String ref = lanc.getIdContas().toString();*/
String ref = "77477";
System.out.println(ref);
String server = "https://homologacao.focusnfe.com.br/";
String url = server.concat("v2/nfse?ref=" + ref);
/* Configuração para realizar o HTTP BasicAuth. */
Object config = new DefaultClientConfig();
Client client = Client.create((ClientConfig) config);
client.addFilter(new HTTPBasicAuthFilter(login, ""));
/* Aqui são criados as hash's que receberão os dados da nota. */
HashMap<String, String> nfse = new HashMap<>();
HashMap<String, String> prestador = new HashMap<>();
HashMap<String, String> tomador = new HashMap<>();
HashMap<String, String> tomadorEndereco = new HashMap<>();
HashMap<String, String> servico = new HashMap<>();
nfse.put("data_emissao", "2020-01-17T17:40:00");
nfse.put("natureza_operacao", "1");
prestador.put("cnpj", "17511734000138");
prestador.put("inscricao_municipal", "1357920013");
prestador.put("codigo_municipio", "3106200");
tomador.put("cnpj", "07056285000121");
tomador.put("razao_social", "EMPRESA TESTE");
tomador.put("email", "email-do-tomador@google.com.br");
tomadorEndereco.put("bairro", "Santa Cruz");
tomadorEndereco.put("cep", "30644200");
tomadorEndereco.put("codigo_municipio", "4106902");
tomadorEndereco.put("logradouro", "Estrada do Jatobá");
tomadorEndereco.put("numero", "88");
tomadorEndereco.put("uf", "MG");
servico.put("discriminacao", "Teste de servico");
servico.put("aliquota", "3.00");
servico.put("base_calculo", "1.0");
servico.put("valor_iss", "0");
servico.put("iss_retido", "false");
servico.put("codigo_tributario_municipio", "080101");
servico.put("item_lista_servico", "0102");
servico.put("valor_servicos", "1.0");
servico.put("valor_liquido", "1.0");
ObjectMapper objectMapper = new ObjectMapper();
//objectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
/* Depois de fazer o input dos dados, são criados os objetos JSON já com os valores das hash's. */
//JSONObject json = new JSONObject (nfse);
json = new JSONObject(nfse);
JSONObject jsonPrestador = new JSONObject(prestador);
JSONObject jsonTomador = new JSONObject(tomador);
JSONObject jsonTomadorEndereco = new JSONObject(tomadorEndereco);
JSONObject jsonServico = new JSONObject(servico);
/* Aqui adicionamos os objetos JSON nos campos da API como array no JSON principal. */
json.accumulate("prestador", jsonPrestador);
json.accumulate("tomador", jsonTomador);
jsonTomador.accumulate("endereco", jsonTomadorEndereco);
json.accumulate("servico", jsonServico);
/* É recomendado verificar como os dados foram gerados em JSON e se ele está seguindo a estrutura especificada em nossa documentação.
System.out.print(json); */
System.out.print(json);
WebResource request = client.resource(url);
ClientResponse resposta = request.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, json);
//ClientResponse resposta = request.type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, json);
//ClientResponse resposta = request.post(ClientResponse.class, json);
int httpCode = resposta.getStatus();
String body = resposta.getEntity(String.class);
/* As três linhas a seguir exibem as informações retornadas pela nossa API.
* Aqui o seu sistema deverá interpretar e lidar com o retorno. */
System.out.print("HTTP Code: ");
System.out.print(httpCode);
System.out.printf(body);
return null;
}
Erro
Advertência: #{contasReceberBean.nfseAutorizar()}: com.sun.jersey.api.client.ClientHandlerException: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.codehaus.jettison.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
javax.faces.FacesException: #{contasReceberBean.nfseAutorizar()}: com.sun.jersey.api.client.ClientHandlerException: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.codehaus.jettison.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
Bruno Andrade
Curtidas 0