Не удалось подключиться к Tridion Core Service с Android-клиента

Я разрабатываю приложение для Android для подключения к Tridion 2011 SP1 Core Service. До сих пор я создал Android WS Stubs из основного сервиса wsdl с помощью wsclient.

Импортировали эти заглушки, которые позволяют получить доступ ко всем основным методам обслуживания.

Теперь я могу пройти аутентификацию в Tridion через приложение Android, но как только я попытаюсь выполнить даже самые основные вызовы веб-сервисов, такие как getApiVersion() , я получаю ошибку:

ReflectionHelper * java.lang.NoSuchFieldException: GetApiVersionResult.

Мне было интересно, кому-нибудь еще удалось создать приложение java для Android, которое взаимодействует с Core Service?

Интересно, что если я запускаю код как приложение java, использование 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())); 

Solutions Collecting From Web of "Не удалось подключиться к Tridion Core Service с Android-клиента"

Франк,

Это невозможно по нескольким причинам.

Если вы используете wsimport для создания прокси-сервера coreservice, он будет использовать библиотеку javax, которая существует в JRE. Однако Dalvik реализует только подмножество библиотеки javax, что означает, что такой подход в среде Android невозможен.

Затем я посмотрел на инструменты Ksoap2 для создания прокси. Казалось, что это работает нормально, поскольку он создал прокси-сервер, однако он не соответствовал серверу, поэтому я не смог аутентифицироваться. Я не стал больше разбираться в этом подходе, не рассматривая прокси-сервер JRE v Ksoap2 proxy. Они были совсем другими.

В этот момент я сделал шаг назад, выпил чашку чая и перепроектировал подход.

Я создал службу AC # REST, чтобы сидеть между приложением android и основным сервисом.

Этот подход казался немного сложным, но он предлагает множество преимуществ. Большая часть работы с лопатой может быть выполнена в службе REST, которая будет намного быстрее, чем аналогичный код на планшете или телефоне.

Во-вторых, служба REST находится на том же сервере, что и CMS / CoreService, поэтому связь быстрее и вы можете сделать запросы REST от приложения Android значительно легче.

У меня есть приложение к точке, где вы можете аутентифицировать Tridion, выбрать публикацию и компоненты, которые затем отображаются в динамическом макете, готовом для обновления / сохранения / публикации.

Единственным недостатком такого подхода является то, что служба REST должна «быть» без апатридов, поэтому вы должны аутентифицироваться в coreservice для каждого запроса. Конечно, я этого не делаю, но вы должны придумать альтернативный подход Oauth, общий секрет и т. Д.

В начальных тестах этот подход казался довольно гладким на устройстве Android.