2017-03-23 9 views
0

私は次のコードを書いて、着信要求を傍受しました。私は、Apache CXF 3.1.10と私のserver.xmlでのLibertyプロファイル16NoClassDefFoundError:LibertyProfileのorg/apache/cxf/phase/PhaseInterceptorChain Cpacke CXF 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インプリメンテーションとアプリケーションにバンドルされているクラスロードの競合が原因です。 '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

まだ同じエラーが発生しています。 –