2017-01-09 8 views
0

私はTomcatの7とのOpenJDK Javaの下に1.7Javaアプリケーションはどこにも行きません - 私はバージョニングの問題がありますか?

を私が実行しているJavaアプリケーションでは、次の、非常に簡単なコードを持っています
List<AnnotationNode> children = parent.getChildren(); 

LOGGER.debug("sorting ..."); 

children.sort(new Comparator<AnnotationNode>() { 
    @Override 
    public int compare(AnnotationNode o1, AnnotationNode o2) { 

     int result; 
     try { 
      Annotation a1 = o1.getAnnotation(); 
      Annotation a2 = o2.getAnnotation();    
      LOGGER.debug("compare .."); 
      result = a1.getStart() - a2.getStart(); 
     } catch(Exception e) { 
      LOGGER.debug("huh??", e); 
      result =0; 
     } 

     return result; 
    }   
}); 

それらLOGGERメッセージを許しなさいそれは私がダウンして追跡するための唯一の方法でした問題の起源私がGET要求を実行している間、プログラムは単に人の土地には入らず、要求は飲み込まれています。

Eclipseからアプリケーションをリモートでデバッグするために、Tomcatをデバッグモードで起動しました。結果は.sort()に達しますが、compare()の実装には決して達しません。したがって、私が受け取っている最後のデバッグメッセージはsorting ...であり、それだけです。

私は、Java 8は

openjdk version "1.8.0_111" 
OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2ubuntu0.16.04.2-b14) 
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode) 

がインストールされているが、親のpom.xmlは、Java 7のために設定されているから、これを展開しています機械:私は問題を抱えているよう

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <!-- etc. --> 
    </plugins> 
</build> 

はこれが見えますこの問題がどこで発生するのかわかりませんが、ここにJavaバージョンがあります。私のアプリケーションが間違ったコンパイラで構築されている可能性はありますか?

どうすればこの問題を解決できますか?


更新:

/var/log/tomcat7/catalina.outの最後のメッセージは言う:

SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container 
java.lang.NoSuchMethodError: java.util.List.sort(Ljava/util/Comparator;)V 
    at at.company.enrichment.processor.AnnotatedDocumentTree.addNode(AnnotatedDocumentTree.java:104) 
    at at.company.enrichment.processor.AnnotatedDocumentTree.initialize(AnnotatedDocumentTree.java:70) 
    at at.company.enrichment.processor.AnnotatedDocumentTree.<init>(AnnotatedDocumentTree.java:41) 
    at at.company.enrichment.processor.DocumentProcessor2.process(DocumentProcessor2.java:112) 

は、なぜ私はここにNoSuchMethodError例外を取得していますか?

+0

"...人は土地には行きません" - あなたはタイムアウトに遭っていますか?そのリストはどれくらいの大きさですか? – Fildor

+0

@Fildorリストはかなり小さいので、あまりにも長い時間がかかることは間違いありません。 – displayname

+0

比較器に '.getAnnotation()'を呼び出す前にLOGを入れてみましたか?ちょうどそれが "ぶら下がっている"というメソッドではなく、実際に比較文字コードが入力されていることを確認してください。 – Fildor

答えて

1

List#sort(Comparator)メソッドはJava 8で新しく追加されました。TomcatがJava 7で動作する場合、このメソッドは見つかりません。あなたができることは、Java 7のバージョンCollections#sort(Collection, Comparator)をJava 7とJava 8に使用することです。

一般に、実行する予定の同じJavaバージョンでコードをコンパイルすることをお勧めします。その場合、コンパイラは実行時ではなくエラーを返します。

+0

ありがとう、これは本当に問題でした! – displayname

0

tomcatにWebアプリケーションをデプロイするときに、使用しているライブラリ(ASMを使用していますか?)に依存していないと思われます。

もっと正確には、私はtomcatとあなたのクラスのインポートの完全なログを見る必要があります。

+0

それはどんなライブラリですか?これはちょうど私が呼んでいる 'List#sort'ですが、どこでTomcatのログを取得できますか? – displayname

+0

実際にあなたのsortメソッドでAnnotationNodeとAnnotationを使用しているので、クラスローダーがこれらのクラスのロードに失敗した場合、タイムアウトを説明することができます – mrtexaz

+0

tomcatログ:/ var/log/tomcat(Linuxを使用している場合)を試してください – mrtexaz

関連する問題