代码之家  ›  专栏  ›  技术社区  ›  Michael

在Java中调用HealthVault GetThings方法

  •  0
  • Michael  · 技术社区  · 15 年前

    Java HealthVault API 在“脱机”模式下调用GetThings方法(也就是说,用户不必登录)以检索所有“文件”类型的项。据我所知,您只需发出脱机请求,即可获得用户帐户的Persion ID和Record ID。然而,即使我将这些添加到请求中,方法调用也不起作用。它在响应中返回错误代码“67”,根据API中的静态变量,它表示“无效的个人或组ID”。

    出于安全原因,我在下面的代码示例中将真人ID和记录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 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 回复  |  直到 15 年前
        1
  •  1
  •   jitter    15 年前

    另一个人通过这样做解决了这个错误。你已经试过了?

    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.
    
        2
  •  0
  •   Michael    15 年前

    问题是我的个人和记录ID实际上 不准确的我正在使用连接到网络时得到的 样品 拥有

    推荐文章