JCR在运行时查找强制属性

时间:2010-11-09 08:16:08

标签: java jackrabbit jcr

我是一个java开发者。而我现在面对的是jackrabbit v.1.6.4。现在,我的目标之一是在基于web的jcr浏览器中创建节点,所以当我必须创建具有强制属性的节点时,Exception约束违规就是抛出。

我的问题是存在一种方式,在运行时创建期间获取强制属性?例如,为它们分配一些默认值,并且能够保存节点。

一个非常好的事情是让PropDef的实例形成NodeTypeDef,但是从Node接口我只能得到PropertyDefinition,在我看来这是无用的。

非常感谢All

度过愉快的一天

学家

3 个答案:

答案 0 :(得分:1)

所以这段代码完全符合我的要求,我将提供给其他用户。

无论如何,非常感谢所有

                Node parent = (Node)session.getItem(path);//Jcr path to the parent node

                Node added = parent.addNode(newNodeName);//Add new node


                Workspace workspace = session.getWorkspace();                   
                NodeTypeManager ntMgr = workspace.getNodeTypeManager();

                NodeTypeRegistry ntReg=null;
                try {
                    ntReg = ((NodeTypeManagerImpl) ntMgr).getNodeTypeRegistry();
                } catch (ClassCastException e) {
                    e.printStackTrace();
                }

                NameFactory nameFactory = NameFactoryImpl.getInstance();
                Name namejcr = nameFactory.create(type);

                EffectiveNodeType effnodetype = ntReg.getEffectiveNodeType(namejcr);



                //Here i get all the property definition for this type of node, so from here i
                //can know which of them are mandatory
                PropDef[] pdefs = effnodetype.getAllPropDefs();

答案 1 :(得分:0)

要确定某个属性是否受到保护,您可以执行以下操作:

PropertyDefinition propDef = property.getDefinition();
boolean isProtected = propDef.isProtected();

或者尝试沿着这些行来确定节点类型是否允许将某个属性设置为某个值:

Workspace workspace = session.getWorkspace(); 
NodeTypeManager ntMgr = wsp.getNodeTypeManager();
NodeType nt = ntMgr.getNodeType("nodeTypeName");
boolean canSet = nt.canSetProperty("propName", value);

答案 2 :(得分:0)

当然有一段时间了,

Oak 可用。

但今天你可以使用以下内容:

javax.jcr.Property prop = xyz;
boolean isMandatoryProperty = prop.getDefinition().isMandatory();