1

更新:質問 (以下、「元の質問」を参照) はまだ有効ですが、追加のデータがあります。servicesフィールドがインスタンス化されている文字列としてアクセス トークンをソース コードに挿入することで、アセットを正常に取得できました。つまり、これは機能します:

String token = "[mysecrettoken]";
try{
    connector = V1Connector
        .withInstanceUrl(V1_LOC)
        .withUserAgentHeader(APPLICATION_NAME, APPLICATION_VERSION)
        .withAccessToken(token)
        .build();
}

ただし、作成したクラスを使用して暗号化されたテキスト ファイルからトークンを取得すると、以下に指定したエラーで失敗します。

String token = TokenUtils.getAccessToken();

System.out.printlnトークンが完全に復号化されていることを視覚的に確認するために使用しました。によって返される復号化された文字列TokenUtils(これは正しいようです) が、ソース コードに直接含まれている場合、文字列とは異なるのはなぜですか?

元の質問:

私はGriffin のと同様の問題を抱えていますが、Java を使用しているため、これまでのところ根本的な原因を突き止めることができません。このプログラムの以前のバージョンでは VersionOne に正常に接続してアセットを取得できたことは注目に値しますが、そのコミットを取得して現在のアクセス トークン (コミット後に変更されたもの) で再試行すると、同じ結果が得られます。以下のようにエラー。

関連するメソッドは次のとおりです。services変数は、含まれているクラスのフィールドです。

private Asset findTeam(String teamName){

        assert teamName != null;

        Asset result = null;
        IAssetType assetType = services.getMeta().getAssetType("Team");
        Query query = new Query(assetType);
        IAttributeDefinition nameAttr = 
            assetType.getAttributeDefinition("Name");
        query.getSelection().add(nameAttr);

        try{
            QueryResult queryResult = services.retrieve(query);

            for (Asset team: queryResult.getAssets()){
                String str = team.getAttribute(nameAttr).getValue().toString();
                assert str != null;
                if (teamName.equals(str)){
                    result = team;
                    break;
                }
            }           
        }
        catch(Exception e){
            assert false;
            e.printStackTrace();
        }
        return result;

    }

結果のエラーは次のとおりです。

com.versionone.apiclient.exceptions.ConnectionException: 
HTTP/1.1 400 Bad Request error code: 400 VersionOne could not process the request.
    at com.versionone.apiclient.V1Connector.manageErrors(V1Connector.java:420)
    at com.versionone.apiclient.V1Connector.getData(V1Connector.java:368)
    at com.versionone.apiclient.MetaModel.createDocument(MetaModel.java:252)
    at com.versionone.apiclient.MetaModel.hookupAssetType(MetaModel.java:185)
    at com.versionone.apiclient.MetaModel.findAssetType(MetaModel.java:140)
    at com.versionone.apiclient.MetaModel.getAssetType(MetaModel.java:85)
    at com.billhorvath.v1mods.TeamModder.addToTeam(TeamModder.java:63)
    at com.billhorvath.v1mods.TeamModder.main(TeamModder.java:38)
com.versionone.apiclient.exceptions.MetaException: Error creating Document: Team
    at com.versionone.apiclient.MetaModel.createDocument(MetaModel.java:259)
    at com.versionone.apiclient.MetaModel.hookupAssetType(MetaModel.java:185)
    at com.versionone.apiclient.MetaModel.findAssetType(MetaModel.java:140)
    at com.versionone.apiclient.MetaModel.getAssetType(MetaModel.java:85)
    at com.billhorvath.v1mods.TeamModder.addToTeam(TeamModder.java:63)
    at com.billhorvath.v1mods.TeamModder.main(TeamModder.java:38)
Caused by: com.versionone.apiclient.exceptions.ConnectionException: 
HTTP/1.1 400 Bad Request error code: 400 VersionOne could not process the request.
    at com.versionone.apiclient.V1Connector.manageErrors(V1Connector.java:420)
    at com.versionone.apiclient.V1Connector.getData(V1Connector.java:368)
    at com.versionone.apiclient.MetaModel.createDocument(MetaModel.java:252)
    ... 5 more
Exception in thread "main" com.versionone.apiclient.exceptions.MetaException: Unknown AssetType: Team
    at com.versionone.apiclient.MetaModel.getAssetType(MetaModel.java:88)
    at com.billhorvath.v1mods.TeamModder.addToTeam(TeamModder.java:63)
    at com.billhorvath.v1mods.TeamModder.main(TeamModder.java:38)
Caused by: com.versionone.apiclient.exceptions.MetaException: Error creating Document: Team
    at com.versionone.apiclient.MetaModel.createDocument(MetaModel.java:259)
    at com.versionone.apiclient.MetaModel.hookupAssetType(MetaModel.java:185)
    at com.versionone.apiclient.MetaModel.findAssetType(MetaModel.java:140)
    at com.versionone.apiclient.MetaModel.getAssetType(MetaModel.java:85)
    ... 2 more
Caused by: com.versionone.apiclient.exceptions.ConnectionException: 
HTTP/1.1 400 Bad Request error code: 400 VersionOne could not process the request.
    at com.versionone.apiclient.V1Connector.manageErrors(V1Connector.java:420)
    at com.versionone.apiclient.V1Connector.getData(V1Connector.java:368)
    at com.versionone.apiclient.MetaModel.createDocument(MetaModel.java:252)
    ... 5 more

通常の検索に加えて、VersionOne Java APIのソース コードと400 エラー コードのRFC を確認しました。答えは見つかりませんでした。誰にも提案はありますか?

4

1 に答える 1

1

(バイナリ比較の提案については、Mark Irvinに感謝します。)

問題はトークンの暗号化方法に関係していたことが判明しました。トークンの長さは 30 文字であり、暗号アルゴリズム (この場合は AES) の要件で 32 バイトが要求されたため、暗号化中に 2 つの空白バイトが追加されました。暗号化プロセス。整数値が 0 の文字を文字列の末尾から削除するように復号化サイクルを変更しました。できます。

于 2015-07-16T20:36:32.993 に答える