У меня есть два небольших веб-приложения JEE 6, развернутые на сервере WebSphere 8.5.5.5, с помощью IDE myEclipse. Оба они содержат одну простую конечную точку REST. Конечная точка работает над одним из них, а не с другой. Я использую встроенную реализацию Wink JAX-RS в комплекте с WAS 8.5. Здесь ошибка я получаю на втором приложении:REST Resource FileNotFoundException в JEE 6/WebSphere 8.5 с использованием myEclipse
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>
рабочая конечная точка, которая возвращает "Привет, это работает" выше:
Вот два класса файлы второго приложения, которое имеет конечную точку, которая не работает:
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>
конечная точка, которая возвращает ошибку является:
Моя 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, что имеет смысл. Но я не могу понять, как это происходит.
Я был бы рад предоставить дополнительную информацию, если это необходимо. Кроме того, я знаю, что конкретная ошибка упоминается в других вопросах, но я просматривал эти вопросы и пробовал эти вещи безрезультатно. Поэтому я публикую новый вопрос, потому что, по-видимому, первопричина различна.
Большое спасибо!
Недопустимый импорт и тип ответа Response vs String были вырезаны и вставляются. Я исправил их в исходном сообщении выше. Однако отсутствующая инструкция pkg была фактически легитимной, поскольку этот класс находился на уровне pkg по умолчанию. Однако, чтобы поддерживать согласованность между приложениями, я переместил это в com.somewhere.jee6.hello pkg. Я повторно протестировал приложение 1, которое все еще работает после этого хода. Все изменения были отражены выше. Спасибо за ваши глаза. Любые другие идеи? – risingTide
Никаких других идей, кроме web.xml, не выглядит правильным, так как он не содержит сервлет REST. В самом деле, не так много файлов проекта выглядит как мой проект REST в MyEclipse 2015 года. Я подозреваю, что вы не предоставили достаточной информации, чтобы понять это, но по крайней мере вы, похоже, работаете с вашим другим ответом. –