Skip to content
This repository was archived by the owner on Apr 4, 2025. It is now read-only.

ConversionFailedException while using MongoDB session #184

Open
akashgupta2703 opened this issue Mar 2, 2021 · 2 comments
Open

ConversionFailedException while using MongoDB session #184

akashgupta2703 opened this issue Mar 2, 2021 · 2 comments

Comments

@akashgupta2703
Copy link

We are noticing a lot of ConversionFailedException for MongoDB Sessions in our logs. Following is the sample logs for reference. All the logs are similar with different UUID.

Message:
Failed to convert from type [java.lang.String] to type [org.bson.types.ObjectId] for value '2359e11c-3479-49b7-b531-cd84123ad006'; nested exception is java.lang.IllegalArgumentException: invalid hexadecimal representation of an ObjectId: [2359e11c-3479-49b7-b531-cd84123ad006]
Stacktrace:
org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:47)
org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:191)
org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174)
org.springframework.data.mongodb.core.convert.MongoConverter.convertId(MongoConverter.java:146)
org.springframework.data.mongodb.core.convert.QueryMapper.convertId(QueryMapper.java:629)
org.springframework.data.mongodb.core.convert.QueryMapper.getMappedValue(QueryMapper.java:377)
org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObjectForField(QueryMapper.java:240)
org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:143)
org.springframework.data.mongodb.core.QueryOperations$QueryContext.getMappedQuery(QueryOperations.java:255)
org.springframework.data.mongodb.core.QueryOperations$UpdateContext.getMappedQuery(QueryOperations.java:646)
org.springframework.data.mongodb.core.MongoTemplate.lambda$
org.springframework.data.mongodb.core.MongoTemplate$$Lambda$.doInCollection
org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:566)
org.springframework.data.mongodb.core.MongoTemplate.saveDocument(MongoTemplate.java:1485)
org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:1421)
org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:1363)
org.springframework.session.data.mongo.MongoIndexedSessionRepository.save(MongoIndexedSessionRepository.java:89)
org.springframework.session.data.mongo.MongoIndexedSessionRepository.save(MongoIndexedSessionRepository.java:50)
org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225)
org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$
org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryResponseWrapper.onResponseCommitted(SessionRepositoryFilter.java:179)
org.springframework.session.web.http.OnCommittedResponseWrapper.doOnResponseCommitted(OnCommittedResponseWrapper.java:227)
org.springframework.session.web.http.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:129)
javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:43)
javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
org.springframework.security.web.util.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:135)
javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
org.springframework.security.web.util.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:135)
javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:43)
javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)
org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:43)
jdk.internal.reflect.GeneratedMethodAccessor.invoke
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke
java.lang.reflect.Method.invoke
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)

We are using spring-session-data-mongodb (2.3.0 RELEASE) with spring-boot-starter-data-mongodb (2.3.2 RELEASE). Spring boot 2.3.2 RELEASE with Hoxton.SR5 cloud version.

JVM version (e.g. java -version)

Java 11

@gregturn
Copy link
Contributor

Indeed, that IS an invalid hexadecimal value to try to convert into an ObjectId. The question is...where is it coming from?

A) You may wish to bump things up to Spring Boot 2.3.9. This should put you on Spring Data Neumann-SR6. Not really sure this is the problem, but it will ensure we aren't dealing with something that has already been patched.

B) Can you include a little bit of the configuration you are using? For example, are you using Jackson or JDK for serialization? I also doubt this is the issue at hand, but it can help cut the time in half about which converter I need to investigate.

@akashgupta2703
Copy link
Author

@gregturn I am using JdkMongoSessionConverter. Though it doesn't look to be needed as this is default, I have created following bean -

@Bean
public JdkMongoSessionConverter jdkMongoSessionConverter() {
	return new JdkMongoSessionConverter(serverProperties.getServlet().getSession().getTimeout());
}

Apart from above, there is no other explicit configuration.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants