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

23/01/2020

0

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

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar