Преобразование строки в java.net.URI

Первые извинения, я в основном человек на Perl, занимающийся Java. Я прочитал некоторую литературу, но не могу получить это, чтобы дать мне подпись, которая мне нужна:

    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)

Мне кажется, что convert_uri - это URI в конце этого? datatype был String в предыдущем выпуске, поэтому никакой гимнастики не требовалось!

2 ответа

Просто удалите qoutes:

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

Когда вы используете кавычки, точно так же, как в perl, вы имеете дело со строковым литералом. Если вы хотите сослаться на переменную, вы должны указать это непосредственно в коде.

Хотя @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;
Другие вопросы по тегам