2015-01-26 2 views
1

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

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 в конце этого? datatype был String в предыдущем выпуске, поэтому никакой гимнастики не требовалось!

ответ

3

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

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

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

+0

Спасибо за это, я не был уверен, работали ли они таким же образом. –

+0

Все языки программирования одинаковы ... Ну, кроме закрытия :) – AlexR

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; 
+0

Привет, Эрвин, Спасибо, мой плохой, я «читал» сообщение об ошибке не так, думал: '(org.fcrepo.server.Context, java .lang.String, java.lang.String, java.lang.String, boolean, java.net.URI) 'была сигнатурой метода, а не данными. Что-то не так, но у меня есть успешный компилятор с использованием 'String.valueOf (отношения [i] .datatype)' на данный момент. Затем я могу более внимательно посмотреть. –