Hi:
I have defined a mixin data type. I can't seem to be able to set a value for a
property defined in this mixin. My nodes have primary type "nt:folder". See
sample code below:
<raw>
session = repository.login(new SimpleCredentials("admin",
"admin".toCharArray()));
try {
NamespaceRegistry registry =
session.getWorkspace().getNamespaceRegistry();
List<String> list = Arrays.asList(registry.getPrefixes());
if (!list.contains("my")) {
registry.registerNamespace("my",
"http://test.com/friend");
}
NodeTypeManager manager =
session.getWorkspace().getNodeTypeManager();
NodeTypeTemplate nodeType = manager.createNodeTypeTemplate();
nodeType.setMixin(true);
nodeType.setName("my:friendly");
nodeType.setQueryable(true);
nodeType.setDeclaredSuperTypeNames(new
String[]{"mix:referenceable"});
PropertyDefinitionTemplate propertyDef =
manager.createPropertyDefinitionTemplate();
propertyDef.setName("my:IsFriendOf");
propertyDef.setMultiple(true);
propertyDef.setRequiredType(PropertyType.REFERENCE);
propertyDef.setOnParentVersion(OnParentVersionAction.COPY);
propertyDef.setProtected(false);
nodeType.getPropertyDefinitionTemplates().add(propertyDef);
manager.registerNodeType(nodeType, true);
final Node rootNode = session.getRootNode();
Node joe = null;
if (rootNode.hasNode("joe")) {
joe = rootNode.getNode("joe");
} else {
joe = rootNode.addNode("joe", "nt:folder");
joe.addMixin("my:friendly");
}
Node jane = null;
if (rootNode.hasNode("jane")) {
jane = rootNode.getNode("jane");
} else {
jane = rootNode.addNode("jane", "nt:folder");
jane.addMixin("my:friendly");
}
joe.setProperty("my:IsFriendOf", jane);
session.save();
} finally {
session.logout();
}
</raw>
When I run the above code I get this exception:
<raw>
javax.jcr.nodetype.ConstraintViolationException: no matching property
definition found for {http://test.com/friend}IsFriendOf
at
org.apache.jackrabbit.core.nodetype.EffectiveNodeType.getApplicablePropertyDef(EffectiveNodeType.java:782)
at
org.apache.jackrabbit.core.NodeImpl.getApplicablePropertyDefinition(NodeImpl.java:836)
at
org.apache.jackrabbit.core.NodeImpl.getOrCreateProperty(NodeImpl.java:399)
at
org.apache.jackrabbit.core.NodeImpl$SetPropertyOperation.perform(NodeImpl.java:2013)
at
org.apache.jackrabbit.core.NodeImpl$SetPropertyOperation.perform(NodeImpl.java:1960)
at
org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:1882)
at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:1939)
at
com.cht.member.MemberAuthorizationServiceBean.multiValueRefOnFolder(MemberAuthorizationServiceBean.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.java:1009)
at
com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:65)
at
com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:113)
at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCallback(SystemInterceptorProxy.java:138)
at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.init(SystemInterceptorProxy.java:120)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:964)
at
com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:65)
at
com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:393)
at
com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:376)
at
com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:526)
... 26 more
</raw>
My environment is:
1- GlassFish Server Open Source Edition 3.1.1 (build 12)
2- Repository is JackRabbit 2.3.4
Any help?
Thanks