Вызов метода HealthVault GetThings в Java
Я пытаюсь использовать API-интерфейс Java HealthVault для вызова метода GetThings в "автономном" режиме (то есть пользователю не нужно входить в систему) для получения всех элементов типа "Файл". Из того, что я понимаю, все, что вам нужно, чтобы сделать запрос в автономном режиме, это Persion ID и Record ID учетной записи пользователя. Однако, хотя я добавляю их в запрос, вызов метода не работает. В ответе возвращается код ошибки "67", который в соответствии со статической переменной в API означает "недопустимый идентификатор пользователя или группы".
Я дважды проверил личность и записи, и они действительно верны. Выполнение одного и того же запроса в режиме "онлайн" (т. Е. При включении токена пользователя) работает отлично. Мое приложение настроено так, чтобы разрешить автономный доступ ко всем типам элементов "Файл", поэтому это не может быть проблемой доступа.
В целях безопасности я заменил настоящие идентификаторы личности и идентификаторы записей на поддельные в приведенных ниже примерах кода:
Вот мой код 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);
Запрос XML, который он генерирует:
<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>
Ответ XML, который я получаю:
<?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>
Спасибо большое за вашу помощь.:)
2 ответа
Оказывается, проблема заключалась в том, что мои идентификаторы личности и записи были неверными. Я использовал те, которые я получил при подключении к образцу приложения, в отличие от моего собственного приложения. Я не знал, что они изменились между приложениями. После звонка в GetPersonInfo из моего собственного приложения я смог получить правильные идентификаторы личности и записи.
Какой-то другой парень решил ошибку, сделав. Вы уже пробовали это?
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.