java - 检索并分配 jcr:mixinTypes magnolia 中的多值属性
问题描述
当我尝试在 magnolia 中获取多值属性时出现错误,因为我将它分配给 String 类型。如何正确读取单值和多值属性(因为两者都存在)?
javax.jcr.ValueFormatException: property /wcmstest/de/search/jcr:mixinTypes 是一个多值属性,所以它的值只能在 org.apache.jackrabbit.core.PropertyImpl.internalGetValue(PropertyImpl.java :483) at org.apache.jackrabbit.core.PropertyImpl.getValue(PropertyImpl.java:510) at org.apache.jackrabbit.core.PropertyImpl.getString(PropertyImpl.java:520) at info.magnolia.jcr.wrapper。 DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info .magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 ch.uzh.module.versioning.CreateNestedMap.nestedMap(CreateNestedMap.java:32) 在 ch.uzh.module.versioning.ContextLoggerCommand .execute(ContextLoggerCommand.java:78) 位于 info.magnolia.commands.MgnlCommand.executeSynchronized(MgnlCommand.java:80) 位于 info.magnolia.commands.MgnlCommand.execute(MgnlCommand.java:69) 位于 info.magnolia.commands。链.ChainBase.execute(ChainBase.java:101) 在 info.magnolia.commands.DelegateCommand.execute(DelegateCommand.java:66) :ContextLoggerCommand.execute(ContextLoggerCommand.java:78) 在 info.magnolia.commands.MgnlCommand.executeSynchronized(MgnlCommand.java:80) 在 info.magnolia.commands.MgnlCommand.execute(MgnlCommand.java:69) 在 info.magnolia.commands .chain.ChainBase.execute(ChainBase.java:101) 在 info.magnolia.commands.DelegateCommand.execute(DelegateCommand.java:66) :ContextLoggerCommand.execute(ContextLoggerCommand.java:78) 在 info.magnolia.commands.MgnlCommand.executeSynchronized(MgnlCommand.java:80) 在 info.magnolia.commands.MgnlCommand.execute(MgnlCommand.java:69) 在 info.magnolia.commands .chain.ChainBase.execute(ChainBase.java:101) 在 info.magnolia.commands.DelegateCommand.execute(DelegateCommand.java:66) :
这是我正在使用的代码:
HashMap<String, Object> map = new LinkedHashMap<>();
PropertyIterator pi;
try {
pi = node.getProperties();
//Get properties for the root node
while(pi.hasNext())
{
Property p = pi.nextProperty();
String name = p.getName();
String val = p.getString();
map.put(name,val);
}//end of while for properties of root node
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
解决方案
感谢@reporter 和一些反复试验。这是一个working solution
.
HashMap<String, Object> map = new LinkedHashMap<>();
PropertyIterator pi;
try {
pi = node.getProperties();
//Get properties for the root node
while(pi.hasNext())
{
Property p = pi.nextProperty();
String name = p.getName();
String val;
//determine if property is multi-value
if (p.isMultiple()) {
//multi-value property
val=p.getValues().toString();
} else {
//single-value property
val = p.getValue().getString();
}
map.put(name,val);
}//end of while for properties of root node
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
推荐阅读
- keras - SparseTopKCategoricalAccuracy 和 SparseCategoricalAccuracy 之间有什么区别?
- laravel - Laravel 7:交易后如何使用 Paypal 重定向到成功页面?
- angular - 如何在 Angular: 9.0.1 中使用 *ngfor 从顶部的最新日期开始对订单进行排序
- firebase - 如何从自定义域提供 firebase 功能?
- javascript - 收到错误:ValueError:检查输入时出错:预期 conv3d_Conv3D1_input 有 5 个维度。但得到了形状为 97,1 的数组
- windows - Windows 批量复制以根据部分名称将文件夹分类到文件夹中
- batch-file - 如何在批处理文件中编辑文本结果
- python-3.x - 为什么我的 on_message 事件不起作用(discord.py)
- ocaml - 在 Windows 64 上使用 opam 安装 tsdl 时构建 conf-pkg-config 2 的问题
- c# - 如何修复从这个生成器代码中得到的返回错误?