creation d'arboressence de noeud

cancel
Showing results for 
Search instead for 
Did you mean: 
debutant_alfres
Member II

creation d'arboressence de noeud

bonjour
j'ai ecrit un programme qui permet de creer un noeud qui a un contenu (le contenu est un fichier xml), apres je cree un noeud fils qui lui a son tour  a un contenu (tjr de type xml) , le programme cree le noeud pere ,mais il ne cree pas le noeud fils:

voici le code

public class AddNodeWithJCR {

   /**
    * @param args
    */
   public static void main(String[] args) throws Exception {
      
      // access the Alfresco JCR Repository (here it's via programmatic approach, but it could also be injected)
       ApplicationContext context = new ClassPathXmlApplicationContext("classpath:alfresco/application-context.xml");
       Repository repository = (Repository)context.getBean("JCR.Repository");
   
       // login to workspace (here we rely on the default workspace defined by JCR.Repository bean)
       Session session = repository.login(new SimpleCredentials("admin", "alfrescoadmin".toCharArray()));
      // TODO Auto-generated method stub
      
       try
       {
           // first, access the company home
           Node rootNode = session.getRootNode();
           Node companyHome = rootNode.getNode("app:company_home");
   
           // create the content node
           String name = "RM4";
           Node content = companyHome.addNode("cm:" + name, "cm:content");
           content.setProperty("cm:name", name);

           // add titled aspect (for Web Client display)
           content.addMixin("cm:titled");
           content.setProperty("cm:title", name);
           content.setProperty("cm:description", name);

           //
           // write some content to new node
           //
           ClassPathResource resource = new ClassPathResource("org/alfresco/sample/jcr/wikiModel.xml");
            content.setProperty("cm:content", resource.getInputStream());
                 
           
           //
           // To set the content mime type, we need to use an Alfresco native service
           // as there isn't an equivalent call in JCR
           //
         //  setMimeType(context, content, MimetypeMap.MIMETYPE_TEXT_PLAIN);

           // save changes
           session.save();
       }
       finally
       {
           session.logout();
           //System.exit(0);
       }
      
      
       try {
    // login to workspace (here we rely on the default workspace defined by JCR.Repository bean)
        session = repository.login(new SimpleCredentials("admin", "alfrescoadmin".toCharArray()));
       
        // access a RM node directly from root node (by path and by UUID)
         Node rootNode = session.getRootNode();
         Node section = rootNode.getNode("app:company_home/cm:RM4");
        
         // create the section node
           String name = "Section";
           Node sectionNode = section.addNode("cm:" + name, "cm:content");
           sectionNode.setProperty("cm:name", name);
          
        // add titled aspect (for Web Client display)
           sectionNode.addMixin("cm:titled");
           sectionNode.setProperty("cm:title", name);
           sectionNode.setProperty("cm:description", name);
          
           // write some content to new node
           //
           ClassPathResource resource = new ClassPathResource("org/alfresco/sample/jcr/wiki-context.xml");
            sectionNode.setProperty("cm:content", resource.getInputStream());
       }
       finally
       {
          session.logout();   
       }
        
        
   }

}

voici l'erreur

Exception in thread "main" javax.jcr.RepositoryException: 04310001 Cannot determine child association for node type '{http://www.alfresco.org/model/content/1.0}content within parent workspace://SpacesStore/b1c0521a-0cca-4303-a810-47cd59c2a299: 04310001 Cannot determine child association for node type '{http://www.alfresco.org/model/content/1.0}content within parent workspace://SpacesStore/b1c0521a-0cca-4303-a810-47cd59c2a299
   at org.alfresco.jcr.util.JCRProxyFactory$SessionContextInvocationHandler.invoke(JCRProxyFactory.java:169)
   at $Proxy131.addNode(Unknown Source)
   at org.alfresco.sample.jcr.AddNodeWithJCR.main(AddNodeWithJCR.java:121)
Caused by: org.alfresco.error.AlfrescoRuntimeException: 04310001 Cannot determine child association for node type '{http://www.alfresco.org/model/content/1.0}content within parent workspace://SpacesStore/b1c0521a-0cca-4303-a810-47cd59c2a299
   at org.alfresco.jcr.item.NodeImpl.getNodeTypeChildAssocDefForParent(NodeImpl.java:277)
   at org.alfresco.jcr.item.NodeImpl.addNode(NodeImpl.java:183)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.alfresco.jcr.util.JCRProxyFactory$SessionContextInvocationHandler.invoke(JCRProxyFactory.java:132)
   … 2 more
org.alfresco.error.AlfrescoRuntimeException: 04310001 Cannot determine child association for node type '{http://www.alfresco.org/model/content/1.0}content within parent workspace://SpacesStore/b1c0521a-0cca-4303-a810-47cd59c2a299
   at org.alfresco.jcr.item.NodeImpl.getNodeTypeChildAssocDefForParent(NodeImpl.java:277)
   at org.alfresco.jcr.item.NodeImpl.addNode(NodeImpl.java:183)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.alfresco.jcr.util.JCRProxyFactory$SessionContextInvocationHandler.invoke(JCRProxyFactory.java:132)
   at $Proxy131.addNode(Unknown Source)
   at org.alfresco.sample.jcr.AddNodeWithJCR.main(AddNodeWithJCR.java:121)

merci pour votre aide
5 Replies
cleseach
Active Member II

Re: creation d'arboressence de noeud

Bonjour,

L'erreur est indiquée ici :
Cannot determine child association

Vous essayez de créer une association parent-fils entre deux noeuds de type cm:content.
Vérifiez le modèle de données avant d'essayer de faire des choses compliquées comme cela.

Cordialement,
Charles Le Seac'h
debutant_alfres
Member II

Re: creation d'arboressence de noeud

bonjour,
merci pour votre reponse cleseach
dans ce programme je me suis inspirer de l'exemple "WIKIExample" donnés dans les sdk d'alfresco
le seul medel de donnés est celui la

<model name="wiki:wikimodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <imports>
      <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
      <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" />
   </imports>

   <namespaces>
      <namespace uri="http://www.alfresco.org/model/jcr/example/wiki/1.0" prefix="wiki" />
   </namespaces>

   <types>

      <type name="wiki:page">
         <title>WIKI Page</title>
         <parent>cm:content</parent>
         <properties>
            <property name="wiki:restrict">
               <type>d:boolean</type>
               <default>false</default>
            </property>
            <property name="wiki:category">
               <type>d:text</type>
               <multiple>true</multiple>
            </property>
         </properties>
         <mandatory-aspects>
            <aspect>cm:titled</aspect>
         </mandatory-aspects>
      </type>
     
    </types>

</model>

que dois-je faire exactement??

j'ai lu dans un cours alfresco qu'il existe un autre type d'association autre que celle de pere/fils
je pense elle s'appele source/target
dans mon cas est ce que cette association va me servir??

merci d'avance pour votre aide

Cordialement
cleseach
Active Member II

Re: creation d'arboressence de noeud

Bonjour,

A partir du moment où vous utilisez des cm:content, il est nécsesaire de s'intéresser à contentModel.xml qui fait parti du standard (vous le trouverez dans <webapps>/alfresco/WEB-INF/classes/alfresco/model).

Il existe bien deux types d'associations. Dans votre cas, vous exprimez le besoin d'un noeud "fils"; vous devez donc utiliser une child-association.
Pour mettre tout cela en musique, il va faloir définir votre modèle de données dans lequel vous allez créer, par exemple, un aspect qui apportera l'association à votre noeud père.

… mais ce ne sont que quelques idées à la lecture de votre post. Ce sont vos besoins qui vont définir le meilleur modèle à utiliser.

Cordialement,
Charles Le Seac'h
debutant_alfres
Member II

Re: creation d'arboressence de noeud

bonjour et merci our la reponse,

moi en fait ce que je veu exactement c'est d'avoir un fichier xml qui s'appele RM avec des entités qui pointe des fichiers xml qui s'appele section,et chaque section est composé de plusieur chapitre ces derniers aussi sont des fichier xml, et chaque chapitre possede un fichier xml qui s'appele IU et un IU peut avoir un lien vers une image,
j'essai de scematiser un peu :

RM.xml
          |__Sections.xml
                       |_________Chapitres.xml
                                                |__________IU
                                                                                                      
en ce qui concerne le modele de données je comprend pas bien parceque je suis vraiement debutant sur alfresco

merci d'avance
cleseach
Active Member II

Re: creation d'arboressence de noeud

Bonjour,

Pour démarrer avec le modèle de données : http://wiki.alfresco.com/wiki/Data_Dictionary_Guide

Il faut "jouer" un peu avec, se créer des exemples simples pour en comprendre les mécanismes avant de se lancer dans une réalisation plus audacieuse ;-)

Cordialement,
Charles Le Seac'h