Sorry for popping in. JCR-2003 indicates that you access the repository
via some kind of remoting (most likely DavEx) and that a method is
involved which is not (yet) implemented in one of the involved remoting
layers. See https://issues.apache.org/jira/browse/JCR-2003.
Michael
On 3/8/10 4:59 PM, Birmingham, Steven wrote:
Thanks again, It compiles and runs now but I get the same result as when I
tried the cndImporter; java.lang.UnsupportedOperationException: JCR-2003.
Implementation missing. I am still running the standalone jar and will switch
over to the war file when I get time and see if all is better.
Steve
-----Original Message-----
From: Stefan Guggisberg [mailto:[email protected]]
Sent: Monday, March 08, 2010 3:06 AM
To: [email protected]
Subject: Re: NodeType creation
On Fri, Mar 5, 2010 at 9:20 PM, Birmingham, Steven
<[email protected]> wrote:
Thanks Stefan,
Yeah, I just looked through the message archives and saw the CndImporter
example and gave it a try. I tried using the CompactNodeTypeDefReader as you
suggested. It worked as far reading the cnd file, but the
NodeTypeManager.registerNodeTypes() is expecting an array of NodeTypeDefinition
not QNodeTypeDefinition[]. I saw a method to create QNodeTypeDefinitions out
of NodeTypeDefinitions but have not found a way to do vice versa.
sorry, i didn't notice it.
o.a.jackrabbit.spi.commons.nodetyp.NodeTypeDefinitionFactory should do
the trick.
http://jackrabbit.apache.org/api/2.0/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeDefinitionFactory.html
here's a sample i put together and which should help get you started:
////////////////////////////////////////////////////////////////////////////////
import org.apache.jackrabbit.commons.NamespaceHelper;
import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
import org.apache.jackrabbit.commons.cnd.ParseException;
import org.apache.jackrabbit.spi.QNodeTypeDefinition;
import org.apache.jackrabbit.spi.commons.namespace.NamespaceMapping;
import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
import org.apache.jackrabbit.spi.commons.namespace.SessionNamespaceResolver;
import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefinitionFactory;
import org.apache.jackrabbit.spi.commons.nodetype.QDefinitionBuilderFactory;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeTypeDefinition;
import javax.jcr.nodetype.NodeTypeIterator;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class NodeTypeImporter {
public static NodeTypeIterator registerNodeTypesFromCND(Session session,
InputStream in,
boolean
allowUpdate)
throws IOException, RepositoryException {
Map<String, String> namespaceMap = new HashMap<String, String>();
List<QNodeTypeDefinition> qNTDefs = new
ArrayList<QNodeTypeDefinition>();
NamespaceResolver nsResolver = new SessionNamespaceResolver(session);
try {
NamespaceMapping mapping = new NamespaceMapping(nsResolver);
CompactNodeTypeDefReader<QNodeTypeDefinition,
NamespaceMapping> reader =
new CompactNodeTypeDefReader<QNodeTypeDefinition,
NamespaceMapping>(
new InputStreamReader(in), "cnd input stream", mapping,
new QDefinitionBuilderFactory());
namespaceMap.putAll(mapping.getPrefixToURIMapping());
for (QNodeTypeDefinition ntDef: reader.getNodeTypeDefinitions()) {
qNTDefs.add(ntDef);
}
} catch (ParseException e) {
IOException e2 = new IOException(e.getMessage());
e2.initCause(e);
throw e2;
}
new NamespaceHelper(session).registerNamespaces(namespaceMap);
List<NodeTypeDefinition> ntDefs =
new NodeTypeDefinitionFactory(session).create(qNTDefs) ;
return session.getWorkspace().getNodeTypeManager().registerNodeTypes(
ntDefs.toArray(new NodeTypeDefinition[ntDefs.size()]),
allowUpdate);
}
}
////////////////////////////////////////////////////////////////////////////////
cheers
stefan
Steve
-----Original Message-----
From: Stefan Guggisberg [mailto:[email protected]]
Sent: Friday, March 05, 2010 2:39 AM
To: [email protected]
Subject: Re: NodeType creation
On Thu, Mar 4, 2010 at 5:33 PM, Birmingham, Steven
<[email protected]> wrote:
Thanks for the input Stefan. I looked up your suggestion and tried using
CndImporter
erm, i don't think that i suggested using CndImporter...
i suggested using CompactNodeTypeDefReader to generate
NodeTypeDefinitions from your
cnd-style definitions. those NodeTypeDefinition objects can then be
passed on to the
JCR 2.0 method NodeTypeManager.registerNodeTypes() which should be available
on jcr-rmi and jcr2spi clients.
you can find some code here, starting at line 232:
http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java?revision=816551&view=markup
cheers
stefan
which threw the exception JCR-2003. Implementation missing. So, are you saying
the implementation is missing from the StandAlone server but would be available
from the embedded war file?
InputStream is =
getClass().getClassLoader().getResourceAsStream("test.cnd");
Reader cnd = new InputStreamReader(is);
NodeType[] nodeTypes = CndImporter.registerNodeTypes(cnd,
session);
Steve
-----Original Message-----
From: Stefan Guggisberg [mailto:[email protected]]
Sent: Thursday, March 04, 2010 3:46 AM
To: [email protected]
Subject: Re: NodeType creation
On Thu, Mar 4, 2010 at 12:43 AM, Birmingham, Steven
<[email protected]> wrote:
I built and added jackrabbit-core-2.0.0.jar to the build path, but
JackRabbitNodeTypeManager is still unresolved. Yes, I was trying to do an
evaluation on the standalone server. So, are you saying NodeType management in
2.0 is not available in the standalone server?
no, that's not what i am saying ;)
i said that the method for registering node types defined in a CND or
XML format
might not be available on a remote client (such as jcr-rmi or jcr2spi).
said method is specified in the jackrabbit-api, which is an extension
to the jcr api.
the jcr 2.0 api does not provide a method for registering node types
declared in CND
or XML format. it only allows to build and register node type
definitions programmatically, see e.g.
http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/nodetype/NodeTypeManager.html#registerNodeTypes(javax.jcr.nodetype.NodeTypeDefinition[],%20boolean)
you can use CompactNodeTypeDefReader (jcr-commons) to bridge the gap.
CompactNodeTypeDefReader allows you to parse a CND file returning
NodeTypeDefinitions
which can be registered using the jcr 2.0 api.
cheers
stefan
I will download the 2.0 war file and see if things work differently on Tomcat.
I am a little confused as there is documentation on the 2.0 website for
NodeType management but I guess it is incomplete?
Thanks for your help,
Steve
-----Original Message-----
From: Stefan Guggisberg [mailto:[email protected]]
Sent: Wednesday, March 03, 2010 1:30 PM
To: [email protected]
Subject: Re: NodeType creation
On 03.03.2010, at 19:01, "Birmingham, Steven"
<[email protected]> wrote:
Thanks for the response.
JackrabbitNodeTypeManager is not on the class path either. I have
all the 2.0 jars on the class path.
For jackrabbitNodeTypeManagerImpl I get three implementations on the
classpath:
//import org.apache.jackrabbit.jcr2spi.nodetype.NodeTypeManagerImpl;
//import
org.apache.jackrabbit.ocm.nodemanagement.impl.jackrabbit.NodeTypeManagerImpl;
import
org.apache.jackrabbit.ocm.nodemanagement.impl.jeceira.NodeTypeManagerImpl;
Does NodeType registration work for you in 2.0?
yes
JackrabbitNodeTypeManager is included in jackrabbit-core, which is
missing from your dependencies list.
are you accessing a stand-alone jackrabbit server? if yes, you might
be out of luck since the said method is only available on a local,
i.e. embedded instance.
cheers
stefan
Here are my dependencies.
<dependency org="org/apache" name="log4j" rev="1.2+"
conf="compile"/>
<dependency org="javax.jcr" name="jcr" rev="2.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-jcr-
commons" rev="2.0.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-jcr2dav"
rev="2.0.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-jcr2spi"
rev="2.0.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-spi"
rev="2.0.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-spi2dav"
rev="2.0.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-spi-
commons" rev="2.0.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-webdav"
rev="2.0.0" conf="compile"/>
<dependency org="org/apache/jackrabbit" name="jackrabbit-jcr-
server" rev="2.0.0" conf="compile"/>
<dependency org="org/apache" name="commons-httpclient"
rev="3.0.1" conf="compile"/>
<dependency org="org/apache" name="commons-codec" rev="1.3"
conf="compile"/>
<dependency org="org/apache" name="commons-logging" rev="1.1.1"
conf="compile"/>
<dependency org="org/apache" name="commons-collections" rev="3.2"
conf="compile"/>
<dependency org="org/slf4j" name="slf4j-api" rev="1.5.2"
conf="compile"/>
<dependency org="org/slf4j" name="slf4j-log4j12" rev="1.5.2"
conf="compile"/>
Steve
-----Original Message-----
From: Stefan Guggisberg [mailto:[email protected]]
Sent: Wednesday, March 03, 2010 10:44 AM
To: [email protected]
Subject: Re: NodeType creation
On Wed, Mar 3, 2010 at 5:25 PM, Birmingham, Steven
<[email protected]> wrote:
Hello,
I am trying to read a NodeType configuration from an xml file. The
example I used was from the ocm test classes.
jackrabbitNodeTypeManagerImpl.createNodeTypesFromConfiguration
(session,
new FileInputStream("./resources/
Signal.xml"));
Exception in thread "main" java.lang.NoClassDefFoundError: org/
apache/jackrabbit/core/nodetype/xml/NodeTypeReader
I have jcr-2.0.jar and all the other jackrabbit bundles on the
class path. Am I somehow missing a jar or is this method not
supported anymore or changed?
try this:
http://jackrabbit.apache.org/api/2.0/org/apache/jackrabbit/api/JackrabbitNodeTypeManager.html#registerNodeTypes(java.io.InputStream,%20java.lang.String)
e.g.
((JackrabbitNodeTypeManager)
session.getNodeTypeManager()).registerNodeTypes(new
FileInputStream("./resources/Signal.xml"),
JackrabbitNodeTypeManager.TEXT_XML);
cheers
stefan
Thanks,
Steve
________________________________
This e-mail and any files transmitted with it may be proprietary
and are intended solely for the use of the individual or entity to
whom they are addressed. If you have received this e-mail in error
please notify the sender.
Please note that any views or opinions presented in this e-mail are
solely those of the author and do not necessarily represent those
of ITT Corporation. The recipient should check this e-mail and any
attachments for the presence of viruses. ITT accepts no liability
for any damage caused by any virus transmitted by this e-mail.