title: Spring Boot: MongoDb: Exception: NoSuchMethodError: com.mongodb.client.MongoCollection.insertOne(java.lang.Object)
body: <p><strong>Prologue:</strong></p>
  <p>I have researched this topic from the stackoverflow answers. All answers were pointed towards the dependency conflict, which in my case doesn't seem to be true. (<em>if i am not missing anything</em>)</p>
  <p><strong>Problem:</strong></p>
  <p>I am getting this exception during <em>runtime</em> when i use the <code>MongoTemplate</code> implementation <code>save</code> or <code>insert</code></p>
  <pre><code>mongoTemplate.save(saveObject, COLLECTION)
  mongoTemplate.insert(insertObject, COLLECTION)
  </code></pre>
  <p>There are no build issues or compilation issues.
  The <code>save</code> or <code>insert</code> methods internally call <code>MongoCollection&lt;TDocument&gt;.insertOne(TDocument doc)</code> for my use case. If I implement this like below, it works fine :</p>
  <pre><code>MongoCollection&lt;Document&gt; collection = mongoTemplate.getCollection(COLLECTION);
  collection.insertOne(docToSave);
  </code></pre>
  <p><strong>Debug:</strong></p>
  <p>Also, If i put a debug point at <code>org.springframework.data.mongodb.core.MongoTemplate</code></p>
  <pre><code>collectionToUse.insertOne(dbDoc);//exception is thrown from here
  </code></pre>
  <p>and execute it manually from the debugger, it works!</p>
  <p>So there is no way that the Implementation is missing and judging from the <code>gradle dependencies</code> map, there seems to be no conflict as well.</p>
  <p>here is my dependency structure:</p>
  <pre><code>+--- org.springframework.integration:spring-integration-mongodb -&gt; 5.4.5
  |    +--- org.springframework.integration:spring-integration-core:5.4.5
  |    |    +--- org.springframework:spring-aop:5.3.5 (*)
  |    |    +--- org.springframework:spring-context:5.3.5 (*)
  |    |    +--- org.springframework:spring-messaging:5.3.5
  |    |    |    +--- org.springframework:spring-beans:5.3.5 (*)
  |    |    |    \--- org.springframework:spring-core:5.3.5 (*)
  |    |    +--- org.springframework:spring-tx:5.3.5
  |    |    |    +--- org.springframework:spring-beans:5.3.5 (*)
  |    |    |    \--- org.springframework:spring-core:5.3.5 (*)
  |    |    +--- org.springframework.retry:spring-retry:1.3.1
  |    |    \--- io.projectreactor:reactor-core:3.4.4
  |    |         \--- org.reactivestreams:reactive-streams:1.0.3
  |    \--- org.springframework.data:spring-data-mongodb:3.1.6
  |         \--- org.springframework.data:spring-data-commons:2.4.6
  +--- org.mongodb:mongo-java-driver:3.12.9
  </code></pre>
  <p>gradle file:</p>
  <pre><code>//project sensitive configurations omiited
  ..
  //
  
  
  plugins {
      id 'org.springframework.boot' version '2.4.4'
      id 'io.spring.dependency-management' version '1.0.11.RELEASE'
      id 'war'
  }
  
  //project sensitive configurations omiited
  ..
  //
  
  dependencies {
      implementation('org.springframework.boot:spring-boot-starter-web') {
          exclude group: 'org.mongodb', module: 'mongodb-driver-core'
          exclude group: 'org.slf4j', module: 'slf4j-simple'
          exclude group: 'org.slf4j', module: 'slf4j-api'
          exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
      }
      implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
      implementation group: 'javax.servlet', name: 'javax.servlet-api'
      providedRuntime group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.44'
      providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') {
          exclude group: 'org.mongodb', module: 'mongodb-driver-core'
          exclude group: 'org.slf4j', module: 'slf4j-simple'
          exclude group: 'org.slf4j', module: 'slf4j-api'
      }
      providedRuntime group: 'javax.servlet.jsp', name: 'javax.servlet.jsp-api', version: '2.3.3'
      implementation('org.springframework.integration:spring-integration-mongodb') {
          exclude group: 'org.mongodb', module: 'mongodb-driver-core'
          exclude group: 'org.slf4j', module: 'slf4j-simple'
          exclude group: 'org.slf4j', module: 'slf4j-api'
      }
      implementation 'org.mongodb:mongo-java-driver:3.12.9'
      implementation 'org.apache.httpcomponents:httpclient:4.4'
      implementation('com.jayway.jsonpath:json-path:2.0.0') {
          exclude group: 'org.slf4j', module: 'slf4j-simple'
          exclude group: 'org.slf4j', module: 'slf4j-api'
      }
      implementation 'javax.mail:mail:1.4'
      implementation 'com.googlecode.json-simple:json-simple:1.1.1'
      implementation 'org.reflections:reflections:0.9.9-RC1'
      implementation 'commons-logging:commons-logging:1.2'
      implementation 'commons-fileupload:commons-fileupload:1.3.1'
      implementation 'commons-io:commons-io:2.4'
      implementation 'com.jayway.jsonpath:json-path-assert:0.8.1'
      implementation 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
      implementation 'org.json:json:20141113'
      implementation 'org.apache.poi:poi:3.15'
      implementation 'org.apache.xmlbeans:xmlbeans:3.0.2'
      implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'
      implementation 'org.apache.poi:poi-ooxml:3.15'
      implementation 'com.auth0:java-jwt:2.1.0'
      implementation 'net.sf.jxls:jxls-reader:1.0.6'
      implementation 'com.efsavage.jquery:jquery-maven:1.7.2'
      implementation('cglib:cglib:2.2.2') {
          exclude group: 'asm', module: 'asm'
      }
      implementation('org.springframework:spring-mock:2.0.8')
              {
                  exclude group: 'org.slf4j', module: 'slf4j-simple'
                  exclude group: 'org.slf4j', module: 'slf4j-api'
              }
      implementation 'xerces:xercesImpl:2.11.0'
      implementation 'com.google.guava:guava:18.0'
      implementation 'org.apache.commons:commons-lang3:3.4'
      implementation 'info.cukes:cucumber-picocontainer:1.2.2'
      implementation 'info.cukes:cucumber-junit:1.2.2'
      implementation 'info.cukes:cucumber-java:1.2.2'
      implementation 'javax:javaee-web-api:7.0'
  
      //project sensitive configurations omiited
      ..
      //
  }
  
  
  //project sensitive configurations omiited
  ..
  //
  </code></pre>
  <p>Exception:</p>
  <pre><code>2021-22-07 13:16:03 [http-nio-8081-exec-1] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] -
                  Servlet.service() for servlet [dispatcherServlet] in context with path [/MY_ROOT_PATH] threw exception [Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: 'com.mongodb.client.result.InsertOneResult com.mongodb.client.MongoCollection.insertOne(java.lang.Object)'] with root cause
  java.lang.NoSuchMethodError: 'com.mongodb.client.result.InsertOneResult com.mongodb.client.MongoCollection.insertOne(java.lang.Object)'
      at org.springframework.data.mongodb.core.MongoTemplate.lambda$saveDocument$18(MongoTemplate.java:1505)
      at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:561)
      at org.springframework.data.mongodb.core.MongoTemplate.saveDocument(MongoTemplate.java:1492)
      at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:1428)
      at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:1370)
      at com.company.package.dao.mongo.MyDAOImpl.appendAndSave(MyDAOImpl.java:78)
      at com.company.package.dao.mongo.MyDAOImpl.saveFile(MyDAOImpl.java:50)
  </code></pre>