2011-07-13 13 views
5

मुझे स्प्रिंग एमवीसी 3.0 में ModelAttribute के साथ एक अजीब समस्या है। जब मैं ऐप्पल को स्थानीयहोस्ट पर तैनात करता हूं, तो यह ठीक काम करता है। लेकिन जब मैं एक दूरस्थ सर्वर पर एप्लिकेशन को तैनात है, यह हर उपयोगकर्ता पहुँच विफल रहता है एक विशिष्ट कार्रवाई, त्रुटियों के साथ:क्या मॉडल एट्रिब्यूट आदिम हो सकता है?

ERROR: my.package.application.web.filter.ExceptionFilter - long.<init>() 
java.lang.NoSuchMethodException: long.<init>() 
     at java.lang.Class.getConstructor0(Class.java:2706) 
     at java.lang.Class.getDeclaredConstructor(Class.java:1985) 
     at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:762) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:356) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:153) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

कोड है कि मैं उपयोगकर्ता कि नियंत्रक में ModelAttribute init के लिए है:

@ModelAttribute("id") 
    public long getUserId(HttpSession session) { 
     UserInfoHolder userHolder = (UserInfoHolder) session 
       .getAttribute("userHolder"); 
     long userId = userHolder.getUserId(); 
     return userId; 
    } 

जहां तक ​​मैं कह सकता हूं, बग को मेरे स्थानीय वर्कस्टेशन पर पुन: उत्पन्न नहीं किया जा सकता है। और कार्रवाई से पहले यह होता है।

HandlerMethodInvoker.java (लाइन 762) में देख रहे हैं, हम इस पंक्ति देखें:

bindObject = BeanUtils.instantiateClass(paramType); 

मेरे एक अनुभवी सहकर्मी का मानना ​​है कि इस लाइन, समस्या का कारण बनता है, क्योंकि वह एक आदिम प्रकार ModelAttribute (लंबी) नहीं करता है ' टी एक कन्स्ट्रक्टर नहीं है। मुझे लगता है कि कारण शायद सही है, लेकिन यह कैसे समझा सकता है कि वेब एप्लिकेशन मेरे स्थानीय सर्वर पर ठीक काम करता है?

मैंने यह जानने की कोशिश की कि ModelAttribute समर्थन प्राचीन डेटा प्रकार है, लेकिन कोई अच्छा परिणाम नहीं है। क्या किसी को इस मुद्दे के बारे में अनुभव है?

उत्तर

5

मैं बस कुछ विचारों में फेंक रहा हूं, उम्मीद कर रहा हूं कि इससे थोड़ा सा मदद मिल सकती है।

स्टैक ट्रेस पता चलता है कि यह वास्तव में लंबे समय के लिए निर्माता विधि कॉल करने के प्रयास कर रहा है: यदि आप लंबे समय के लिए लंबे से इस्तेमाल किया प्रकार बदलने के

java.lang.NoSuchMethodException: long.<init>() 

यह काम करता है?

स्थानीय रूप से काम करने वाली चीजों के लिए, लेकिन ग्राहक पर नहीं। क्या जावा संस्करण समान है?

+0

मैंने इसे पहले से ही कोशिश की, लेकिन यह अभी भी लंबे प्रकार के लिए एक ही त्रुटि के साथ विफल रहता है। जावा संस्करण समान है: जावा 1.6 –

+0

जब आपने ऐसा किया है, तो आपने हैंडलर MethodInvoker.java (लाइन 762) पर ब्रेकपॉइंट सेट किया है और फिर पैरामीटर टाइप किया है? क्या यह भी लंबे समय तक बदल गया? – Raku

+0

हां, यह लंबे समय तक बदल गया। –

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