2015-01-24 9 views
5

में नहीं मिला है, मैं नेटबीन विचार का उपयोग करके एक सरल आराम से वेब सेवा बनाने की कोशिश कर रहा हूं।
मेरा जावा ईई संस्करण है: जावा ईई 7 वेब।जैक्स-आरएस संसाधन ग्लासफ़िश सर्वर

मैंने इस कॉन्टेक्सपाथ को सेट करते हुए एक नया जावा वेब एप्लिकेशन बनाया: /DukesAgeService

http://localhost:8080/DukesAgeService/

हां, तो सब कुछ ठीक काम करता है:

अब, अपने आवेदन चल रहा है, ब्राउज़र मेरी Index.html पेज पर प्रदर्शित करते हैं।

फिर, मैंने रीस्टफुल वेब सेवा विज़ार्ड का उपयोग करके एक सरल विश्राम संसाधन बनाने की कोशिश की।

तो, मैं इस वर्ग बनाया:

package firstcup.webservice; 

import javax.ws.rs.core.Context; 
import javax.ws.rs.core.UriInfo; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PUT; 

/** 
* REST Web Service 
* 
* @author nolanof 
*/ 
@Path("dukesAge") 
public class DukesAgeResource { 

@Context 
private UriInfo context; 

/** 
* Creates a new instance of DukesAgeResource 
*/ 
public DukesAgeResource() { 
} 

/** 
* Retrieves representation of an instance of firstcup.webservice.DukesAgeResource 
* @return an instance of java.lang.String 
*/ 
@GET 
@Produces("text/plain") 
public String getText() {   
    return "hello world"; 
} 
} 

लेकिन मेरे आवेदन चल रहा है, यूआरएल पर: http://localhost:8080/DukesAgeService/dukesAge मुझे 404-नहीं मिला पृष्ठ मिलता है।

मैंने निष्कासित किया कि "/dukesAge" का यूआरएल DukesAgeResource वर्ग getText विधि द्वारा संभाला गया था। क्या गलत है?

धन्यवाद

+0

कृपया अपनी वेब.एक्सएमएल फ़ाइल को परियोजना फ़ोल्डर संरचना –

उत्तर

6

शायद आप जेएक्स-आरएस एप्लिकेशन सर्वलेट खो रहे हैं। आप इसे web.xml में परिभाषित कर सकते हैं या यदि आप xml-less जाना चाहते हैं, तो आप Application सबक्लास का उपयोग कर सकते हैं। आईएमओ @ApplicationPath के साथ एनोटेटेड Application सबक्लास का उपयोग करने का सबसे आसान तरीका है। एक सर्वलेट बनाया जाएगा और सर्वलेट पथ एनोटेशन में मान निर्धारित किया जाएगा।

@ApplicationPath("/rest") 
public class RestApplication extends Application { 
    // All request scoped resources and providers 
    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> classes = new HashSet<>(); 
     classes.add(DukesAgeResource.class); 
     return classes; 
    } 

    // all singleton resources and providers 
    @Override 
    public Set<Object> getSingletons() { 
     Set<Object> singletons = new HashSet<>(); 
     return singletons; 
    } 
} 

की तरह कुछ तो संसाधन के माध्यम से

http://localhost:8080/DukesAgeService/rest/dukesAge संसाधन का उपयोग किया जाना चाहिए।

अन्य तरीके हैं, लेकिन यह पोर्टेबल तरीका है। ग्लासफ़िश जर्सी का उपयोग करता है, लेकिन नेटबीन्स में स्क्रैच से जावा ईई वेब एप्लिकेशन बनाना केवल संकलन समय जावा ईई मानक वर्ग (कोई जर्सी निर्भरता) आयात नहीं करेगा। तो उपरोक्त वास्तव में आपकी शर्त शुरू करने के लिए है।

आप Jersey Documentation पर अन्य परिनियोजन विकल्प देख सकते हैं। कुछ विकल्पों के लिए, आपको कुछ जर्सी संकलन-समय निर्भरताओं को जोड़ने की आवश्यकता हो सकती है। यही कारण है कि मैंने अभी उपर्युक्त उल्लेख किया है। कोई अन्य जार की जरूरत नहीं है।

एक और चीज जो 404 का कारण बनती है, यह है कि यदि आप JAX-RS सर्वलेट पथ को /* के रूप में निर्दिष्ट करते हैं। यह डिफ़ॉल्ट सर्वलेट के साथ संघर्ष करेगा जो आपके एचटीएमएल पृष्ठों जैसे स्थिर संसाधनों की सेवा करता है। यही कारण है कि मैंने इसे /rest पर सेट किया।


अद्यतन

यह भी JAX-रुपये में कहा गया है कि अगर कोई विशिष्ट जानकारी getClasses() और getSingletons() में लौटे खाली सेट कर रहे हैं, निहित पैकेज स्कैनिंग होने चाहिए। (प्रदाता) कक्षाओं को एनोटेटेड सूखे @Provider डिफ़ॉल्ट रूप से सिंगलटन के रूप में जोड़ा जाएगा और @Path के साथ एनोटेटेड संसाधन वर्ग प्रति-अनुरोध ऑब्जेक्ट होंगे (जिसका अर्थ है कि एक नया ऑब्जेक्ट प्रत्येक अनुरोध बनाया गया है)। तो आप वैकल्पिक रूप से

@ApplicationPath("/rest") 
public class RestApplication extends Application { 
    // Left empty 
} 

और यह वही काम करना चाहिए।

+0

के साथ पोस्ट करें, आपने मेरी समस्या हल की है, धन्यवाद – nolanofra

+0

@nolanofra thx मैंने आज इस पर इतना समय बर्बाद कर दिया! – Drew

0

आप अपने web.xml में कुछ पथ प्रारंभ हो सकता है, शायद यही वजह है कि आप एक 404 त्रुटि हो रही है, जबकि आप सेवा कहते हैं। अपना वेब.एक्सएमएल जांचें और यदि यह किसी भी चीज़ पर सेट हो तो * फिर कृपया इसे काम करने के लिए अपनी सेवा कॉल में शामिल करें।

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