2013-05-17 7 views
5

मैंने इस मुद्दे के बारे में कई प्रश्न देखे हैं लेकिन कोई निर्णायक उत्तर नहीं है। मुझे अपने वर्कलाइट एडाप्टर कार्यान्वयन से जावा क्लास को कॉल करने में परेशानी हो रही है। मैंने आईबीएम वर्कलाइट जावा एडाप्टर ट्यूटोरियल से कोड के साथ अपना कोड बदल दिया और यह ठीक उसी तरह विफल रहता है। इसके अलावा मुझे आईबीएम की साइट पर एक प्रतिक्रिया मिली कि जावा 1.7 कंपाइलर इस समस्या का कारण बन सकता है और इसके बजाए जावा 1.6 का उपयोग कर सकता है। मैंने मान्य किया है कि ग्रहण में मेरा कंपाइलर जावा 1.6 है।ईसीएमए टाइपरर वर्कलाइट एडाप्टर से जावा क्लास को कॉल करना

Screenshot of Eclipse and code path

मेरे जावा वर्गों सब कॉम (जैसे com.worklight.customcode) के साथ शुरू करते हैं। मैंने सार्वजनिक स्थैतिक विधियों (उचित वाक्यविन्यास का उपयोग करके) को कॉल करने और ऑब्जेक्ट को तत्काल करने और विधि को कॉल करने की कोशिश की है। जैसा ऊपर बताया गया है, मैंने यह भी सत्यापित किया है कि मैं जावा 1.6 कंपाइलर का उपयोग कर रहा हूं।

एडाप्टर कार्यान्वयन फ़ाइल:

function addTwoIntegers(a,b){ 
    return { 
     result: com.worklight.customcode.Calculator1.addTwoIntegers(a,b) 
    }; 
} 

जावा फ़ाइल (असंपादित आईबीएम Worklight नमूना):

यहाँ कुछ कोड नमूने हैं पैकेज com.worklight.customcode; कंसोल में

import java.util.logging.Logger; 

public class Calculator1 { 

    private final static Logger logger = Logger.getLogger(Calculator1.class.getName()); 

    public static int addTwoIntegers(int first, int second){ 
     logger.info("addTwoIntegers invoked"); 
     return first + second; 
    } 

    public int subtractTwoIntegers(int first, int second){ 
     logger.info("subtractTwoIntegers invoked"); 
     return first - second; 
    } 

} 

त्रुटि:

TypeError: Cannot call property addTwoIntegers in object [JavaPackage com.worklight.customcode.Calculator1]. It is not a function, it is "object". (%2FUsers%2Fhome%2Fdev%2Fapp%2Fappprj%2Fadapters%2Fadapter/adapter-impl.js#26) FWLSE0101E: Caused by: null

संबंधित प्रश्नों से कुछ हैं:

उत्तर

2

मैं करीब था, यह क्लासस्पैट प्रति से नहीं था, बल्कि (जाहिर है) ग्रहण परियोजना सेटिंग्स।

इस सप्ताह का पीछा करने के एक सप्ताह या उससे अधिक के बाद, मैंने कुछ प्रोजेक्ट को शामिल करने के लिए प्रोजेक्ट फ़ाइल संपादित की, जिसमें मेरे प्रोजेक्ट नहीं थे। अनुभाग में निम्नलिखित बिल्ड कमांड जोड़ने से ग्रहण को पुनरारंभ करने के बाद जावास्क्रिप्ट से जावा क्लास लॉन्च करने की अनुमति दी गई है।

<buildSpec> 
    <buildCommand> 
     <name>org.eclipse.jdt.core.javabuilder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
    <buildCommand> 
     <name>org.eclipse.wst.jsdt.core.javascriptValidator</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
    <buildCommand> 
     <name>org.eclipse.wst.common.project.facet.core.builder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
    <buildCommand> 
     <name>com.worklight.studio.plugin.WorklightProjectBuilder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
    <buildCommand> 
     <name>org.eclipse.wst.validation.validationbuilder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
</buildSpec> 

.project फ़ाइल Worklight परियोजना घर की जड़ में स्थित है (उदाहरण के लिए MyProject/.project)। मैंने आखिरकार एक कामकाजी परियोजना में भागकर इसे जावास्क्रिप्ट से जावा को सफलतापूर्वक कॉल किया।

http://www.ibm.com/developerworks/rational/library/server-side-mobile-application-development-1/

मैं अपने प्रोजेक्ट को शब्दशः कोड की नकल की और इसे अपने कोड के रूप में ही व्यवहार किया था देखें। मैंने उस कोड पर अपना कोड कॉपी किया और मेरा कोड काम किया (!!)। तब मैंने क्लासपाथ की तुलना की, जो कुछ अलग थे, लेकिन इसने व्यवहार को नहीं बदला। मैंने प्रोजेक्ट फ़ाइल का निरीक्षण किया और देखा कि मेरी फ़ाइल में ऊपर बिल्डमांड टैग नहीं हैं।इसके बजाय मेरी फाइल में कई बाहरी टूल बिल्डिंग टैग थे, संभवतः क्योंकि मेरी टीम के लोगों में से एक ग्रहण के अलावा आईडीई का उपयोग करता है और उसका प्रोजेक्ट प्रोजेक्ट में से एक बन गया। (मुझे लगता है कि यह शानदार है, अगर यह मायने रखता है)।

मैं इन टैगों में से प्रत्येक के बारे में सभी विवरणों को बिल्कुल समझ नहीं पा रहा हूं या वास्तव में कैसे और क्यों कार्यबल और ग्रहण उनके व्यवहार को बदलता है (या वे पहली जगह क्यों गायब हो गए)। हालांकि, यह मेरे कोड का काम किया। यह केवल मुझे एक सप्ताह के लायक काम (एएके!) खर्च किया।

मुझे उम्मीद है कि यह भविष्य में किसी और की मदद करेगा।

0

सबसे पहले यह सुनिश्चित करने का प्रयास करें कि यह एक प्रकार की रूपांतरण समस्या नहीं है। अपने जावा कोड में दो ऑब्जेक्ट पैरामीटर के साथ जोड़ें फ़ंक्शन को परिभाषित करें:

public static int addTwoIntegers(Object first, Object second) { 
    logger.info("addTwoIntegers invoked" + first.getClass() + "," + second.getClass()); 
    return first + second; 
} 

सर्वर आउटपुट को देखें। यदि यह एक प्रकार का मुद्दा था, तो विधि अब काम करनी चाहिए। अन्यथा, हमारे पास एक अलग मुद्दा है ...

+0

धन्यवाद इडान का पुनर्निर्माण करने की आवश्यकता भी हो सकती है। मैंने int से ऑब्जेक्ट में टाइप को बदलने में कोई फर्क नहीं पड़ता। मुझे समान त्रुटि मिली। – user2217751

+0

मुझे दृढ़ता से संदेह है कि यह एक्लिप्स/वर्कलाइट के साथ एक क्लासपाथ मुद्दा है। एक और दिलचस्प विवरण यह है कि मेरे डेवलपर्स में से एक कोड काम कर रहा था (जो अब हमारी परियोजना में अप्रचलित है) ने अपनी मशीन पर ठीक काम किया लेकिन मेरा कभी नहीं किया। मुझे अभी एहसास हुआ कि यह एक समान मुद्दा था। जावास्क्रिप्ट से ठीक से काम करने के लिए मुझे कोई भी जावा क्लास नहीं मिल सकती है। इस मुद्दे के बारे में इंटरनेट को खराब करने में, यह क्लासपाथ (या समान कॉन्फ़िगरेशन समस्या) के समान दिखता है जहां यह एक व्यक्ति की मशीन पर काम करता है लेकिन दूसरे पर नहीं। डब्ल्यूएल में कॉन्फ़िगरेशन की जांच करने के लिए कोई सुझाव? मैंने स्पष्ट रूप से कक्षापथ की जांच की है। – user2217751

+0

यहां एक और प्रश्न का एक लिंक है जो संबंधित (और अनसुलझा) लगता है: http://stackoverflow.com/questions/15826456/ecma-error-typeerror-cannot-call-property?rq=1 – user2217751

2

हमें उस समस्या को कई बार था और यह हमेशा भ्रष्ट ग्रहण के साथ कुछ करने के लिए था। प्रोजेक्ट फ़ाइल। क्या होता है कि आपके पास जावा क्लास नहीं बनाई गई है और आपकी वर्कलाइट.वर फ़ाइल में नहीं जुड़ी है। जब आप अपना ऐप तैनात करते हैं, तो संकलित कक्षा सर्वर पर गायब होती है और ईसीएमए त्रुटि आपको एक बहुत ही गुप्त तरीके से बताती है।

हमने पाया कि एक समाधान WL प्रोजेक्ट के गुणों को खोलने के लिए जावा बिल्ड पथ पर राइट क्लिक के साथ खोलना था और वहां बटनों का उपयोग करके कुछ प्रविष्टियों को ऊपर और नीचे ले जाना था। गुणों को बंद करने के बाद संवाद ग्रहण को प्रोजेक्ट फ़ाइल को फिर से लिखना चाहिए और निर्माण को काम करना चाहिए।

एक और चीज जिसे हमने कभी-कभी किया था, ग्रहण न्यू-क्लास विज़ार्ड का उपयोग करके परियोजना के प्रोजेक्ट/सर्वर/जावा भाग में एक नई कक्षा जोड़ना था, परियोजना को साफ और पुनर्निर्माण करना और फिर कक्षा को फिर से हटा देना था। हो सकता है कि विकल्प के साथ ग्रहण शुरू करें-स्टार्टअप स्ट्रिंग के अंत में स्केल करें जो इसका उपयोग करता है।

+0

धन्यवाद, मेरे लिए यह बना रहा था एक अस्थायी जावा क्लास जिसने इस मुद्दे को हल किया। –

0

ऊपर वर्णित इन सभी चीजों को आजमाने के बावजूद, मुझे इस त्रुटि के कारण काम करने वाला यह उदाहरण नहीं मिल सका। मैं ग्रहण 4.4, वर्कलाइट 6.2, वेबस्पेयर अनुप्रयोग सर्वर 8.5.5.1, जावा 1.7 का उपयोग कर रहा हूं। मैं एडाप्टर को राइट-क्लिक करके और रन एज़> वर्कलाइट प्रक्रिया को आमंत्रित करके चुन रहा था।

अंत में, मुझे प्रोजेक्ट बिल्ड पथ पर जेनरेट किए गए एडाप्टरर्स को स्पष्ट रूप से जोड़कर काम करना पड़ा। निर्माण पथ गुणों से: जेएआर जोड़ें ...> एडाप्टर/बिन/एडाप्टर.वर। केवल तभी काम करना शुरू कर दिया।

0

यह समस्या अक्सर मेरे साथ होती है जब भी मैं नई कार्यस्थलों पर नई परियोजनाएं खोलता हूं। मेरा मानना ​​है कि यहां प्रस्तावित समाधान सभी मामलों को शामिल नहीं करते हैं, इसलिए सभी की उपयोगिता के लिए, मैं यहां समस्या को हल करने के लिए मिले सभी संभावित समाधानों की सूची देता हूं:

1) जांचें कि चल रहे सर्वर का जावा संस्करण प्रोजेक्ट का वही है, जैसा कि here का उल्लेख किया गया है। मैं वर्कस्पेस गुणों में अन्य सभी स्थापित जेआरई को व्यक्तिगत रूप से हटा देता हूं। मैंने पाया कि कुछ मामलों में उन्हें एक ही मामूली संस्करण साझा करना चाहिए, उदाहरण के लिए यदि सर्वर 1.7.0 चलाता है तो आपके पास 1.7.4 9

2) जांचें कि कार्यस्थान का संकलक अनुपालन स्तर भी जांचें here का उल्लेख करते हुए, सर्वर द्वारा चलाए गए एक ही जावा संस्करण को फिट करता है। यही कारण है कि मुझे सबसे अधिक परेशानी होती है क्योंकि यह ऐसा कुछ है जिसे मैं अक्सर भूल गया था।

3) की जाँच .project फ़ाइल: के रूप में उल्लेख here

4) आम तौर पर इस 3 संकेत अपनी समस्याओं के साथ चले गए हैं, लेकिन पूर्णता के लिए के लिए मैं भी this hint है कि कुछ समझ में

5 हो सकता था जोड़ने) अंततः आपको सर्वर से पिछले "विकृत" एप्लिकेशन को हटाने और WAR

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