2013-07-12 7 views
5

मैं Glassfish 4.0 पर एक साधारण JAX-आरएस सेवा तैनाती और निम्न त्रुटि हो रही रखने के लिए कोशिश कर रहा हूँ:बाकी सेवा त्रुटि: संसाधन उपलब्ध Glassfish नहीं है 4.0 JAX-आरएस 2.0

HTTP Status 404 - Not Found 
type Status report 
messageNot Found 
descriptionThe requested resource is not available. 
GlassFish Server Open Source Edition 4.0 

युद्ध फ़ाइल ठीक तैनात ग्लासफ़िश सर्वर में हालांकि ऐसा लगता है कि क्लास लोडर अपना काम नहीं कर रहा है और बाकी सेवा को उचित रूप से उजागर कर रहा है। मैं यह समझने की कोशिश कर रहा हूं कि कक्षा उचित रूप से क्यों लोड नहीं हो रही है। मुझे पता है कि यह शायद एक साधारण विन्यास परिवर्तन है हालांकि मैं इसे खोजने में सक्षम नहीं हूं।

विन्यास: glassfish-web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <context-root>/reports</context-root> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class' java code.</description> 
    </property> 
    </jsp-config> 
</glassfish-web-app> 

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"> 
    <servlet> 
     <servlet-name>Jersey</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
</web-app> 

बाकी सेवा कोड:

package com.esa.report.rest.service; 

import javax.ws.rs.core.Context; 
import javax.ws.rs.core.UriInfo; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 
import javax.enterprise.context.RequestScoped; 
import javax.ws.rs.core.MediaType; 

@Path("weeklyStatusReport") 
@RequestScoped 
public class WeeklyStatusReportService { 

    @Context 
    private UriInfo context; 

    public WeeklyStatusReportService() { 
    } 

    @GET 
    @Path("run/{esaId}") 
    @Produces({MediaType.APPLICATION_XHTML_XML}) 
    public String runReport(@PathParam("esaId") String esaId){ 
     return("Hello esaId: "+esaId); 
    } 

    @GET 
    @Produces("text/html") 
    public String getHtml() { 
     return("hello this is the weekly status report"); 
    } 

    @PUT 
    @Consumes("text/html") 
    public void putHtml(String content) { 
    } 
} 

युद्ध के साथ तैनात किया गया है मैं/रिपोर्ट का यूआरएल संदर्भ और यूआरएल का उपयोग कर रहा हूं :

http://localhost:8080/reports/rest/weeklyStatusReport/run/123 
+0

क्या आपने कहीं वेब सेवा कक्षाएं पंजीकृत नहीं की हैं? क्या कोड ग्लासफ़िश 3 पर काम करता था? – perissf

उत्तर

25

सबसे पहले, web.xml में जो कुछ भी आपने लिखा था उसे छोड़ दें। ग्लासफ़िश पर (और सभी जावाईई 7 कंटेनर) जेएक्स-आरएस बॉक्स से बाहर काम करता है, कोई विन्यास की आवश्यकता नहीं है।

तो फिर आप अपने classpath में एक javax.ws.rs.core.Application उपवर्ग है, घोषित करने चाहिए एक @ApplicationPath("/") (इस कंटेनर JAX-आरएस इंजन शुरू करने के लिए कहता है)।

अन्य संसाधन स्वचालित रूप से एप्लिकेशन सर्वर द्वारा उठाए जाएंगे।

+1

हमारी सहायता कार्लो के लिए धन्यवाद। इसने एक जादू की तरह काम किया। – Stu

+0

क्या यह टॉमकैट के लिए भी बॉक्स से बाहर काम करता है? –

+1

@MarioDennis कोई रास्ता नहीं, [यह लिंक] देखें (https://jersey.java.net/documentation/latest/modules-and-dependencies.html) –

संबंधित मुद्दे