Ошибки при вызове картографа Монго-Джексона из метода RESTEasy

Был на этом в течение нескольких дней. У меня есть Java-сервлет, созданный с помощью Maven, который будет развернут на Jetty (более старая версия). Это веб-сервис RESTful на Jetty, созданный с помощью RESTEasy и Jackson, и Jackson Mongo Mapper для подключения меня к MongoDB.

Я могу нормально запустить приложение из maven/jetty (используя mvn jetty:run), и оно возвращает JSON, как и ожидалось, для запросов, которые не используют бит Jackson Mongo Mapper/Jackson. Однако когда я отправляю запрос, который запускает Джексона и картограф, я сначала получаю эту ошибку:

java.lang.NoClassDefFoundError: org/codehaus/jackson/map/deser/std/StdDeserializer

Когда я отправляю второй раз (и все последующие запросы), я получаю эту ошибку:

java.lang.NoClassDefFoundError: Could not initialize class net.vz.mongodb.jackson.JacksonDBCollection

Насколько я могу судить, все зависимости настроены правильно, хотя в конце вопроса я включу мои web.xml и pom.xml. Если это не зависимость, мне пришло в голову, что может быть какая-то проблема с передачей моего компонента (BillItem.class). Я относительно новичок в Java, так что это легко может быть глупой ошибкой, а не чем-то связанным с конкретным стеком, который я пытаюсь реализовать... есть идеи о том, что происходит?

Вот мой web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

   <welcome-file-list>
    <welcome-file>index.html</welcome-file>
   </welcome-file-list>

   <!--  
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>     
    </context-param> -->

   <context-param>
        <param-name>resteasy.resources</param-name>
        <param-value>com.myproject.BillServer</param-value>
   </context-param>

   <context-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.myproject.Service</param-value>
   </context-param>

    <context-param>
      <param-name>resteasy.resource.method-interceptors</param-name>
      <param-value>org.jboss.resteasy.core.ResourceMethodSecurityInterceptor</param-value>
   </context-param>

   <listener>
      <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
   </listener>

    <servlet>     
      <servlet-name>Resteasy</servlet-name>
      <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
      <servlet-name>Resteasy</servlet-name>
      <url-pattern>/*</url-pattern>
   </servlet-mapping>

</web-app>

Вот мой pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myproject</groupId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MyProject</name>
    <artifactId>MyProject</artifactId>
    <packaging>jar</packaging>

    <properties>
        <java.version>1.6</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <!-- Servlet API -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>

        <!-- Jetty -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-webapp</artifactId>
            <version>8.1.7.v20120910</version>
        </dependency>
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jsp-2.1-glassfish</artifactId>
            <version>2.1.v20100127</version>
        </dependency>   

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>2.3.4.Final</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>2.3.4.Final</version>    
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>jaxrs-api</artifactId>
            <version>2.3.4.Final</version>
          </dependency>
          <dependency>
              <groupId>org.codehaus.jackson</groupId>
              <artifactId>jackson-core-asl</artifactId>
              <version>1.9.9</version>
          </dependency>
          <dependency>
              <groupId>net.vz.mongodb.jackson</groupId>
              <artifactId>mongo-jackson-mapper</artifactId>
              <version>1.4.2</version>
          </dependency>       
          <dependency>
              <groupId>org.mongodb</groupId>
              <artifactId>mongo-java-driver</artifactId>
              <version>2.9.1</version>
          </dependency>
    </dependencies>

    <build>
        <plugins>

            <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <!-- The maven app assembler plugin will generate a script that sets up the classpath and runs your project -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.1.1</version>
                <configuration>
                    <assembleDirectory>target</assembleDirectory> 
                    <programs>
                        <program>
                            <mainClass>com.MyProject.Main</mainClass>
                            <name>webapp</name>
                        </program>
                    </programs>
                    <useAllProjectDependencies>true</useAllProjectDependencies>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>                
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

И последняя строка следующего сообщения - это вызов, вызывающий ошибку:

        Mongo mongo = new Mongo(MONGO_PATH, MONGO_PORT);
        DB db = mongo.getDB(MONGO_APPDB);
        DBCollection collection = db.getCollection(MONGO_BILL_COL);
        JacksonDBCollection<BillItem, String> coll = JacksonDBCollection.wrap(collection, BillItem.class, String.class);

1 ответ

Решение

Это был какой-то серьезный идиотизм. Я случайно удалил 3 зависимости Джексона, когда чистил свой файл pom.

Другие вопросы по тегам