2013-01-08 14 views
9

मैं ट्रिडियन 2011 एसपी 1 कोर सेवा से कनेक्ट करने के लिए एक एंड्रॉइड ऐप विकसित कर रहा हूं। अब तक मैंने wsclient का उपयोग कर कोर सेवा wsdl से एंड्रॉइड डब्ल्यूएस स्टब्स बनाए हैं।एक एंड्रॉइड क्लाइंट से ट्रिडियन कोर सेवा से कनेक्ट करने में असमर्थ

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

मैं अब एंड्रॉयड आवेदन के माध्यम से Tridion को प्रमाणित कर सकते हैं लेकिन जैसे ही मैं getApiVersion() के रूप में भी सबसे वेब सेवा कॉल के बुनियादी, इस तरह के प्रदर्शन करने के लिए प्रयास करते हैं, मैं त्रुटि मिलती है:

ReflectionHelper*java.lang.NoSuchFieldException: GetApiVersionResult.

मैं सोच रहा था क्या कोई और जावा एंड्रॉइड ऐप बनाने में कामयाब रहा है जो कोर सेवा के साथ संचार करता है?

दिलचस्प रूप से पर्याप्त है, अगर मैं जावा एप्लिकेशन के रूप में कोड चलाता हूं, तो wsimport स्टब्स का उपयोग करके सबकुछ एक इलाज करता है।

किसी भी मदद की सराहना की।

Tridion से कनेक्ट करने के लिए::

class TridionConnect extends AsyncTask<String, Integer, String> { 
    // Called to initiate the background activity 

    @Override 
    protected String doInBackground(String... statuses) { 
    try { 
     Authenticator.setDefault(new Authenticator() { 
     @Override 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("username", "password".toCharArray()); 
     } 
     }); 

     url = new URL("http://tridion-server/webservices/CoreService2011.svc?wsdl"); 

     System.out.println(String.format("Get Service")); 
     service = new CoreService2011(); 
     System.out.println(String.format("Get Client")); 

     client = service.getBasicHttp(); 

     return "Authenticated To Tridion"; 
    } catch (Exception e) { 
     Log.e("Authentication failure", e.toString()); 
     e.printStackTrace(); 
     return "Failed to authenticate"; 
    } 
    } 

    // Called when there's a status to be updated 
    @Override 
    protected void onProgressUpdate(Integer... values) { 
    super.onProgressUpdate(values); 
    // Not used in this case 
    } 

    // Called once the background activity has completed 
    @Override 
    protected void onPostExecute(String result) { // 
    Toast.makeText(FullscreenActivity.this, result, Toast.LENGTH_LONG).show(); 
    area.setText("Authenticated to Tridion OK"); 
    } 
} 

ApiVersion

client.getApiVersion(); 
UserData currentUser = client.getCurrentUser(); 
System.out.println(String.format("'%s' %s", currentUser.getTitle(), currentUser.getId())); 
+1

हाय एलन, सामान्य रूप से 'log.e'' पर पूरा अपवाद पारित करना और 'toString' नहीं': 'Log.e ("TridionConnect", "प्रमाणीकरण विफलता", ई); ' –

+0

I बस देखें कि आपने पहले ही कहा है कि कोड एक नियमित कार्यक्रम में ठीक काम करता है। उस स्थिति में, यह वास्तविक जेवीएम/जेआरई और दलविक के बीच एक अंतर हो सकता है। लेकिन आपकी समस्या को पुन: उत्पन्न किए बिना, मैं निश्चित नहीं हो सकता। –

+0

अब मैं इस निष्कर्ष पर आ रहा हूं कि ऊपर वर्णित अनुसार यह संभव नहीं है। मेरे पास एक वैकल्पिक समाधान है जिसे मैं अब जांच कर रहा हूं। –

उत्तर

1

फ्रैंक पाने के लिए,

यह कारणों की एक जोड़ी के लिए संभव नहीं है संदर्भ यहाँ के लिए एक कोड का टुकड़ा है ।

यदि आप कोरस सर्विस प्रॉक्सी बनाने के लिए wsimport का उपयोग करते हैं तो यह जेएआरएक्स लाइब्रेरी का उपयोग करेगा, जो जेआरई में मौजूद है। हालांकि Dalvik javax लाइब्रेरी का केवल एक सबसेट लागू करता है जिसका अर्थ है कि एंड्रॉइड पर्यावरण में यह दृष्टिकोण असंभव है।

फिर मैंने प्रॉक्सी बनाने के लिए Ksoap2 टूल को देखा। यह ठीक काम करता प्रतीत होता था, जितना अधिक उसने प्रॉक्सी बनाया था, हालांकि यह कोरस सर्विस से मेल नहीं खाता था इसलिए मैं प्रमाणित करने में असमर्थ था। जेआरई प्रॉक्सी बनाम Ksoap2 प्रॉक्सी की जांच से परे मुझे इस दृष्टिकोण के साथ आगे नहीं मिला। वे काफी अलग थे।

इस बिंदु पर मैंने एक कदम वापस लिया, एक कप चाय थी और दृष्टिकोण को फिर से इंजीनियर किया।

मैंने एंड्रॉइड ऐप और कोर सेवा के बीच बैठने के लिए एक सी # आरईएसटी सेवा बनाई।

यह दृष्टिकोण थोड़ा जटिल लग रहा था, लेकिन यह बहुत सारे फायदे प्रदान करता है। आरईएसटी सेवा में बहुत सारे काम किए जा सकते हैं, जो टैबलेट या फोन पर समान कोड से बहुत तेज होगा।

दूसरी बार आरईएसटी सेवा सीएमएस/कोर सेवा के समान सर्वर पर बैठती है ताकि कॉमर्स तेज हो और आप एंड्रॉइड ऐप से आरईएसटी अनुरोधों को बहुत हल्का कर सकें।

मुझे उस बिंदु पर एप्लिकेशन मिला है जहां आप ट्रिडियन को प्रमाणीकृत कर सकते हैं, एक प्रकाशन का चयन कर सकते हैं, और घटकों को अद्यतन/सहेज/प्रकाशित करने के लिए तैयार गतिशील लेआउट में प्रस्तुत किया जाता है।

इस दृष्टिकोण का एक बड़ा नकारात्मक पक्ष यह है कि आरईएसटी सेवा 'स्टेटस' होना चाहिए, इसलिए अधिसूचनात्मक रूप से आपको हर अनुरोध के लिए कोरस सर्विस को प्रमाणित करना होगा। बेशक मैं ऐसा नहीं करता, लेकिन आपको कुछ वैकल्पिक दृष्टिकोण ओथ, साझा रहस्य आदि के साथ आना होगा।

प्रारंभिक परीक्षणों में यह दृष्टिकोण एंड्रॉइड डिवाइस पर काफी हद तक लग रहा है।

+1

हाय बार्ट, मैंने 51 प्रस्ताव क्षेत्र के लिए प्रतिबद्ध किया। जब हमने संस्करण 5.1 पर थे तो मैंने ट्रिडियन विकास शुरू किया और एकमात्र संसाधन ट्रिडियन मंच और समर्थन विभाग था। यह बहुत समय है कि हमारे पास सभी चीजों के लिए सार्वजनिक रूप से उपलब्ध संसाधन था। –

+0

जोसेन केन से ऊपर की दोनों टिप्पणियां वास्तव में मुझसे हैं .... मेरी पत्नी ने स्पष्ट रूप से मेरे लैपटॉप का उपयोग किया। एक तरफ, जब तक यह बेकिंग से संबंधित न हो, उसकी कोई सलाह न लें! –

+0

आपको इसे उत्तर के रूप में चिह्नित करना चाहिए, इससे दूसरों को अपना रास्ता खोजने में मदद मिलेगी ... –

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