2017-11-18 7 views
0

が見つかりません。 目標は、応答が送信されるときにいくつかの追加リソースをプッシュすることです。 webappは、どのリソースをプッシュする必要があるかを定義します。埋め込まれた桟橋でスタンドアロンpushfilter:jetty.server.requestは、私はそれは桟橋で使われている場合には、当社のWebアプリケーション(BaseX)を拡張するために、スタンドアロン・フィルタに取り組んでいます

は、すべてがうまくいきます。桟橋にBaxeXのALSサーブレットを展開し、jettxで始まるときには:-フォーク実行すると、私はこれを取得:

<?xml version="1.0"?> 
<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.basex</groupId> 
    <artifactId>basex-jetty-push-filter</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>basex-jetty-push-filter</name> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <jetty.version>9.4.6.v20170531</jetty.version> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-annotations</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlets</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-server</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-alpn-server</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty.http2</groupId> 
     <artifactId>http2-common</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty.http2</groupId> 
     <artifactId>http2-server</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-webapp</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    </dependencies> 

    <build> 
    <pluginManagement> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.7.0</version> 
      <configuration> 
      <!-- http://maven.apache.org/plugins/maven-compiler-plugin/ --> 
      <source>1.8</source> 
      <target>1.8</target> 
      </configuration> 
     </plugin> 
     </plugins> 
    </pluginManagement> 
    </build> 
    </project> 
    ... 

これは、フィルタののpom.xmlである

java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Request 
at org.basex.http2.BaseXJettyPushFilter.doFilter(BaseXJettyPushFilter.java:48) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) 
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) 

...そして私はここの依存関係としてそれをロードしています:私はW内からサーバー・クラスにアクセスすることはできませんなぜ

<parent> 
    <groupId>org.basex</groupId> 
    <artifactId>basex-parent</artifactId> 
    <version>9.0-SNAPSHOT</version> 
    <relativePath>..</relativePath> 
    </parent> 

    <name>BaseX API</name> 

    <dependencies> 
    <dependency> 
     <groupId>org.basex</groupId> 
     <artifactId>basex</artifactId> 
     <version>${project.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.basex</groupId> 
     <artifactId>basex-jetty-push-filter</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>net.xqj</groupId> 
     <artifactId>basex-xqj</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.xmldb</groupId> 
     <artifactId>xmldb-api</artifactId> 
    </dependency> 
    ... 

それは明らかですebapp! Webアプリケーションは周囲のサーブレットコンテナとの依存関係を持っていないはずです。

私はフィルタをスタンドアロンで実装していますが、何とかserver.Requestクラスにアクセスできません。 JettyのPushCacheFilterもjetty.requestクラスを使用します。

は、ここにフィルタです: https://github.com/BodoWissemann/basex-jetty-push-filter

どのように私はこの問題を解決することができますか?私はこだわっている:(

Thxをたくさん

ボーデ

答えて

0

Simone Bordet氏は、私の質問答え:!

「あなたはサーブレットコンテナクラスがに隠されなければならないそれが正しいことを持っている@BodoWissemannをWebアプリケーションをJettyにデプロイするときにNoClassDefFoundErrorを取得し、埋め込みを実行していないときにNoClassDefFoundErrorを取得する理由です。

JettyのPushCacheFilterは、 Webアプリケーションクラスローダーのデフォルトシステムクラスルールがあります。https://github.com/eclipse/jetty.project/blob/jetty-9.4.x/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java#L128を参照してください。

BaseXJettyPushFilterについても同じことを行う必要があります。サーバークラスパスに配置し、Webアプリケーションクラスローダーのシステムクラスルールを定義します。 私は、カスタム桟橋モジュールを作成し、どのようにこのドキュメントおよびこの例で、次のサーバークラスのルールを定義するにはについてのドキュメントを読むことをお勧めします。

サーブレット4では、使用するAPI(PushBuilder)がサーブレットAPIで標準化されているため、このようなことは必要ありません。

関連する問題