jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Guggisberg <stefan.guggisb...@gmail.com>
Subject Re: NodeType creation
Date Mon, 08 Mar 2010 10:06:10 GMT
On Fri, Mar 5, 2010 at 9:20 PM, Birmingham, Steven
<Steven.Birmingham@itt.com> 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:stefan.guggisberg@gmail.com]
> Sent: Friday, March 05, 2010 2:39 AM
> To: users@jackrabbit.apache.org
> Subject: Re: NodeType creation
>
> On Thu, Mar 4, 2010 at 5:33 PM, Birmingham, Steven
> <Steven.Birmingham@itt.com> 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:stefan.guggisberg@gmail.com]
>> Sent: Thursday, March 04, 2010 3:46 AM
>> To: users@jackrabbit.apache.org
>> Subject: Re: NodeType creation
>>
>> On Thu, Mar 4, 2010 at 12:43 AM, Birmingham, Steven
>> <Steven.Birmingham@itt.com> 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:stefan.guggisberg@gmail.com]
>>> Sent: Wednesday, March 03, 2010 1:30 PM
>>> To: users@jackrabbit.apache.org
>>> Subject: Re: NodeType creation
>>>
>>>
>>>
>>> On 03.03.2010, at 19:01, "Birmingham, Steven"
>>> <Steven.Birmingham@itt.com> 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:stefan.guggisberg@gmail.com]
>>>> Sent: Wednesday, March 03, 2010 10:44 AM
>>>> To: users@jackrabbit.apache.org
>>>> Subject: Re: NodeType creation
>>>>
>>>> On Wed, Mar 3, 2010 at 5:25 PM, Birmingham, Steven
>>>> <Steven.Birmingham@itt.com> 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.
>>>>>
>>>
>>
>

Mime
View raw message