हम अपने वर्गों से सभी एनोटेशन लेने और इसे 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>
की तरह अब जब मैं संपर्क में सेवा पर क्लिक करें:
मैं निम्नलिखित ट्रेस मिलती है:
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
}
naah .. xml का उपयोग करने का कोई कारण नहीं है। आर्किटेक्ट्स द्वारा उत्पन्न _Requirements_ जो ___ मानते हैं "अगर वह केवल एक और परत डाल सकता है, तो वह दुनिया पर शासन कर सकता है" ___ lol :) –
मुझे लगता है कि आपका दर्द मुझ पर विश्वास करता है! हालांकि मुझे यह स्वीकार करना होगा कि काम करने वाले कुछ को बदलने के लिए एक असली मजाक है। मैं एक्सएमएल बनाम एनोटेशन की योग्यता में नहीं आना चाहता हूं लेकिन मैं एनोटेशन पसंद करता हूं क्योंकि मैं एक कक्षा खोल सकता हूं और देख सकता हूं कि एक्सएमएल फाइल को खोलने के बिना चीजें कैसे तारित की जाती हैं ... – ramsinb
@Yea मुझे पता है, कोई भी डेवलपर उस से सहमत होगा।इसके अलावा मैं भी एनोटेशन पसंद करता हूं, लेकिन जब आप "आर्किटेक्ट" दुनिया पर शासन करने के लिए ___Voyage पर हैं, तो आप क्या करते हैं, वैसे भी, मैं सुबह में कोशिश करता हूं और अपने निष्कर्षों के साथ पोस्ट अपडेट करता हूं। धन्यवाद (वाई) –