2009-10-21 6 views
0

J'essaie d'utiliser le Java HealthVault API pour appeler la méthode GetThings en mode "offline" (ce qui signifie que l'utilisateur n'a pas besoin de se connecter) pour récupérer tout le type "File" articles. D'après ce que je comprends, tout ce dont vous avez besoin pour faire une demande hors ligne est l'ID Persion et l'ID d'enregistrement du compte de l'utilisateur. Cependant, même si je les ajoute à la demande, l'appel de méthode ne fonctionne pas. Il renvoie le code d'erreur "67" dans la réponse, ce qui, selon une variable statique dans l'API, signifie "ID de personne ou de groupe invalide".Appel de la méthode HealthVault GetThings en Java

J'ai vérifié les ID de personne et d'enregistrement et ils sont corrects. Faire la même requête en mode "en ligne" (c'est-à-dire en incluant un jeton d'authentification d'utilisateur) fonctionne parfaitement. Mon application est configurée pour autoriser l'accès hors connexion à tous les types d'éléments "Fichier", ce qui ne constitue donc pas un problème d'accès.

J'ai remplacé le vrai ID personne et enregistrement ID avec des faux dans les exemples de code ci-dessous pour des raisons de sécurité:

Voici mon code Java:

StringBuilder requestXml = new StringBuilder(); 
requestXml.append("<info><group>"); 
requestXml.append("<filter><type-id>bd0403c5-4ae2-4b0e-a8db-1888678e4528</type-id></filter>"); 
requestXml.append("<format><section>core</section><section>otherdata</section><xml/></format>"); 
requestXml.append("</group></info>"); 

Request request = new Request(); 
request.setMethodName("GetThings"); 
request.setOfflineUserId("e2f925e7-2748-4d88-bz48-32036dc10020"); 
request.setRecordId("73ab2792-5481-43eb-837c-67d1e3337300"); 
request.setInfo(requestXml.toString()); 

Connection connection = ConnectionFactory.getConnection(); 
HVAccessor accessor = new HVAccessor(); 
accessor.send(request, connection); 

La requête XML génère:

<wc-request:request xmlns:wc-request="urn:com.microsoft.wc.request"> 
    <auth> 
     <hmac-data algName="HMACSHA1">5WdiBnTvxsNbVHg134ggIETlJNE=</hmac-data> 
    </auth> 
    <header> 
     <method>GetThings</method> 
     <method-version>1</method-version> 
     <record-id>73ab2792-5481-43eb-837c-67d1e3337300</record-id> 
     <auth-session> 
      <auth-token>ASAAAJQ1R50J8HpMshAjeHkjh/habVgM17BjSBuA/GmbJPV9A9d63mramakSZxf+ZHZh+7xWllTWGhAijBvxhNxauzBLci1IWWh+JDbGQZabnWbG7YH28ZP+FQuRPNP4T8O1NTNCFNETao0ly+UuPjWEZWCV5cCPX7GjaEJ4BMAFv4vAOEwIOe63VWntfzH9r3Rz0VnHAhb400iqs1XxlJrRbgXdNRdg</auth-token> 
      <offline-person-info> 
       <offline-person-id>e2f925e7-2748-4d88-bz48-32036dc10020</offline-person-id> 
      </offline-person-info> 
     </auth-session> 
     <language>en</language> 
     <country>US</country> 
     <msg-time>2009-10-21T12:37:51.706-04:00</msg-time> 
     <msg-ttl>180000</msg-ttl> 
     <version>0.0.0.1</version> 
     <info-hash> 
      <hash-data algName="SHA1">oAZVXLGAUMfuVPrqjqb98yCb4/c=</hash-data> 
     </info-hash> 
    </header> 
    <info> 
     <group> 
      <filter> 
       <type-id>bd0403c5-4ae2-4b0e-a8db-1888678e4528</type-id> 
      </filter> 
      <format> 
       <section>core</section> 
       <section>otherdata</section> 
       <xml /> 
      </format> 
     </group> 
    </info> 
</wc-request:request> 

La réponse XML je reviens:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <status> 
     <code>67</code> 
     <error> 
      <message>Exception of type 
       'Microsoft.Health.Platform.WildcatStatusException' was thrown.</message> 
     </error> 
    </status> 
</response> 

Merci beaucoup pour votre aide. :)

Répondre

0

Transforme le problème était que ma personne et les ID d'enregistrement en fait étaient incorrectes. J'utilisais ceux que j'ai eu lors de la connexion à l'application exemple, par opposition à mon propre application. Je ne savais pas qu'ils ont changé d'une application à l'autre. Après avoir appelé GetPersonInfo à partir de ma propre application, j'ai pu obtenir les ID de personne et d'enregistrement corrects.

1

Un autre gars a résolu l'erreur en faisant. Vous avez déjà essayé cela?

I got the error cleared up. I re-imported the certificate (found in the cert 
folder) through the Healthvault Application Manager, cleared up the offline.txt 
file and re-ran the application. 
+0

Merci pour la suggestion. On dirait que c'était un problème de certificat avec lui. J'ai essayé de recréer mon keystore (j'utilise Java ... il utilisait probablement .NET), mais cela n'a pas aidé. J'utilise le même keystore pour le mode "en ligne" et n'ai aucun problème. – Michael

Questions connexes