Java — нулевая проверка на currentNode

Я новичок в Java, так что терпите меня. У меня есть небольшой фрагмент кода, который проверяет, имеет ли currentNode свойство "fileReference" и возвращает его значение. За исключением того, что моя проверка нуля не работает, потому что, если в fileReference ничего нет, я получаю сообщение об ошибке. Если ссылка на fileReference существует, она работает нормально. Вот ошибка:

Caused by: javax.jcr.PathNotFoundException: fileReference

Вот мой код:

    if(currentNode != null){
        NodeIterator checkNode = currentNode.getNodes();

        while (checkNode.hasNext()) {
            Node imageNode = checkNode.nextNode();
            printNodeTitle = imageNode.getProperty("fileReference").getString();
        }
    } 

       public String getImageNode() { (printNodeTitle != null) ? return printNodeTitle : return ""; }

Любая помощь приветствуется!


person Delmon Young    schedule 10.05.2013    source источник
comment
Куда ты звонишь getImageNode()? Я предполагаю, что вы строите недопустимый путь, превращая null в пустую строку.   -  person Ron Dahlgren    schedule 11.05.2013
comment
getImageNode - это просто геттер, который я вызываю, не уверен, что вы подразумеваете под преобразованием нуля в пустую строку.   -  person Delmon Young    schedule 11.05.2013


Ответы (2)


Я вполне уверен, что fileReference на самом деле является свойством, а не отдельным узлом (поскольку вы вызываете свойства). Поскольку вы знаете имя свойства, которое хотите получить, я предлагаю получить его напрямую с небольшой проверкой, если оно существует.

if(currentNode != null){
    NodeIterator checkNode = currentNode.getNodes();

    while (checkNode.hasNext()) {
        Node imageNode = checkNode.nextNode();
        if(imageNode.hasProperty("fileReference")){
            Property fileReferenceProp = imageNode.getProperty("fileReference");
            printNodeTitle = fileReferenceProp.getString();
        }
    }
} 

Я предполагаю, что вы имеете дело с возможными исключениями репозитория в другом месте

person 3xil3    schedule 11.05.2013
comment
Вот это да! спасибо @3xil3 сработало как шарм. Ваш правильный fileReference на самом деле является свойством. Спасибо за помощь! - person Delmon Young; 11.05.2013
comment
Это действительно правильно, то, чего не хватало Делмону, можно найти в javadocs JCR по адресу day.com/maven/jsr170/javadocs/jcr-2.0/javax/jcr/ : getProperty генерирует исключение PathNotFoundException, если по указанному пути не существует свойства. или если текущий сеанс не имеет доступа для чтения к указанному свойству. Поэтому вам нужно заранее проверить, существует ли свойство. - person Bertrand Delacretaz; 15.05.2013

Я не эксперт по sling, но попробуйте это

if(currentNode != null){
    NodeIterator checkNode = currentNode.getNodes();

    while (checkNode.hasNext()) {
        Node imageNode = checkNode.nextNode();
        Iterator<Node> fileReferences = imageNode.getProperties("fileReference");
        if(fileReferences.hasNext()) { // You might want to improve this
            printNodeTitle = fileReference.next().getString(); // You might want to improve it
        }
    }
} 

Вы получаете все узлы с помощью getProperties(String), если узлы не найдены и получен пустой Iterator.

Строка Node fileReference... я просто угадал тип (Node) надо поменять.

person ssedano    schedule 10.05.2013
comment
Спасибо за ответ @ssedano, ваша правильная ссылка на файл — это узел. Но по какой-то причине я все еще получаю ту же ошибку, мне непонятно, почему это не сработает. - person Delmon Young; 11.05.2013