【问题标题】:Issue in deploying restlet based application on tomcat在 tomcat 上部署基于 restlet 的应用程序的问题
【发布时间】:2015-05-24 17:25:37
【问题描述】:

我在 tomcat 网络服务器上部署 restlet 应用程序时遇到问题。

我可以直接从 Eclipse 运行应用程序,但是当我在 tomcat 上部署时,我会遇到以下问题。

    May 10, 2015 10:04:32 AM org.apache.catalina.loader.WebappClassLoader loadClass
    INFO: Illegal access: this web application instance has been stopped already.  Could not load org.simpleframework.transport.connect.Connection.
  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
    java.lang.IllegalStateException
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1566)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
        at java.lang.Class.getConstructor0(Unknown Source)
        at java.lang.Class.getConstructor(Unknown Source)
        at org.restlet.engine.Engine.registerHelper(Engine.java:781)
        at org.restlet.engine.Engine.registerHelpers(Engine.java:813)
        at org.restlet.engine.Engine.registerHelpers(Engine.java:853)
        at org.restlet.engine.Engine.discoverConnectors(Engine.java:544)
        at org.restlet.engine.Engine.<init>(Engine.java:379)
        at org.restlet.engine.Engine.register(Engine.java:301)
        at org.restlet.engine.Engine.register(Engine.java:290)
        at org.restlet.engine.Engine.getInstance(Engine.java:199)
        at org.restlet.data.Method.<init>(Method.java:337)
        at org.restlet.data.Method.<init>(Method.java:396)
        at org.restlet.data.Method.<init>(Method.java:361)
        at org.restlet.data.Method.<clinit>(Method.java:48)
        at org.restlet.resource.ClientResource.<init>(ClientResource.java:396)



            May 10, 2015 10:04:32 AM org.apache.catalina.loader.WebappClassLoader loadClass
        INFO: Illegal access: this web application instance has been stopped already.  Could not load org.simpleframework.transport.connect.Connection.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
        java.lang.IllegalStateException
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1566)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
            at java.lang.Class.getDeclaredConstructors0(Native Method)
            at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
            at java.lang.Class.getConstructor0(Unknown Source)
            at java.lang.Class.getConstructor(Unknown Source)
            at org.restlet.engine.Engine.registerHelper(Engine.java:781)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:813)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:853)
            at org.restlet.engine.Engine.discoverConnectors(Engine.java:544)
            at org.restlet.engine.Engine.<init>(Engine.java:379)
            at org.restlet.engine.Engine.register(Engine.java:301)
            at org.restlet.engine.Engine.register(Engine.java:290)
            at org.restlet.engine.Engine.getInstance(Engine.java:199)
            at org.restlet.data.Method.<init>(Method.java:337)
            at org.restlet.data.Method.<init>(Method.java:396)
            at org.restlet.data.Method.<init>(Method.java:361)
            at org.restlet.data.Method.<clinit>(Method.java:48)
            at org.restlet.resource.ClientResource.<init>(ClientResource.java:396)



        INFO: Illegal access: this web application instance has been stopped already.  Could not load java.net.InetSocketAddress.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
        java.lang.IllegalStateException
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1566)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
            at java.lang.Class.getDeclaredConstructors0(Native Method)
            at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
            at java.lang.Class.getConstructor0(Unknown Source)
            at java.lang.Class.getConstructor(Unknown Source)
            at org.restlet.engine.Engine.registerHelper(Engine.java:781)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:813)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:853)
            at org.restlet.engine.Engine.discoverConnectors(Engine.java:544)
            at org.restlet.engine.Engine.<init>(Engine.java:379)
            at org.restlet.engine.Engine.register(Engine.java:301)
            at org.restlet.engine.Engine.register(Engine.java:290)
            at org.restlet.engine.Engine.getInstance(Engine.java:199)
            at org.restlet.data.Method.<init>(Method.java:337)
            at org.restlet.data.Method.<init>(Method.java:396)
            at org.restlet.data.Method.<init>(Method.java:361)
            at org.restlet.data.Method.<clinit>(Method.java:48)
            at org.restlet.resource.ClientResource.<init>(ClientResource.java:396)


        INFO: Illegal access: this web application instance has been stopped already.  Could not load org.restlet.data.Protocol.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
        java.lang.IllegalStateException
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1566)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
            at org.restlet.ext.simple.HttpServerHelper.<init>(HttpServerHelper.java:57)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at org.restlet.engine.Engine.registerHelper(Engine.java:781)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:813)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:853)
            at org.restlet.engine.Engine.discoverConnectors(Engine.java:544)
            at org.restlet.engine.Engine.<init>(Engine.java:379)
            at org.restlet.engine.Engine.register(Engine.java:301)
            at org.restlet.engine.Engine.register(Engine.java:290)
            at org.restlet.engine.Engine.getInstance(Engine.java:199)
            at org.restlet.data.Method.<init>(Method.java:337)
            at org.restlet.data.Method.<init>(Method.java:396)
            at org.restlet.data.Method.<init>(Method.java:361)
            at org.restlet.data.Method.<clinit>(Method.java:48)
            at org.restlet.resource.ClientResource.<init>(ClientResource.java:396)


        INFO: Illegal access: this web application instance has been stopped already.  Could not load java.util.logging.Logger.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
        java.lang.IllegalStateException
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1566)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
            at org.restlet.engine.log.LoggerFacade.getLogger(LoggerFacade.java:117)
            at org.restlet.engine.Engine.getLogger(Engine.java:255)
            at org.restlet.Context.getCurrentLogger(Context.java:81)
            at org.restlet.engine.Engine.registerHelper(Engine.java:785)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:813)
            at org.restlet.engine.Engine.registerHelpers(Engine.java:853)
            at org.restlet.engine.Engine.discoverConnectors(Engine.java:544)
            at org.restlet.engine.Engine.<init>(Engine.java:379)
            at org.restlet.engine.Engine.register(Engine.java:301)
            at org.restlet.engine.Engine.register(Engine.java:290)
            at org.restlet.engine.Engine.getInstance(Engine.java:199)
            at org.restlet.data.Method.<init>(Method.java:337)
            at org.restlet.data.Method.<init>(Method.java:396)
            at org.restlet.data.Method.<init>(Method.java:361)
            at org.restlet.data.Method.<clinit>(Method.java:48)
            at org.restlet.resource.ClientResource.<init>(ClientResource.java:396)

我检查了一下,simple.jar 是部署战争的一部分。

有人可以建议这种非法访问是什么以及如何解决它。

谢谢。

【问题讨论】:

    标签: tomcat deployment restlet


    【解决方案1】:

    我猜你混合了 Restlet 的独立和嵌入式方法:

    • 使用独立方法,您需要像 Simple framework 或 Jetty 这样的服务器连接器,而 Restlet 负责管理它们(启动、停止)
    • 使用嵌入式方法,Restlet 不再需要对此进行管理。您启动 servlet 引擎,请求将通过其适配器 servlet 委托给 Restlet。

    您是在 Eclipse 中尝试使用独立方法还是嵌入式方法(例如使用 WTP)?

    这是一个允许您创建嵌入式项目的 Maven 文件:

    <?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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.restlet</groupId>
        <artifactId>restlet-war</artifactId>
        <name>${project.artifactId}</name>
        <packaging>war</packaging>
        <version>1.0.0-snapshot</version>
    
        <properties>
            <java-version>1.7</java-version>
            <restlet-version>2.3.1</restlet-version>
            <wtp-version>2.0</wtp-version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.restlet.jee</groupId>
                <artifactId>org.restlet</artifactId>
                <version>${restlet-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.restlet.jee</groupId>
                <artifactId>org.restlet.ext.servlet</artifactId>
                <version>${restlet-version}</version>
            </dependency>
        </dependencies>
    
        <repositories>
            <repository>
                <id>maven-restlet</id>
                <name>Public online Restlet repository</name>
                <url>http://maven.restlet.com</url>
            </repository>
        </repositories>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>${java-version}</source>
                        <target>${java-version}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>install</id>
                            <phase>install</phase>
                            <goals>
                                <goal>sources</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <configuration>
                        <wtpapplicationxml>true</wtpapplicationxml>
                        <wtpversion>${wtp-version}</wtpversion>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    可以使用命令mvn eclipse:eclipse 为Eclipse 初始化项目。

    你可以在这个地址找到一个完整的简单项目:https://github.com/templth/restlet-stackoverflow/tree/master/restlet/test-restlet-servlet

    希望对你有帮助 蒂埃里

    【讨论】:

    • 您好 Thierry,我只使用 Restlet 作为 ClientResource 部分来调用外部服务器,并使用像 jackson 这样的表示将响应转换回 java 对象。我仍然不确定问题是什么。我认为您的建议是使用restlet 设置基于Rest 的服务器。
    • 嗨,卡兰。好的,我现在对用例看得更清楚了。您不应该在类路径中有简单框架的 jar 和相应的 Restlet 扩展,因为它被用作服务器连接器(并且您只能使用客户端连接器)......也许这就是您的问题的原因!希望对你有帮助
    • 我在我的 pom 文件中使用了以下四个...org.restlet (jse) , org.restlet.ext.simple, org.restlet.ext.servlet, org.restlet (gwt)您建议的哪一个应该足以供我的客户端使用。
    • 我建议不要将org.restlet.ext.simpleorg.restlet.ext.servlet 用于客户端,如果您使用Java(不是GWT),请使用org.restlet.ext.httpclient 等HTTP 客户端连接器。事实上,Restlet 的内部客户端连接器不是很稳定。对于 GWT,无需添加任何内容。希望清楚...
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 2015-04-15
    • 2023-01-30
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多