मेरे पास वेबस्फेयर 8.5.5.5 सर्वर पर myEclipse IDE का उपयोग करते हुए दो छोटे जेईई 6 वेब एप्लिकेशन तैनात हैं। दोनों में 1 साधारण REST समापन बिंदु होता है। समापन बिंदु उनमें से एक पर काम कर रहा है न कि दूसरे पर। मैं WAS 8.5 के साथ बंडल किए गए JAX-RS के अंतर्निहित विंक कार्यान्वयन का उपयोग कर रहा हूं। दूसरे ऐप पर मुझे जो त्रुटि मिल रही है वह यहां दी गई है:

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>

अब, मेरे एक सहयोगी ने सुझाव दिया कि मुद्दा यह होना चाहिए कि दूसरा ऐप जेईई 6 जार नहीं देख सकता है, जो समझ में आता है। लेकिन मुझे समझ नहीं आ रहा है कि यह कैसे हो रहा है।

यदि आवश्यक हो तो मुझे और जानकारी प्रदान करने में खुशी होगी। साथ ही, मुझे पता है कि अन्य प्रश्नों में विशिष्ट त्रुटि का उल्लेख किया गया है, लेकिन मैंने उन प्रश्नों की खोज की है और उन चीजों का कोई फायदा नहीं हुआ है। इसलिए मैं एक नया प्रश्न पोस्ट कर रहा हूं क्योंकि ऐसा प्रतीत होता है कि मूल कारण अलग है।

बहुत धन्यवाद!

0
risingTide 3 मई 2016, 19:31

2 जवाब

सबसे बढ़िया उत्तर

सबसे पहले...माफी चाहता हूं। यहां वास्तविक मुद्दा कुछ ऐसा था जिसे मैंने मूल रूप से उपरोक्त कोड स्निपेट में शामिल करने के लिए उपेक्षित किया था:

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

मैंने अब संपादन कर लिया है और यह ऊपर दिखाई देता है।

तो जाहिरा तौर पर MdrApplication वर्ग एक slf4j लकड़हारे की तात्कालिकता के साथ अच्छी तरह से नहीं खेलता है। और मेरा शाब्दिक अर्थ केवल तत्काल ही है। मैं वास्तव में कक्षा में लॉगर का उपयोग बिल्कुल नहीं कर रहा हूं ... बस इसे तुरंत चालू कर रहा हूं। ऊपर की उस सिंगल लाइन को हटाने से बाकी एंडपॉइंट सही तरीके से काम कर सकता है।

अगर किसी के पास कोई अंतर्दृष्टि है क्यों जो इस समस्या का कारण हो सकता है जो बहुत अच्छा होगा, लेकिन कम से कम वास्तविक समस्या का समाधान किया गया है।


अद्यतन करें: slf4j लकड़हारे के साथ समस्या अंतर्निहित slf4j जार के साथ स्पष्ट विरोध के कारण थी जो WebSphere के साथ बंडल है। जाहिरा तौर पर वेबस्फेयर संस्करण एक्लिप्स के माध्यम से संकलन के लिए काफी अच्छा था, लेकिन या तो नहीं मिला या रनटाइम पर समस्याएं पैदा कर रहा था, जैसा कि लॉगर को तत्काल करते समय त्रुटि से प्रमाणित है। मुझे यह इसलिए मिला क्योंकि मेरे संसाधन वर्ग में लॉगर को शामिल करने का प्रयास करते समय मैं अन्य विषम मुद्दों में भी भाग गया। इसके लिए फिक्स वास्तव में मेरे WEB-INF/lib फ़ोल्डर में slf4j-api-1.7.12.jar जोड़ना था। (मेरे पास मेरा वेबस्पेयर क्लासलोडर माता-पिता पर सेट है, जो इसके लायक है, हालांकि न तो सेटिंग lib फ़ोल्डर में जार के बिना काम करती है।) तो हालांकि वास्तविक कारण अभी भी थोड़ा अज्ञात है, कम से कम यह पहले की तुलना में अधिक पूरी तरह से जाना जाता है। यदि आपके पास अधिक जानकारी है तो जार संघर्ष के मुद्दे पर बेझिझक विचार करें!


दोबारा, उस लाइन को पहले पोस्ट न करने के लिए खेद है ... यह मेरे साथ कभी नहीं हुआ कि यह मुद्दा हो सकता है। भविष्य में...मैं हर कोड की पंक्ति पोस्ट करूंगा!

आशा है कि यह किसी की मदद करता है।

0
risingTide 5 मई 2016, 16:58

प्रथम श्रेणी में अपना पैकेज विवरण गुम है, संभवतः यह एक कट और पेस्ट मुद्दा था। हालांकि, अंतिम श्रेणी, TrymeResource में MediaType और प्रतिक्रिया प्रकारों के लिए आयात अनुपलब्ध है। getTryMe विधि को प्रतिसाद प्रकार लौटाने के लिए घोषित किया गया है लेकिन आप एक स्ट्रिंग प्रकार वापस करने का प्रयास कर रहे हैं। यह एक सत्यापन/संकलन त्रुटि के रूप में दिखाई देगा और इसलिए ऐसी कोई कक्षा उत्पन्न या तैनात नहीं होगी।

0
Tony Weddle 4 मई 2016, 09:10