cancel
Showing results for 
Search instead for 
Did you mean: 

[help] added forum data by web service, but can not view

leon
Champ in-the-making
Champ in-the-making
I use web service to add data to Alfresco as post of a topic in forum of a Node. there is sth unusal in the server, and I can not view the topic in the web client-UI of Alfresco
but I can not check where is  the error.
   the following section is some message of my application .I sincincely request your help…

server console prompts :

message when add the Node:

16:56:14,484 WARN  [org.alfresco.repo.node.integrity.IntegrityChecker] Found 1 integrity violations:
  The association child multiplicity has been violated:
   Association: Association[ class=ClassDef [ name={http://www.alfresco.org/model/forum/1.0}discussable], name={http://www.alfresco.org/model/forum/1.0}discussion, target class={http://www.alfresco.org/model/forum/1.0}forum, source role=null, target role=null]
   Required child Multiplicity: 1..1
   Actual child Multiplicity: 0
   AssocTypeQName = {http://www.alfresco.org/model/forum/1.0}discussion
   sourceNodeRef = 4c5b13ad-cacb-11da-95ba-993a183228c0
 

message when view in web client:

   javax.faces.el.EvaluationException: Exception while invoking expression #{ForumsBean.discuss}
   caused by:
   java.lang.IllegalStateException: Node has the discussable aspect but does not have 1 child, it has 0 children!


node structuct of
         Association association = new Association();
         association.setAssociationType(Constants.ASSOC_DISCUSSION);
         association.setDirection(AssociationDirectionEnum.target);
         children = repositoryService.queryAssociated(ref, new Association[] {association}); 
results is : 

   <?xml version="1.0" encoding="UTF-8" ?>
- <Node NodeType="{http://www.alfresco.org/model/content/1.0}content">
   - <Properties>
        <Property>modifier=admin</Property>
        <Property>editInline=true</Property>
        <Property>modified=2006-04-13T16:56:14.468+08:00</Property>
        <Property>description=</Property>
        <Property>node-uuid=4c5b13ad-cacb-11da-95ba-993a183228c0</Property>
        <Property>creator=admin</Property>
        <Property>store-protocol=workspace</Property>
        <Property>content=contentUrl=store://2006/4/13/16/4c623f9f-cacb-11da-95ba-993a183228c0.bin|mimetype=text/html|size=1318|encoding=UTF-8</Property>
        <Property>title=a.htm</Property>
        <Property>name=a.htm</Property>
        <Property>store-identifier=SpacesStore</Property>
        <Property>created=2006-04-13T16:55:46.921+08:00</Property>
     </Properties>
   - <Aspects>
        <Aspect>{http://www.alfresco.org/model/content/1.0}auditable</Aspect>
        <Aspect>{http://www.alfresco.org/model/content/1.0}titled</Aspect>
        <Aspect>{http://www.alfresco.org/model/system/1.0}referenceable</Aspect>
        <Aspect>{http://www.alfresco.org/model/forum/1.0}discussable</Aspect>
        <Aspect>{http://www.alfresco.org/model/application/1.0}inlineeditable</Aspect>
     </Aspects>
   - <Children>
      - <Node NodeType="{http://www.alfresco.org/model/forum/1.0}forum">
         - <Properties>
              <Property>modifier=admin</Property>
              <Property>modified=2006-04-13T16:56:16.187+08:00</Property>
              <Property>icon=forum_large</Property>
              <Property>node-uuid=5c3c04c6-cacb-11da-95ba-993a183228c0</Property>
              <Property>creator=admin</Property>
              <Property>store-protocol=workspace</Property>
              <Property>name=update.html discussion</Property>
              <Property>store-identifier=SpacesStore</Property>
              <Property>created=2006-04-13T16:56:13.593+08:00</Property>
           </Properties>
         - <Aspects>
              <Aspect>{http://www.alfresco.org/model/content/1.0}auditable</Aspect>
              <Aspect>{http://www.alfresco.org/model/application/1.0}uifacets</Aspect>
              <Aspect>{http://www.alfresco.org/model/system/1.0}referenceable</Aspect>
           </Aspects>
        </Node>
     </Children>
  </Node>

java code is

   // uuid is the id of resource.
   public String post(String uuid, String author, String title, String content) {
      String child_uuid = null;
      try {
         Node node=getNode(uuid);
         if(!hasAspect(node,Constants.ASPECT_DISCUSSABLE)) {
            makeDiscussable(uuid,title);
         }
         
         // get topic uuid ,if does not exit, create a topic child node
         String topic_id = getOrCreateTopic(repositoryService, uuid, title);
         //add a content node for title and cotent
         child_uuid = post_helper(topic_id, author, title, content);

      } catch (Exception e) {
         e.printStackTrace();
      }
      return child_uuid;
   }
   
   public void makeDiscussable(String uuid, String title) {
      try {
         // add discussable aspect
         addAspect(repositoryService, Constants.ASPECT_DISCUSSABLE, null,
               uuid);
         // add forum
         String forum_id = WebServiceUtil.createNode(Constants.TYPE_FORUM,
               uuid, "admin", title + "  discussion", null).getUuid();
         
         // add association
         addDiscussionAssociation(uuid,forum_id);

         // add uifacets aspect
         NamedValue[] props = new NamedValue[] { new NamedValue(
               Constants.PROP_ICON, "forum_large") };
         addAspect(repositoryService, Constants.ASPECT_UIFACETS, props,
               forum_id);

      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   
   public void addDiscussionAssociation(String uuid uuid, String forum_id) throws Exception {
      // add DISCUSSION association from Forum to Discussable Node
      CML cml = new CML();
      CMLCreateAssociation discusstion = new CMLCreateAssociation();
      discusstion.setAssociation(Constants.ASSOC_DISCUSSION);
      discusstion.setFrom(WebServiceUtil.createPredicate(uuid));
      discusstion.setTo(WebServiceUtil.createPredicate(forum_id));
      cml.setCreateAssociation(new CMLCreateAssociation[] { discusstion });

      UpdateResult[] updateResults = repositoryService.update(cml);
      if(updateResults!=null) {
         for(UpdateResult r:updateResults) {
            Reference source=r.getSource();
            Reference target=r.getDestination();
            System.out.println("source = " + source.getUuid());
            System.out.println("target = " + target.getUuid());
         }
      }
   }
   
1 REPLY 1

leon
Champ in-the-making
Champ in-the-making
I find a segment code of org.alfresco.web.bean.wizard.NewDiscussionWizard. It is from  line 96 to 99 in startWizard(ActionEvent event)


ChildAssociationRef childRef = this.nodeService.createNode(this.discussingNodeRef,
               ForumModel.ASSOC_DISCUSSION,
               QName.createQName(ForumModel.FORUMS_MODEL_URI, "discussion"),
               ForumModel.TYPE_FORUM, forumProps);
        
         forumNodeRef = childRef.getChildRef();

my question is how to implement a equal function of nodeService.createNode in web service.


/**
     * Creates a new, non-abstract, real node as a primary child of the given parent node.
     *
     * @param parentRef the parent node
     * @param assocTypeQName the type of the association to create.  This is used
     *      for verification against the data dictionary.
     * @param assocQName the qualified name of the association
     * @param nodeTypeQName a reference to the node type
     * @param properties optional map of properties to keyed by their qualified names
     * @return Returns a reference to the newly created child association
     * @throws InvalidNodeRefException if the parent reference is invalid
     * @throws InvalidTypeException if the node type reference is not recognised
     *
     * @see org.alfresco.service.cmr.dictionary.DictionaryService
     */
    public ChildAssociationRef createNode(
            NodeRef parentRef,
            QName assocTypeQName,
            QName assocQName,
            QName nodeTypeQName,
            Map<QName, Serializable> properties)
            throws InvalidNodeRefException, InvalidTypeException;