Преобразование строки в 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;