2017-03-23 1 views
0

들어오는 요청을 가로 채기 위해 다음 코드를 작성했습니다. 제가 아파치 CXF 3.1.10 내 server.xml의 자유 프로필 (16)NoClassDefFoundError : Cpacke CXF를 사용하는 LibertyProfile 16의 org/apache/cxf/phase/PhaseInterceptorChain 3.1.10

을 사용하고

@Provider 
public class RequestInterceptor implements ReaderInterceptor { 
    @Override 
    public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException { 
     Message message = PhaseInterceptorChain.getCurrentMessage(); 
     OperationResourceInfo cri = message.getExchange().get(OperationResourceInfo.class); 
     return null; 
    } 
} 

는 다음과 같은 기능을 사용할 수 있습니다 :

<featureManager> 
    <feature>webProfile-7.0</feature> 
    <feature>localConnector-1.0</feature> 
</featureManager> 

다음 내 pom.xml 파일입니다 :

<repositories> 
     <repository> 
      <id>prime-repo</id> 
      <name>PrimeFaces Maven Repository</name> 
      <url>http://repository.primefaces.org</url> 
      <layout>default</layout> 
     </repository> 
    </repositories> 

    <dependencies> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>6.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>all-themes</artifactId> 
      <version>1.0.10</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>4.5.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.5</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.12</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.6</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> 
     <dependency> 
      <groupId>com.google.guava</groupId> 
      <artifactId>guava</artifactId> 
      <version>20.0</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> 
     <dependency> 
      <groupId>commons-beanutils</groupId> 
      <artifactId>commons-beanutils</artifactId> 
      <version>1.9.3</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/joda-time/joda-time --> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>2.9.6</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
      <version>3.1.10</version> 
     </dependency> 


    </dependencies> 

응용 프로그램을 실행할 때 아래 오류가 발생합니다.

[INFO ] Setting the server's publish address to be /rest/ 
[INFO ] SRVE0242I: [TestApp] [/TestApp] [javax.ws.rs.core.Application]: Initialization successful. 
[ERROR ] SRVE0777E: Exception thrown by application class 'framework.rest.interceptors.RequestInterceptor.aroundReadFrom:32' 
java.lang.NoClassDefFoundError: org/apache/cxf/phase/PhaseInterceptorChain 
    at framework.rest.interceptors.RequestInterceptor.aroundReadFrom(RequestInterceptor.java:32) 
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1356) 
    at [internal classes] 

인터셉터 코드없이 응용 프로그램을 실행하고 있으면 정상적으로 실행됩니다.

+0

이것은 Liberty의 CXF impl과 앱에 번들로 제공되는 클래스로드 충돌로 인해 발생합니다. 'webProfile-7.0' 기능에는'jaxrs-2.0' 기능 (및 API)이 포함되어 있으므로 CXF 구현을 응용 프로그램에 패키지로 만들 수 없습니까? –

+0

그것은 아직도 나에게 오류를주고있다 : 당신은 Liberty의 CXF impl 버전 번호를 알고 있습니까? –

+0

정확한 자유 버전에 따라 다르지만'$ {wlp.install.dir}/lib/com.ibm.ws.org.apache.cxf-rt-core.XXjar'에서 어떤 버전의 자유가 있는지 확인할 수 있습니다 –

답변

1

응용 프로그램에 cxf-rt-frountend-jaxrs-x.x.x.jar 패키지가 있습니까? PhaseInterceptorChain.classcxf-core-x.x.x.jar입니다. 아마도 .war의 lib 디렉토리에 모든 cxf jar를 포함시켜보십시오.

+0

여전히 같은 오류가 발생합니다. –

관련 문제