2016-05-03 16 views
0

У меня есть два небольших веб-приложения 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> 

рабочая конечная точка, которая возвращает "Привет, это работает" выше:

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 регистратор должен был кажущейся конфликт сортов с присущей SLF4J банку, который в комплекте с WebSphere. По-видимому, версия WebSphere была достаточно хороша для компиляции через Eclipse, но либо не была обнаружена, либо вызвала проблемы во время выполнения, о чем свидетельствует ошибка при создании экземпляра журнала. Я нашел это, потому что я также столкнулся с другими нечетными проблемами при попытке включить регистратор в свой класс ресурсов. Исправить это было фактически добавить slf4j-api-1.7.12.jar в мою папку WEB-INF/lib. (У меня также есть мой загрузчик классов WebSphere, установленный для родителя, для которого он стоит, хотя ни одна установка не работает без jar в папке lib.) Поэтому, хотя фактическая причина все еще немного неизвестна, по крайней мере, она более известна, чем раньше. Не стесняйтесь взвешивать вопрос о конфликте в банке, если у вас есть дополнительная информация!


Опять же, извинения не за публикацию этой строки ранее ... мне никогда не приходило в голову, что это может быть проблемой. В будущем ... Я буду размещать каждую строку кода!

Надеюсь, это поможет кому-то.

0

В первом классе отсутствует его оператор пакета, предположительно это проблема с вырезанием и вставкой. Однако последний класс, TrymeResource, отсутствует импорт для MediaType и Ответ Тип. Метод getTryMe объявлен как возвращаемый тип Ответ, но вы пытаетесь вернуть тип String. Это будет отображаться как ошибка валидации/компиляции, и поэтому не будет такого класса, сгенерированного или развернутого.

+0

Недопустимый импорт и тип ответа Response vs String были вырезаны и вставляются. Я исправил их в исходном сообщении выше. Однако отсутствующая инструкция pkg была фактически легитимной, поскольку этот класс находился на уровне pkg по умолчанию. Однако, чтобы поддерживать согласованность между приложениями, я переместил это в com.somewhere.jee6.hello pkg. Я повторно протестировал приложение 1, которое все еще работает после этого хода. Все изменения были отражены выше. Спасибо за ваши глаза. Любые другие идеи? – risingTide

+0

Никаких других идей, кроме web.xml, не выглядит правильным, так как он не содержит сервлет REST. В самом деле, не так много файлов проекта выглядит как мой проект REST в MyEclipse 2015 года. Я подозреваю, что вы не предоставили достаточной информации, чтобы понять это, но по крайней мере вы, похоже, работаете с вашим другим ответом. –