0

Java HealthVault APIを使用して GetThings メソッドを「オフライン」モード (つまり、ユーザーがログインする必要はありません) で呼び出して、すべての「ファイル」タイプの項目を取得しようとしています。私の理解では、オフライン リクエストを行うために必要なのは、ユーザー アカウントの Persion ID と Record ID だけです。ただし、これらをリクエストに追加しても、メソッド呼び出しは機能しません。応答でエラー コード「67」を返します。これは、API の静的変数によると、「無効な個人またはグループ ID」を表します。

個人 ID とレコード ID を再確認しましたが、確かに正しいです。「オンライン」モード (つまり、user-auth-token を含める場合) で同じ要求を行うと、完全に正常に機能します。私のアプリケーションは、すべての「ファイル」項目タイプへのオフライン アクセスを許可するように構成されているため、アクセスの問題になることはありません。

セキュリティ上の理由から、以下のコード サンプルでは、​​実際の個人 ID とレコード ID を偽物に置き換えました。

ここに私の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>

手伝ってくれてどうもありがとう。:)

4

2 に答える 2

1

他の人が実行してエラーを解決しました。あなたはすでにこれを試しましたか?

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.
于 2009-10-21T17:39:20.263 に答える
0

問題は、個人 ID とレコード ID が実際に間違っていたことでした。自分のアプリケーションではなく、サンプルアプリケーションに接続しているときに取得したものを使用していました。アプリケーション間で変更されることを知りませんでした。自分のアプリケーションから GetPersonInfo を呼び出した後、正しい個人 ID とレコード ID を取得できました。

于 2009-10-23T14:30:02.783 に答える