字符串无法转换为 javax.jcr.Value
String cannot be cast to javax.jcr.Value
当我尝试使用以下代码为 JCR 节点设置属性时,出现以下错误 String cannot be cast to javax.jcr.Value
。
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);
我相信你可以直接使用javax.jcr.Node#setProperty(java.lang.String, java.lang.String)
。事实上,它接受 String 作为值。
您的代码中的问题与字符串或值无关,而是您尝试插入对象,也许将对象转换为字符串,然后设置 属性
当我尝试使用以下代码为 JCR 节点设置属性时,出现以下错误 String cannot be cast to javax.jcr.Value
。
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);
我相信你可以直接使用javax.jcr.Node#setProperty(java.lang.String, java.lang.String)
。事实上,它接受 String 作为值。
您的代码中的问题与字符串或值无关,而是您尝试插入对象,也许将对象转换为字符串,然后设置 属性