0

Я пытаюсь опубликовать некоторые данные из моего собственного приложения для Android.PUT HTTP-адаптер в платформе MobileFirst

Native Code:

WLProcedureInvocationData invocationData = new WLProcedureInvocationData("TaskAdapter", "updateTask"); 

int taskId = Integer.parseInt(tvTaskId.getText().toString()); 

String assignedTo = tvAssignedTo.getText().toString(); 

String address = ""; 

String description = ""; 

String latitude = "5.0"; 

String longitude = "5.0"; 

String status = "5.0"; 
String comments = "5.0"; 
String lastupdate = "5.0"; 
String userLatitude = "5.0"; 
String userLongitude = "5.0"; 
String userLocation = "5.0"; 
String photoData = "5.0"; 

Object[] parameters = new Object[]{ 
    taskId, 
    assignedTo, 
    description, 
    address, 
    latitude, 
    longitude, 
    status, 
    comments, 
    lastupdate, 
    userLatitude, 
    userLongitude, 
    userLocation, 
    photoData 
}; 

invocationData.setParameters(parameters); 

WLRequestOptions options = new WLRequestOptions(); 
options.setTimeout(30000); 


client.getInstance().invokeProcedure(invocationData, new MyInvokeListener(), options); 

Adapter Код:

function updateTask(id) { 
    var input = { 
     method : 'PUT', 
     returnedContentType : 'json', 
     path : '/Api/Task?taskid=' + id 
    }; 


    return WL.Server.invokeHttp(input); 
} 

Адаптер XML:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
Licensed Materials - Property of IBM 
5725-I43 (C) Copyright IBM Corp. 2011, 2013. All Rights Reserved. 
US Government Users Restricted Rights - Use, duplication or 
disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
--> 
<wl:adapter name="TaskAdapter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:wl="http://www.ibm.com/mfp/integration" xmlns:http="http://www.ibm.com/mfp/integration/http"> 

    <displayName>TaskAdapter</displayName> 
    <description>TaskAdapter</description> 
    <connectivity> 
     <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> 
      <protocol>http</protocol> 
      <domain>testmeternative.vdot.virginia.gov</domain> 
      <port>80</port> 
      <connectionTimeoutInMilliseconds>30000</connectionTimeoutInMilliseconds> 
      <socketTimeoutInMilliseconds>30000</socketTimeoutInMilliseconds> 
      <maxConcurrentConnectionsPerNode>50</maxConcurrentConnectionsPerNode> 

      <!-- Following properties used by adapter's key manager for choosing specific 
       certificate from key store <sslCertificateAlias></sslCertificateAlias> <sslCertificatePassword></sslCertificatePassword> --> 
     </connectionPolicy> 
    </connectivity> 

    <procedure name="getAllTasks" /> 
    <procedure name="updateTask" /> 


</wl:adapter> 

Я не су Я отправляю тело правильно. Более того, как мне отправить id (параметр) на функцию адаптера.

Когда я нажимаю вызовы мобильных Первого адаптера в затмении, он показывает мне имя процедуры, но остальной тип вызова, как GET в ниспадающем, я хочу это как PUT.

+0

Ваш вопрос очень запутанным. 1) Если вы хотите использовать «put», то в чем смысл «сообщения» в сводке вопросов? 2) что это пустое "" в объекте параметров? 3) что такое «id»? –

+0

Hi Idan, Исправлены мои изменения .. пустым "" в объекте параметра я передаю пустую строку для address.I хочу передать taskid в строке запроса и объект задачи как тело.Поэтому я подумал о создании функции адаптера, которая принимает идентификатор параметра как идентификатор задачи. – user3681378

+0

. Часть вашего eclipse, вероятно, зависит от XML-адаптера, пожалуйста, покажите нам это. На первый взгляд ваша успешная идентификация задачи хорошо, вы должны иметь возможность передавать какой-либо примитивный тип в качестве параметра. Однако вы передаете много параметров, но только ожидаете получить их. – djna

ответ

1

Вам нужно будет обновить свой код адаптера следующим образом:

function updateTask(id, assignedTo, description, address, latitude, longitude, 
     status, comments, lastupdate, userLatitude, userLongitude, 
     userLocation, photoData) { 

    var data = { 
     "assignedTo" : assignedTo, 
     "description" : description, 
     "address" : address, 
     "latitude" : latitude, 
     "longitude" : longitude, 
     "status" : status, 
     "comments" : comments, 
     "lastupdate" : lastupdate, 
     "userLatitude" : userLongitude, 
     "userLocation" : userLocation, 
     "photoData" : photoData 
    }; 

    var input = { 
     method : 'PUT', 
     returnedContentType : 'json', 
     path : '/Api/Task?taskid=' + id, 
     body : { 
      contentType : 'application/json', 
      content : data 
     } 
    }; 

    return WL.Server.invokeHttp(input); 
} 

Поскольку вы передаете значение к адаптеру через invocationData.setParameters(parameters); в родном коде, что означает, что адаптер будет принимать то же количество параметров в такой же заказ.

Я создал объект data, который будет содержать все эти значения, кроме id или taskId, поскольку вы передаете его как параметр запроса. Затем я предполагаю, что ваши вспомогательные службы принимают Content-Type из application/json, при необходимости вы можете изменить тип содержимого.

+1

Большое спасибо, отлично справился с любой проблемой ... – user3681378

1

Убедитесь, что вы различаете, как приложение вызывает адаптер и как адаптер вызывает сервер - это отдельные концепции.

В более ранних версиях адаптеров MFP/Worklight были использованы HTTP GET; сами адаптеры могут вызывать бэкэнд с помощью GET, PUT или POST, но приложение эффективно создает RPC-вызов через HTTP.

С MFP версии 7.0 мы получаем возможность создавать RESTful-адаптер, который можно вызвать с помощью GET, PUT, POST или DELETE. Эти адаптеры реализованы на Java с использованием модели программирования JAX/RS. Каждая отдельная процедура будет отмечена как использование одного из этих «глаголов» HTTP, а затем, когда вы тестируете в Eclipse, когда вы выбираете процедуру, предлагается соответствующий GET/PUT/POST. В вашем примере у вас есть простой традиционный JavaScript-адаптер, поэтому он может использовать только GET, и это то, что предлагает тестовый инструмент.

Чтобы вызвать адаптер Java RESTful, вы указываете глагол. See this tutorial:

Чтобы увидеть, как создать RESTful адаптер Java see this tutorial

Смежные вопросы