2014-04-08 8 views
5

के बिना ResourceConfig का यूआरएल वेब.एक्सएमएल से जर्सी 2.7 के साथ रिसोर्सकॉन्फिग का उपयोग करके पूरी तरह से जावा कॉन्फ़िगरेशन में माइग्रेट किया गया और टॉमकैट 7 पर तैनाती कर रहा है। उसके बाद मैं इसका उपयोग करके सेवाओं तक पहुंचने में सक्षम नहीं हूं यूआरएल कि मैं web.xml दृष्टिकोण के साथ उपयोग कर रहा था। मुझे समझ में नहीं आता कि संसाधन कॉनफिग पथ को कैसे प्रभावित कर रहा है।किसी भी जर्सी एप्लिकेशन का यूआरएल बिना किसी वेब.एक्सएमएल

मेरे पिछले web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
version="3.0"> 
<servlet> 
    <servlet-name>my.app</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.mypackage.resource,com.mypackage.providers</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.scanning.recursive</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>   
    </init-param> 
    <init-param> 
     <param-name>org.glassfish.jersey.server.ServerProperties.BV_SEND_ERROR_IN_RESPONSE</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>my.app</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

मेरे विन्यास वर्ग कि ResourceConfig फैली हुई है:

MyRESTAPIApp.java

@ApplicationPath("") 
public class MyRESTAPIApp extends ResourceConfig{ 
    public MyRESTAPIApp() { 
     packages("com.mypackage.resource", "com.mypackage.providers"); 
     register(org.glassfish.jersey.filter.LoggingFilter.class); 
     property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true"); 
    } 
} 

मेरी संसाधनों में से एक है:

FlagResource.java

@Path("my-resource") 
public class FlagResource { 
private MyService myService = new MyService(); 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public FlagResource getFlagResource(@NotNull @QueryParam("level") Long level) { 
    FlagResource flagResource = myService.getFlagResource(level); 
    return flagResource; 
} 

}

युद्ध है कि मैं पैदा कर रहा हूँ कहा जाता है: my.app.war।

टोमकैट सामान्य रूप से युद्ध फ़ाइल के नाम से वेब संदर्भ रूट पथ ले रहा था, लेकिन मुझे नहीं पता कि जावा कोड आधारित कॉन्फ़िगरेशन का उपयोग करते समय यह बदलता है या नहीं।

GET http://localhost:8080/my.app/my-resource?level=1 

रिटर्न 404

उत्तर

7

असल में मैं @ApplicationPath एनोटेशन के मूल्य के रूप में जोड़ने "/" द्वारा इस हल, मैंने सोचा था कि क्योंकि API दस्तावेज़ @ApplicationPath मूल्य परम निम्नलिखित कहते हैं कि यह आवश्यक नहीं था :

Defines the base URI for all resource URIs. A trailing '/' character will be automatically appended if one is not present. 

मैं मान लिया है कि एक खाली स्ट्रिंग छोड़ने @ApplicationPath उपयोग करने के लिए ("/") के बराबर होगी, लेकिन ऐसा नहीं है।

तो यह कैसे विन्यास वर्ग अब दिखाई देता है:

@ApplicationPath("/") 
public class MyRESTAPIApp extends ResourceConfig{ 
    public MyRESTAPIApp() { 
     packages("com.mypackage.resource", "com.mypackage.providers"); 
     register(org.glassfish.jersey.filter.LoggingFilter.class); 
     property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true"); 
    } 
} 
संबंधित मुद्दे