2016-05-03 13 views
0

myEclipse IDEを使用してWebSphere 8.5.5.5サーバーに2つの小さなJEE 6 Webアプリケーションをデプロイしました。どちらもそれぞれ1つの簡単なRESTエンドポイントを含んでいます。エンドポイントは一方のエンドポイントで動作していて、他方のエンドポイントでは動作していません。 WAS 8.5にバンドルされているJAX-RS固有のWink実装を使用しています。作業アプリのルックスのためmyEclipseを使用したJEE 6/WebSphere 8.5のリソースファイルNotFoundException

package com.somewhere.jee6.hello; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("test-services") 
public class HelloApplication extends Application { 

} 

package com.somewhere.jee6.hello.resource; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 

@Path("/hello") 
public class HelloResource { 

    @GET 
    public String check() { 
     return "Hello, it works"; 
    } 
} 

私のクラスパス:ここ

Exception:java.io.FileNotFoundException SourceId:com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters -IOE ProbeId:1044 
java.io.FileNotFoundException: SRVE0190E: File not found: /resources/tryme 
    at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor._processEDR(DefaultExtensionProcessor.java:949) 
    at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.processEDR(DefaultExtensionProcessor.java:930) 
    at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:484) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1114) 

が働いてエンドポイントを持っている最初のアプリの2つのクラスファイルです:ここで私は第二のアプリで受信していますエラーがありますこのように:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_6_CONTAINER"/> 
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> 
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> 
    <classpathentry kind="output" path="WebContent/WEB-INF/classes"/> 
</classpath> 

上記の "Hello、それが動作" を返す作業エンドポイントは次のとおりです。

01ここで

http://localhost:9081/hellosvc/test-services/hello

動作しないエンドポイントを有する第2のアプリの2つのクラスファイルです:

package com.somewhere.mdr.rest; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

@ApplicationPath("resources") 
public class MdrApplication extends Application { 

    private static final Logger logger = 
    LoggerFactory.getLogger(MdrApplication.class); 
} 

package com.somewhere.mdr.rest.resource; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 

import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

@Path("/tryme") 
public class TrymeResource { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public String getTryMe() throws Exception { 

    return "Hello, this doesn't work!!"; 
} 

は非稼働アプリケーションのためのクラスパスは、次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_6_CONTAINER"/> 
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> 
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> 
    <classpathentry combineaccessrules="false" kind="src" path="/mdr-message"/> 
    <classpathentry combineaccessrules="false" kind="src" path="/mbr-stub"/> 
    <classpathentry combineaccessrules="false" kind="src" path="/mdr-config"/> 
    <classpathentry kind="output" path="WebContent/WEB-INF/classes"/> 
</classpath> 

エラーを返すエンドポイントがある:

http://localhost:9081/mdr/resources/tryme

アプリケーションの両方のための私のweb.xmlは次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <display-name></display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

、私の同僚の1は、問題は第二のアプリが見ることができないということでなければならないことが示唆されましたJEE 6 jars、それは理にかなっています。しかし、私はそれがどのように起こっているか把握していないようです。

必要に応じてさらに詳しい情報を提供していただきます。また、特定のエラーが他の質問でも言及されていることを知っていますが、私はそれらの質問を検索し、無駄にそれらのことを試しました。したがって、根本的な原因が異なるように見えるので、私は新しい質問を投稿しています。

多くの感謝!

答えて

0

まず、すべての...私の謝罪。私は今、編集をしたし、それが上に表示され

private static final Logger logger =  
LoggerFactory.getLogger(MdrApplication.class); 

:ここでの実際の問題は、私はもともと上記のコードスニペットに含めることを怠ったものでした。

明らかに、MdrApplicationクラスは、slf4jロガーのインスタンス化ではうまく動作しません。そして、私は文字通りインスタンス化のみを意味します。私はクラス内で実際にロガーを使用していません...単にそれをインスタンス化します。上記の1行を削除すると、残りのエンドポイントが正しく機能します。

についての洞察は誰でも、この問題の原因となっている可能性がありますが、少なくとも実際の問題は解決されています。


UPDATE: SLF4Jロガーの問題は、WebSphereにバンドルされている固有のSLF4Jジャーとの種類の見かけの競合によるものでした。明らかに、WebSphere版は、Eclipse経由のコンパイルには十分なものでしたが、ロガーをインスタンス化するときのエラーからもわかるように、実行時に問題が見つからないか、問題が発生していました。これは、Resourceクラスにロガーを追加しようとしたときに、他の奇妙な問題にも遭遇したために見つかりました。このための修正点は、実際にはWEB-INF/libフォルダにslf4j-api-1.7.12.jarを追加することでした。 (私は、自分のWebSphereクラスローダーを親のために最後に設定していますが、どちらの設定もlibフォルダには入っていませんが)。実際の原因はまだ分かっていませんが、少なくともそれは以前よりも完全に知られています。あなたがより多くの情報を持っている場合は、jarの競合の問題に気をつけてください!


もう一度、その行を転記しないことをお詫びします。私には問題が起きることはありませんでした。将来的には、私はをすべてコード行に転記します!

これは誰かを助けることを望みます。

0

最初のクラスにはパッケージステートメントがありません。おそらくそれはカットアンドペーストの問題でした。ただし、最後のクラスTrymeResourceは、のメディアタイプの応答タイプのインポートがありません。 getTryMeメソッドは応答型を返しますが、文字列型を返すように宣言されています。これは検証/コンパイルエラーとして表示されるため、そのようなクラスは生成またはデプロイされません。

+0

欠落したインポートとレスポンスとストリングの戻り値の両方のタイプは、切り取りと貼り付けの両方のエラーでした。私は上記の元の投稿にそれらを修正しました。しかし、pkgのステートメントが欠落しているのは、そのクラスがデフォルトのpkgレベルであったためです。しかし、アプリケーション間の一貫性を維持するために、com.somewhere.jee6.hello pkgの中に移動しました。私はその動きの後にまだ動作するアプリ1を再テストしました。すべての変更は上記に反映されています。あなたの目に感謝します。他のアイデア? – risingTide

+0

web.xml以外のアイデアは、RESTサーブレットが含まれていないため、正しく表示されません。確かに、MyEclipse 2015のプロジェクトファイルのようなものはほとんどありません。私は、あなたがそれを理解するのに十分な情報を提供していないと思っていますが、少なくともあなたの答えからは、 –

関連する問題