2012-11-21 9 views
10

हम अपने वर्गों से सभी एनोटेशन लेने और इसे spring-config.xml में कॉन्फ़िगर करने का प्रयास कर रहे हैं।आरईएसटी सेवाएं: एनोटेशन का उपयोग किये बिना एनोटेटेड मोड को कैसे निर्दिष्ट करें

spring-config.xml लग रहा है

<jaxrs:server id="restServer" address="/rest/"> 
     <jaxrs:model id="restModel"> 
      <jaxrs:resource name="com.csc.fs.rest.contact.RetrieveContactHistoryBP" path="retrieveContactHistoryBP"> 
       <jaxrs:operation name="retrieve" path="{partyId}" consumes="application/json" produces="application/json" verb="GET"> 
        <jaxrs:param name="req" type="CONTEXT"/> 
        <jaxrs:param name="partyId" type="PATH"/> 
       </jaxrs:operation> 
      </jaxrs:resource> 
      <jaxrs:resource name="com.csc.fs.rest.contact.StartContactBP" path="startContactBP"> 
       <jaxrs:operation name="startContact" path="/" consumes="application/json" produces="application/json" verb="PUT"> 
        <jaxrs:param name="req" type="CONTEXT"/> 
        <jaxrs:param name="startContact" type="REQUEST_BODY"/> 
       </jaxrs:operation> 
      </jaxrs:resource> 
     </jaxrs:model> 
     <jaxrs:serviceBeans> 

की तरह अब जब मैं संपर्क में सेवा पर क्लिक करें: enter image description here

मैं निम्नलिखित ट्रेस मिलती है:

HTTP Status 500 - 
________________________________________ 
type Exception report 
message 
description The server encountered an internal error() that prevented it from fulfilling this request. 
exception 
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault 
    org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:102) 
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:315) 
    org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113) 
    org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:105) 
    org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461) 
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:188) 
    org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148) 
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179) 
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159) 
root cause 
org.apache.cxf.interceptor.Fault 
    org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:67) 
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:315) 
    org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113) 
    org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:105) 
    org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461) 
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:188) 
    org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148) 
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179) 
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159) 
root cause 
java.lang.NullPointerException 
    org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleOperation(WadlGenerator.java:310) 
    org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleResource(WadlGenerator.java:253) 
    org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleRequest(WadlGenerator.java:185) 
    org.apache.cxf.jaxrs.impl.RequestPreprocessor.checkMetadataRequest(RequestPreprocessor.java:189) 
  

मैं CXF-jaxrs में डिबग किया स्रोत और लाइन

java.lang.NullPointerException 
     org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleOperation(WadlGenerator.java:310) 

विधि annotatedMethod के लिए खोज की गई है लेकिन ऑब्जेक्ट में annotatedMethod फ़ील्ड null है जो इस प्रकार त्रुटि को फेंकता है।

मैं इसे विधि के ऊपर कक्षा में एनोटेशन का उपयोग करके काम करने के लिए प्राप्त कर सकता हूं। लेकिन मैं इसे एक्सएमएल कॉन्फ़िगरेशन के माध्यम से काम करना चाहता हूं।

मैं

<jaxrs:operation name="retrieve" path="{partyId}" consumes="application/json" produces="application/json" verb="GET"> 

retrieve निर्दिष्ट किया है आपरेशन के नाम से जाना है। क्या अन्य विशेषता निर्दिष्ट करने की जरूरत है ?? या यह सिर्फ एक्सएमएल विन्यास की एक सीमा है?

पीएस: यदि आपको लगता है कि कुछ और जानकारी को जोड़ने या स्पष्ट करने की आवश्यकता है, तो टिप्पणियां छोड़ दें। रीस्टफुल सेवाओं के लिए नया और यह सुनिश्चित नहीं है कि इस संदर्भ में सभी जानकारी क्या अपेक्षित है।

अद्यतन:

सेवा वर्ग

//@Path("/startContactBP") 
public class StartContactBP { 
    //@PUT 
    //@Consumes(MediaType.APPLICATION_JSON) 
    //@Produces(MediaType.APPLICATION_JSON) 
    //@Path ("/") 
    //public com.csc.fs.ws.contact.StartContactResult startContact(@Context HttpServletRequest req, com.csc.fs.ws.contact.StartContact startContact){ 
    public com.csc.fs.ws.contact.StartContactResult startContact(HttpServletRequest req, com.csc.fs.ws.contact.StartContact startContact){ 

     //call login 
      //call actual service 
      //call logoff 
    } 

उत्तर

1

मैं क्या देखते हैं, CXF जरूरी उम्मीद नहीं है विधि पर टिप्पणी की जा कर सकते हैं WadlGenerator बस वर्ग OperationResourceInfo जो होता है का एक उदाहरण पर एक विधि बुला रहा है से getAnnotatedMethod कहा जा सकता है। ऐसा इसलिए हो सकता है क्योंकि डेवलपर्स सिर्फ आलसी थे और विधि को विधिवत नाम नहीं दिया।

मेरा सुझाव स्टैक ट्रेस में उच्चतम डीबग करना है ताकि यह देखने के लिए कि OperationResourceInfo कक्षा का उदाहरण क्या बना रहा है, जिससे आप यह देखने में सक्षम होना चाहिए कि यह सृजन गलत हो रहा है या नहीं।

इसके अतिरिक्त आप सीएक्सएफ का किस संस्करण का उपयोग कर रहे हैं? इसे नवीनतम सुनिश्चित करें।

जिज्ञासा से कोई कारण है कि आप एनोटेशन के विपरीत एक्सएमएल कॉन्फ़िगरेशन में क्यों जा रहे हैं?

+0

naah .. xml का उपयोग करने का कोई कारण नहीं है। आर्किटेक्ट्स द्वारा उत्पन्न _Requirements_ जो ___ मानते हैं "अगर वह केवल एक और परत डाल सकता है, तो वह दुनिया पर शासन कर सकता है" ___ lol :) –

+0

मुझे लगता है कि आपका दर्द मुझ पर विश्वास करता है! हालांकि मुझे यह स्वीकार करना होगा कि काम करने वाले कुछ को बदलने के लिए एक असली मजाक है। मैं एक्सएमएल बनाम एनोटेशन की योग्यता में नहीं आना चाहता हूं लेकिन मैं एनोटेशन पसंद करता हूं क्योंकि मैं एक कक्षा खोल सकता हूं और देख सकता हूं कि एक्सएमएल फाइल को खोलने के बिना चीजें कैसे तारित की जाती हैं ... – ramsinb

+0

@Yea मुझे पता है, कोई भी डेवलपर उस से सहमत होगा।इसके अलावा मैं भी एनोटेशन पसंद करता हूं, लेकिन जब आप "आर्किटेक्ट" दुनिया पर शासन करने के लिए ___Voyage पर हैं, तो आप क्या करते हैं, वैसे भी, मैं सुबह में कोशिश करता हूं और अपने निष्कर्षों के साथ पोस्ट अपडेट करता हूं। धन्यवाद (वाई) –

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

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