0

Je suis en train de publier des données de mon application Android native.PUT HTTP Adapter dans MobileFirst Platform

code natif:

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); 

code Adaptateur:

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


    return WL.Server.invokeHttp(input); 
} 

XML Adapter:

<?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> 

Je ne suis pas su si je suis en train d'envoyer le corps de la bonne façon. De plus, comment envoyer le id (paramètre) à la fonction d'adaptateur.

Lorsque je clique Call Mobile Premier adaptateur en éclipse, il me montre le nom de la procédure, mais le type d'appel REST comme GET dans le menu déroulant, je le veux comme PUT.

+0

Votre question est très déroutant. 1) Si vous voulez utiliser "put", alors quel est le sens du "post" dans le résumé de la question? 2) qu'est ce que ce vide "" dans l'objet paramètres? 3) Qu'est-ce que "id"? –

+0

Salut Idan, Correction de mes changements .. le vide "" dans l'objet paramètre est que je passe une chaîne vide pour l'adresse. Je veux passer taskid dans la chaîne de requête et l'objet de la tâche en tant que corps.J'ai donc pensé à créer une fonction d'adaptateur qui prend l'ID de paramètre comme ID de tâche – user3681378

+0

La partie eclipse de votre question dépend probablement de l'adaptateur XML, veuillez nous le montrer. Au premier coup d'œil, le passage de la tâche Id est bon, vous devriez pouvoir passer n'importe quel type primitif comme paramètre. Cependant, vous passez beaucoup de paramètres, mais vous n'en attendez qu'un seul. – djna

Répondre

1

Vous devez mettre à jour votre code de carte comme suit:

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); 
} 

Puisque vous passez les valeurs à l'adaptateur via invocationData.setParameters(parameters); dans votre code natif qui signifie que l'adaptateur prendra le même nombre de paramètres dans la même ordre.

J'ai créé un objet data qui contiendra toutes ces valeurs sauf le id ou le taskId puisque vous le transmettez comme paramètre de requête. Ensuite, je suppose que vos services back-end accepte un Content-Type de application/json, vous pouvez changer le type de contenu si besoin est.

+1

Merci beaucoup, travaillé très bien avec n'importe quel problème ... – user3681378

1

Assurez-vous de faire la distinction entre la façon dont votre application appelle l'adaptateur et la manière dont l'adaptateur appelle le serveur - ce sont des concepts distincts.

Dans les versions antérieures des adaptateurs MFP/Worklight ont été invoqués, utilisez HTTP GET; les adaptateurs eux-mêmes peuvent alors avoir invoqué le backend avec GET, PUT ou POST, mais l'application faisait effectivement un appel RPC sur HTTP. Avec MFP version 7.0, nous avons la possibilité de créer un adaptateur RESTful, qui peut être appelé à l'aide de GET, PUT, POST ou DELETE. Ces adaptateurs sont implémentés en Java en utilisant le modèle de programmation JAX/RS. Chaque procédure individuelle sera marquée comme utilisant un de ces "verbes" HTTP, et lorsque vous testez dans Eclipse lorsque vous sélectionnez la procédure, le GET/PUT/POST approprié est offert. Dans votre exemple, vous avez un simple adaptateur JavaScript traditionnel et vous ne pouvez donc utiliser que GET et c'est ce que propose l'outil de test.

Pour invoquer un adaptateur Java RESTful, vous spécifiez le verbe. See this tutorial:

Pour voir comment créer un adaptateur Java RESTful see this tutorial