Poderias, por favor, colar o registro detalhado?
Avalados por :
Olá equipe!
Atualmente estamos atualizando nosso SAP Commerce Hybris da versão 6.1 para a 2105. Estamos gerenciando nossa loja online com AEM e utilizando o Hybris para administrar produtos, carrinhos e pedidos. Como parte disso, desenvolvemos API REST para obter produtos do Hybris.
Aqui está como se parece a URL da nossa API Rest para obter um produto:
https://localhost:1905/trwebservices/v1/testcountry/products/1234
Ao atualizar para a versão 1905, a URL anterior está retornando um erro 500 do servidor, exibindo um erro no backend. Testamos muitas soluções, mas nenhuma está funcionando. Abaixo está o stacktrace:
"SEVERE: Servlet.service() for servlet [springmvc] in context with path [/trwebservices] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.thomsonreuters.ecom.facades.product.data.TRPriceDataTypeUtil]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.thomsonreuters.ecom.facades.product.data.TRPriceDataTypeUtil and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.thomsonreuters.ecom.facades.product.data.TRProductData["price"]->com.thomsonreuters.ecom.facades.product.data.TRPriceData["util"])] with root cause
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.thomsonreuters.ecom.facades.product.data.TRPriceDataTypeUtil and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.thomsonreuters.ecom.facades.product.data.TRProductData["price"]->com.thomsonreuters.ecom.facades.product.data.TRPriceData["util"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)"
Soluções testadas:
1. Getters e setters foram adicionados na classe TRPriceDataTypeUtil e os especificadores de acesso foram alterados para públicos, mas o erro persiste.
2. Foi adicionado @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) em TRPriceDataTypeUtil. Ainda há o mesmo problema.
3. Foi criada uma classe Objectmapper e o seguinte foi adicionado:
ObjectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY). O problema continua presente.
4. Foram adicionadas as últimas dependências do Jackson e as importações foram alteradas, desta vez o erro não era exibido, mas no frontend ainda estava dando erro 500.
4. A classe TRPriceDataTypeUtil foi completamente removida, mas o problema persiste.
Alguma sugestão?
Poderias, por favor, colar o registro detalhado?
Olá Gang Li,
Obrigado pela sua resposta. Já testei a solução anteriormente. Quando apliquei a solução mencionada, não houve erros no backend, mas o problema persiste no frontend. Continua exibindo um erro interno do servidor 500.
Há algo que eu possa estar ignorando aqui?
Olá Sharada,
O registro mostra que Jackson está tentando serializar um bean sem atributos ou métodos.
Existem diferentes maneiras de resolver isso:
=== Método 1: evitar usar qualquer objeto vazio ===
Itere sobre seu código para evitar objetos vazios, algo como "new Object()", se for o caso, substitua por "null".
=== Método 2: evitar falhas em objetos vazios ===
ObjectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false); (para jackson < 2.*)
ou
ObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
Normalmente, o Método 1 é melhor, pois não altera o comportamento padrão do Jackson ao corrigir o problema.
Com sorte, isso pode te ajudar um pouco.
Estou recebendo quase o mesmo erro ao realizar uma expansão com filtro CqnSelect
ERR Causado por: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Não foi encontrado um serializador para a classe com.sap.cds.impl.parser.token.RefSegmentImpl$FilteredSegmentImpl e não foram descobertas propriedades para criar BeanSerializer (para evitar a exceção, desative SerializationFeature.FAIL_ON_EMPTY_BEANS) (através da cadeia de referência: java.util.Collections$SingletonList[0])
para este tipo de expansão
Select.from(ASSORTMENT) .columns( Assortment_::_all, a -> a.toCompBP() .filter(bp -> bp.anyMatch(ofBusinessPartnerFinal)) .expand(AssortmentBusinessPartner_::_all), a -> a.toCompProduct() .filter(p -> p.anyMatch(ofProductFinal)) .expand(AssortmentProduct_::_all) ) .where(fullPredicate);
Tentei com um objectMapper Bean personalizado com disable(SerializationFeature.FAIL_ON_EMPTY_BEANS) e o erro persiste
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute