首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么VersionOne不识别资产类型?

为什么VersionOne不识别资产类型?
EN

Stack Overflow用户
提问于 2015-07-16 18:33:16
回答 1查看 335关注 0票数 1

更新:问题(以下;见“原始问题”)仍然有效,但我还有其他数据。我成功地检索了一个资产,方法是将访问令牌作为字符串放入源代码中,在其中实例化services字段。也就是说,这起作用是:

代码语言:javascript
复制
String token = "[mysecrettoken]";
try{
    connector = V1Connector
        .withInstanceUrl(V1_LOC)
        .withUserAgentHeader(APPLICATION_NAME, APPLICATION_VERSION)
        .withAccessToken(token)
        .build();
}

但是,当我使用创建的类从加密的文本文件中检索令牌时,它会失败,出现下面指定的错误。

代码语言:javascript
复制
String token = TokenUtils.getAccessToken();

我使用System.out.println在视觉上验证令牌是否被完全解密。为什么TokenUtils返回的解密字符串(似乎是正确的)与直接包含在源代码中的字符串有任何不同?

原题:

我遇到了与格里芬氏类似的问题,但我使用的是Java,到目前为止我无法找出根本原因。值得注意的是,该程序的早期版本成功地连接到VersionOne并检索资产,但当我检索该提交并使用当前访问令牌(自提交后已更改)再次尝试该提交时,我得到的错误如下所示。

下面是相关的方法;services变量是包含类的字段:

代码语言:javascript
复制
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;

    }

下面是由此产生的错误:

代码语言:javascript
复制
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的源代码以及400错误码的RFC;我没有找到任何答案。有人有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-16 20:36:32

(对于二进制比较建议,请向马克·欧文提示。)

事实证明,这个问题与令牌的加密方式有关:因为令牌有30个字符长,密码算法(在本例中是AES)的要求是32字节,因此在加密过程中追加了两个空白字节。我修改了解密周期,去掉了字符串末尾整数值为0的字符,以及wallah!它起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31461932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档