将String转换为java.net.URI

时间:2015-01-26 14:21:05

标签: java fedora-commons

首先道歉,我主要是做一些Java的Perl人。我已经阅读了一些文献,但无法通过这些文章给我签名:

    logger.debug("Entered addRelationships");
    boolean rval = true;
    for(int i=0;i<relationships.length;i++)
    {
        URI converted_uri ;
        try {
          converted_uri = new URI("relationships[i].datatype") ;
        } catch (URISyntaxException e) {
          logger.error("Error converting datatype", e);
          return rval = false ;
        }

        boolean r = addRelationship(context, relationships[i].subject,
                relationships[i].predicate, relationships[i].object,
                relationships[i].isLiteral, converted_uri);
        if(r==false)
        {
            rval = false;
        }
    }
    return rval;
}

产生的错误是:

addRelationship(org.fcrepo.server.Context,java.lang.String,java.lang.String,java.lang.String,boolean,java.lang.String) in org.fcrepo.server.management.DefaultManagement cannot be applied to (org.fcrepo.server.Context,java.lang.String,java.lang.String,java.lang.String,boolean,java.net.URI)

在我看来,converted_uri 是一个URI ?数据类型是上一版本中的String,因此不需要体操!

2 个答案:

答案 0 :(得分:3)

只需删除qoutes:

converted_uri = new URI(relationships[i].datatype) ;

当你使用引号时,就像在perl中一样,你正在处理字符串文字。如果你想引用变量,你必须直接在代码中提及它。

答案 1 :(得分:1)

虽然@AlexR在您的代码中指出了另一个问题,但这并不是您在问题中发现问题的原因。

您遇到编译错误,URI语法中的错误只会在运行时显示,就像@AlexR识别的那样。

您遇到的问题是您尝试传递URI作为最后一个参数,但方法addRelationship期望String作为最后一个参数。这就是错误所说的。

(错误的第一部分说明了方法的签名实际上是什么,因为你看到它以java.lang.String结束,而错误的第二部分说明了你试图给出的数据类型方法,如你所见,以java.net.URI

结束

所以看起来URI并没有像你预期的那样改变;它仍然需要一个字符串。

解决方案是将您的代码更改为:

boolean rval = true;
for(int i = 0; i < relationships.length; i++)
{
    boolean r = addRelationship(context, relationships[i].subject,
            relationships[i].predicate, relationships[i].object,
            relationships[i].isLiteral, relationships[i].datatype);
    if (!r)
    {
        rval = false;
    }
}
return rval;