【问题标题】:Apache Camel : Restlet request errorApache Camel:Restlet 请求错误
【发布时间】:2014-04-25 13:50:13
【问题描述】:

所以我目前正在使用 Camel,现在我想尝试使用 Camel 和 restlet 创建一个 webapp,所以我尝试了这个教程

https://camel.apache.org/restlet.html

但现在并没有真正起作用。我的 Tomcat 日志中出现此错误。

    INFO: La servlet RestletServlet est marquÈ comme indisponible
25 avr. 2014 14:21:01 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Exception lors de l'allocation pour la servlet RestletServlet
java.lang.ClassNotFoundException: org.springframework.core.env.EnvironmentCapable
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2854)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2854)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getDeclaredMethods(Unknown Source)
    at org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:226)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1153)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)

这是我的 pom.xml

    <modelVersion>4.0.0</modelVersion>
<groupId>restlet</groupId>
<artifactId>restlet</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>restlet</name>

<properties>
    <customer>control</customer>
    <camelversion>2.11.1</camelversion>
    <restlet-version>2.0.15</restlet-version>
    <spring-version>3.2.3.RELEASE</spring-version>
    <maven-jetty-plugin-version>6.1.25</maven-jetty-plugin-version>
</properties>

<dependencies>
    <!-- camel -->
    <dependency> 
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>${camelversion}</version>
    </dependency>
     <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>${camelversion}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-exec</artifactId>
        <version>${camelversion}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-servlet</artifactId>
        <version>${camelversion}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-quartz</artifactId>
        <version>${camelversion}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-test</artifactId>
        <version>${camelversion}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-mail</artifactId>
        <version>${camelversion}</version>
    </dependency>
    <dependency>
        <groupId>org.restlet.jee</groupId>
        <artifactId>org.restlet.ext.spring</artifactId>
        <version>${restlet-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jdbc</artifactId>
        <version>${camelversion}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring-version}</version>
    </dependency>
</dependencies>

<build>
  <directory>build</directory>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>${maven-jetty-plugin-version}</version>
            <configuration>
                <webApp>${basedir}/target/camel-restlet.war</webApp>
                <contextPath>/</contextPath>
            </configuration>
            </plugin>    
    </plugins>
</build>
<repositories>
    <repository>  
        <id>maven-restlet</id>  
        <name>Public online Restlet repository</name>  
        <url>http://maven.restlet.org</url>  
    </repository>
</repositories>

这是我的 web.xml

<!-- Restlet Servlet -->
<servlet>
    <servlet-name>RestletServlet</servlet-name>
    <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.component</param-name>
        <param-value>RestletComponent</param-value>
    </init-param>

</servlet>

<servlet-mapping>
    <servlet-name>RestletServlet</servlet-name>
    <url-pattern>/rs/*</url-pattern>
</servlet-mapping>

这是我的上下文

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <route id="RS_RestletDemo">
        <from uri="restlet:/demo/{id}" />
        <transform>
<simple>Request type : ${header.CamelHttpMethod} and ID :${header.id}</simple>
        </transform>
    </route>
</camelContext>

<bean id="RestletComponent" class="org.restlet.Component" />

<bean id="RestletComponentService"      class="org.apache.camel.component.restlet.RestletComponent">
    <constructor-arg index="0">
        <ref bean="RestletComponent" />
    </constructor-arg>
</bean>
 </beans>

我确定我错过了什么......

谢谢你!

【问题讨论】:

  • 检查你的 .war 文件,看看你在 WEB-INF/lib 下是否有多个版本的 Spring。如果这样做,请确保只有一个版本的 .jar。

标签: spring maven servlets apache-camel restlet


【解决方案1】:

Camel 2.11.1 使用 Spring 3.1.4.RELEASE,而你的 pom spring 版本是 3.2.3.RELEASE,所以你需要将 pom spring 版本更新到 3.1.4.RELEASE,或者使用排除来修复 spring版本错过匹配。

顺便说一句,您可以使用 mvn dependency:tree 找出 spring 版本未匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2014-08-14
    • 2018-02-11
    • 2011-04-02
    • 1970-01-01
    相关资源
    最近更新 更多