ODataクライアントをApache olingoで開発しています。資格情報にはネイティブ文字が含まれており、「Authorization」ヘッダーのBase64エンコード用にUTF-8で読む必要があります。 行くための最初の方法は、標準ではOlingoによって示唆された。Apache olingo基本認証エンコーディングの問題
EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(endpointURI, ContentType.JSON);
client.getConfiguration().setHttpClientFactory(new BasicAuthHttpClientFactory(username, password));
しかしOlingoは、Base64エンコーディングのためのUS-ASCII文字セットの「ユーザー名」と「パスワード」のバイトを読み込むので、それは、私のために動作しませんしませんでした、と私のユーザー名は???に変わります。 HTTPクライアントレベルでは、org.apache.http.impl.auth.BasicSchemeFactoryに文字セットを渡す方法がありますが、Olingoレベルでカスタマイズする方法はありませんでした。
私の第二の試みは、生のヘッダ追加された:
URI searchURI = client.newURIBuilder(endpointURI)
.appendEntitySetSegment(segment)
.top(10)
.addQueryOption(QueryOption.FORMAT, "json")
.build();
ODataEntitySetRequest<ClientEntitySet> request = client.getRetrieveRequestFactory().getEntitySetRequest(searchURI);
String auth = Base64.encodeBase64String(String.format("%s:%s", username, password).getBytes(StandardCharsets.UTF_8));
request.addCustomHeader("Authorization", "Basic "+ auth);
ODataRetrieveResponse<ClientEntitySet> response = request.execute();
をしかしOlingoが実際request.executeコールの下で2つのHTTPリクエストを送信し、それが表示されます。最初のデータはデータ用で、ヘッダを含んでおり、認可を渡してデータを返します。しかし、2番目の要求はAuthorizationヘッダーのないメタデータであり、401 Unauthorizedを返します。したがって、最終結果は例外です。 基本認証を追加する方法が必要です。 (Olingoが常にレスポンスオブジェクトの構築にそれを使用する場合は、可能ではない可能性があります)