Строка не может быть приведена к javax.jcr.Value - PullRequest
1 голос
/ 09 января 2020

Я получаю следующую ошибку String cannot be cast to javax.jcr.Value, когда пытаюсь установить свойства для узла JCR, используя следующий код. Javax.jcr.Node.setProperty (String name, Value value) ожидает значение для параметра «value», но приведение не работает.

// using for-each loop for iteration over Map.entrySet() 
for (Entry<String, Object> entry : map.entrySet()) { 
    try {
        //fetch the value of uuid mapped to the key "jcr:uuid"
        String uuid= (String) map.get("jcr:uuid");
        //get the JCR workspace session value for website
        Session session = MgnlContext.getJCRSession(RepositoryConstants.WEBSITE);
        //get the JCR node specified by the given identifier
        Node node = session.getNodeByIdentifier(uuid);

        //verify if the value for the specific value is of type HashMap
        //this means we have a nested map which denotes another node
        if (entry.getValue() instanceof HashMap ) {
            System.out.println("New node: " + entry.getKey());
            //Creates a new node at relPath of the specified node type
            node.addNode(entry.getKey(),NodeTypes.Page.NAME);
            //initializes a new map that points to the nested map
            HashMap<String , Object> newmap = (HashMap<String, Object>) entry.getValue();
            //recursion happens here
            loadMap(newmap);

        } else {
            //Sets the single-value property for all entries to the specified value.

            node.setProperty(entry.getKey(), (Value)entry.getValue()); ---> *error here*
            System.out.println("Key = " + entry.getKey() + 
                            ", Value = " + entry.getValue()); 
        }       
    } catch (ItemNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (RepositoryException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Вот решение благодаря @ Ducaz035

String value= (String)entry.getValue();
node.setProperty(entry.getKey(), value);

1 Ответ

2 голосов
/ 09 января 2020

Я считаю, что вы можете использовать javax.jcr.Node#setProperty(java.lang.String, java.lang.String) напрямую. Фактически, он принимает String как значение.

Проблема в вашем коде не в String или Value, но вы пытаетесь вставить Object, возможно, приведите Object к String, а затем установите свойство

...