Erro de serialização ao enviar json de nota fiscal eletrônica através de integração com servidor rest

Java

JSON

Jackson

23/01/2020

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

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

Bruno Andrade

Curtidas 0
POSTAR