2016-05-03 58 views
0

我使用myEclipse IDE在WebSphere 8.5.5.5服務器上部署了兩個小的JEE 6 web應用程序。每個都包含一個簡單的REST端點。端點正在處理其中一個而不是另一個。我正在使用與WAS 8.5捆綁在一起的JAX-RS的固有Wink實現。這是我收到的第二個應用程序中的錯誤:使用myEclipse在JEE 6/WebSphere 8.5中的REST Resource FileNotFoundException

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) 

下面是有工作的端點第一個應用程序的兩個類文件:

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"; 
    } 
} 

我的工作程序看起來類路徑像這樣:

<?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> 

工作終點返回 「你好,它的工作原理」 上面是:

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

下面是有終點的第二應用程序的兩個類文件不起作用:

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> 

現在,我的一個同事建議,這個問題必須是第二個應用程序無法看到JEE 6罐,這是有道理的。但我似乎無法弄清楚這是如何發生的。

如果需要,我很樂意提供更多信息。另外,我知道在其他問題中提到了具體的錯誤,但我已經搜索了這些問題,並嘗試了這些無用的東西。因此,我發佈了一個新問題,因爲它看起來根本原因是不同的。

非常感謝!

回答

0

首先,所有......我的道歉。這裏的實際問題是什麼,我最初忽視了上面的代碼段包括:

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

我現在所做的編輯和它上面出現。

顯然,MdrApplication類不能很好地與slf4j記錄器的實例化配合使用。而我的字面意思是實例化而已。我實際上並沒有在課堂上使用記錄器......只是實例化它。刪除上面的那一行允許其餘端點正常工作。

如果任何人有任何洞察爲什麼可能會導致這個問題將是偉大的,但至少實際問題已得到解決。


UPDATE:與SLF4J記錄器的問題是,由於各種各樣的與捆綁與WebSphere固有SLF4J廣口瓶中的明顯衝突。顯然,WebSphere版本足夠用於通過Eclipse進行編譯,但是在運行時沒有找到或導致問題,這從實例化記錄器時的錯誤可以看出。我發現這是因爲我試圖在我的Resource類中包含記錄器時遇到了其他奇怪的問題。解決這個問題的方法是在我的WEB-INF/lib文件夾中添加slf4j-api-1.7.12.jar。 (我也將我的WebSphere classloader設置爲parent的最後值,儘管這兩個設置在lib文件夾中都沒有jar的情況下工作。)所以儘管實際原因還是有點未知,至少它比以前更加全面。如果您有更多信息,請隨時關注jar衝突問題!


再一次道歉,不要在此之前發帖......我從來沒有想到過,這可能是問題所在。未來...我會每代碼行張貼

希望這可以幫助別人。

0

第一個類缺少其包裝語句,可能這是一個剪切和粘貼問題。但是,最後一類TrymeResource缺少進口MediaType響應類型。 getTryMe方法聲明爲返回響應類型,但您試圖返回字符串類型。這將顯示爲驗證/編譯錯誤,因此不會生成或部署此類。

+0

缺少的導入和Response vs String返回類型都被剪切並粘貼錯誤。我在上面的原始帖子中修復了這些問題。但是,缺少的pkg語句實際上是合法的,因爲該類處於默認的pkg級別。爲了保持應用程序之間的一致性,我把它移到了com.somewhere.jee6.hello pkg中。我重新測試了一個應用程序1仍然有效後,該舉措。上面已經反映了所有的變化。謝謝你的眼睛。任何其他想法? – risingTide

+0

除了web.xml之外,沒有其他想法看起來不正確,因爲它不包含REST servlet。事實上,沒有太多的項目文件看起來像MyEclipse 2015中的REST項目。我懷疑你沒有提供足夠的信息來解決它,但至少你似乎有它的工作,從你的其他答案。 –

相關問題