2015-01-13 18 views
2

Jersey에서 TomEE 서버로 간단한 RESTful 웹 서비스를 실행하는 데 문제가 있습니다. (이것은 내가 따르는 튜토리얼이다 :, 의존성을 위해 Maven을, TomEE JAX-RS를 내 서버로 사용하고있다.) 서블릿 클래스 내 web.xml 파일에서 파생Jersey를 TomEE에서 RESTful 웹 서비스로 사용

org.apache.openejb.OpenEJBException: Unable to load servlet class: org.glassfish.jersey.servlet.ServletContainer: org.glassfish.jersey.servlet.ServletContainer 
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:2113) 
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1843) 
at org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:360) 
at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:401) 
at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:962) 
at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1214) 
at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1087) 
at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:130) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5378) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

: 나는 서버를 실행하면, 나는 다음과 같은 오류 얻을

<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
<display-name>RestTest</display-name> 
    <servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <!-- Register resources and providers under com.vogella.jersey.first package. --> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.vogella.jersey.first</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

을 그리고이 프로젝트의 메이븐의 pom.xml 내 종속이다 파일 : 나는 HAVN 경우

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet</artifactId> 
    <version>2.14</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>2.14</version> 
    <scope>provided</scope> 
</dependency> 

이 (그리고 그 꼭대기에, 나는 지난 몇 년 동안 마이크로 소프트 서버 기술을 사용하고있다)를 TomEE JAX-RS 서버를 사용하여 내 처음이다, 그래서 의견을주십시오 충분한 정보를 제공하지 않았다. 솔루션에 대한 작업을 할 수 있습니다.

답변

5

저지 종속성에 provided 범위를 사용하면 안됩니다.

provided은 종속성이 런타임 환경 (즉, TomEE)에 의해 제공되며 웹 응용 프로그램에 포함되어서는 안됨을 나타냅니다. 그러나 TomEE의 경우는 그렇지 않습니다.

TomEE 웹 프로필에는 JAX-RS가 전혀 포함되어 있지 않습니다. TomEE Plus에는 JAX-RS 용 CXF가 포함되어 있지만 Jersey에는 포함되지 않습니다.

어쨌든 Jersey 2.x는 Java EE 7 용 JAX-RS 2.0을 구현하지만 TomEE는 Java EE 6이므로 사용 사례가 즉시 적용되지 않을 것입니다.

+0

고마워요. 그것은 실제로 많은 의미가 있습니다. 나는 "제공된"것을 제거했다. 그러나 이제는 새로운 오류가 발생합니다 : java.lang.NoSuchMethodError : "javax.ws.rs.core.Application.getProperties() Ljava/util/Map ;. 나에게 이것은 JAX-RS 1.X TomEE JAX-RS가 2.x 대신 해당 버전을 사용하고있을 수 있습니까? 표준 TomEE 웹 프로필을 사용하고 클래스 패스에 저어 진을 포함시켜 작동시킬 수 있습니까? – MichaelCleverly

+0

어떤 TomEE 에디션과 버전을 사용하고 있습니까? JAX-RS 2.0은 Java EE 7이며, TomEE는 Java EE 6입니다. 따라서 어떤 경우 에든 귀하의 유스 케이스가 작동하지 않을 것입니다. –

+0

그게 문제입니다. 그 마지막 코멘트를 귀하의 답변에 추가 하시겠습니까? 그렇다면 그것을 받아 들일 것입니다. – MichaelCleverly