Uploader un fichier avec api websrevice

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

Uploader un fichier avec api websrevice

Bonjour à tous ,

J'ai une application web qui doit permettre aux utilisateur d'uploder leur fichier dans un espace (cm:upload) dans alfresco .

J'utilise l'api web service, mais j'ai encore trouver un exemple de code pour uploader un contenue quelconque sur alfresco .

Si quelqu'un a déjà un code qui permet d'uploader n'importe quel type de fichiers (.doc , .text …) ,ça me serait vraiment utile .
6 Replies
cleseach
Active Member II

Re: Uploader un fichier avec api websrevice

Bonjour,

Vous avez un exemple dans le projet "SDK WebServiceSamples" disponible dans l'archive du SDK.

Cordialement,
Charles Le Seac'h
visapon
Member II

Re: Uploader un fichier avec api websrevice

Merci cleseac pour votre réponse, cependant j'ai mal expliqué ma problématique, j’en suis désole :

Le truc c'est que je crée un espace via l'api web service et c'est dans cet espace ou je dois uploader mon contenue.

En fait c'est un problème de xpath avec les wcm, quand j'upload dans un espace créé manuellement l'opération est effectuée avec succès, mais quand je veux uploader dans l'espace créé par le web service là j'ai une erreur de chemin il ne trouve pas le chemin spécifié exp :

"app:company_home/cm:folder" sachant que folder est créé par l'api  ws !


File type: text/plain
File name: ui.txt
File size: 6 bytes
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString:
faultActor:
faultNode:
faultDetail:
   {http://www.alfresco.org/ws/service/repository/1.0}RepositoryFault:<ns1:errorCode>0</ns1:errorCode><ns1:message>java.lang.IllegalStateException: Failed to resolve to a single NodeRef with parameters (store=workspace:SpacesStore uuid=null path=/app:company_home/cm:_x0031_2/cm:_x0033_34/cm:is), found 0 nodes.</ns1:message>
   {http://xml.apache.org/axis/}exceptionName:org.alfresco.repo.webservice.repository.RepositoryFault
   {http://xml.apache.org/axis/}stackTrace:
   at org.alfresco.repo.webservice.repository.RepositoryWebService.update(RepositoryWebService.java:341)
   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 org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
   at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
   at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
   at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
   at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
   at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
   at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
   at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
   at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Thread.java:619)

   {http://xml.apache.org/axis/}hostname:root-0cafa34cf4




Voici l'erreur que j'obtiens lorsque je veux uploader dans un répertoire qui s'appel "is" que je crée via api ws.


Merci .
cleseach
Active Member II

Re: Uploader un fichier avec api websrevice

Bonjour,

L'erreur me paraît claire : l'espace n'est pas trouvé par la recherche.
Quelques questions pour avancer sur le sujet :
Que donne la recherche sur le path "/app:company_home/cm:_x0031_2/cm:_x0033_34/cm:is" dans le node browser ?
L'espace existe-t-il bien dans le référentiel ?
Quel est votre code d'upload du document ?

Cordialement,
Charles Le Seac'h
visapon
Member II

Re: Uploader un fichier avec api websrevice

En fait l'upload est effectué avec succès quand la destination est un space créé manuellement sur alfreco .Ce qui n'est pas le cas avec un space créé via le web service.

L'espace existe-t-il bien dans le référentiel ?

Là c'est une question que je ne comprends pas, c’est  quoi ce référencie moi je créé l'espace via l’api, et c'est tout .Cet espace ce trouve bien sur alfresco c'est tous ce que je peux affirmer.

D'autre part pour ceux qui on ce problème je viens de le contourné via une petite astuce que j'ai utilise sans savoir pourquoi, surement par désespérance !

Voila le nouveau path que j'utilise et qui fait l'upload avec succès :


ParentReference companyHomeParent = new ParentReference(storeRef, null, "/app:company_home/cm:"+ISO9075.encode(56)+"/cm:"+ISO9075.encode(334)+"/*[@cm:name=\"" +"is"+ "\"]", Constants.ASSOC_CONTAINS, null);

Il faut utiliser le /*[@cm:name=\"" +"is"+ "\"], je sais pas pourquoi mais j'aimerais le savoir si quelqu'un connait mieux les xpath dans alfresco .
cleseach
Active Member II

Re: Uploader un fichier avec api websrevice

Bonjour,

Ce que j'appelle "référentiel" est, dans votre vocabulaire, "Alfresco".
Ma question était donc : "L'espace créé par WebService apparaît-il bien dans Alfresco ?"

Compte-tenu de votre réponse, il faut vérifier le "primary path" de cet espace. Vous pouvez obtenir cette information à partir du Node Browser (j'en profite au passage pour vous signaler que le Node Browser est le compagnon indispensable pour la recherche de problème sur les requêtes).
L'objectif de la vérification du "primary path" est d'identifier une éventuelle erreur dans la construction de celui-ci : j'imagine assez bien que la dernière partie du path n'est pas "{http://www.alfresco.org/model/content/1.0}is" alors que le nom de votre espace est "is". Vous ne pouvez donc pas le retrouver avec la recherche "/app:company_home/cm:_x0031_2/cm:_x0033_34/cm:is" (car cm:is) n'est pas connu, mais "/app:company_home/cm:_x0031_2/cm:_x0033_34/*[@cm:name=\"is\"]" vous permet de lever cette difficulté en utilisant directement le nom du noeud plutôt que le nom de son chemin.

Pour rappel/information, les noeuds (objets Alfresco) sont rattachés à leur noeud parent par une child-association. Cette association est nommée et c'est ce nom qui sert dans la définition du chemin du noeud. Par convention, le nom d'une child-association résulte de la concaténation de "{http://www.alfresco.org/model/content/1.0}" et du nom du noeud cible. C'est une convention, pas une obligation.

J'espère que ces quelques rapides explications vous permettront de trouver l'origine de votre problème et de le corriger.

Cordialement,
Charles Le Seac'h
visapon
Member II

Re: Uploader un fichier avec api websrevice

Merci pou ces détails intéressantes, mais oui je sais tjs pas comment je dois faire pour régler proprement ce problème :

C'est vrai que j'ai contourné le problème dans le cas de l’upload, mais je me retrouve face à un plus gros mur quand je dois télécharger mes fichiers uploadés à travers une interface jsp :

Voila le code qui ne marche pas et j'aimerais bien que vous me précisé ce que je dois y ajouter pour accéder proprement au dossier parce que là il n'arrive pas à le retrouver !



try{
            //Start the session
          AuthenticationUtils.startSession(USERNAME,PASSWORD);
            Store storeRef = new Store(Constants.WORKSPACE_STORE, "SpacesStore");
          
            ParentReference companyHomeParent = new ParentReference(storeRef, null, "/app:company_home/cm:"+ISO9075.encode("12")+"/cm:"+ISO9075.encode("334")+"/*[@cm:name=\"" +is+"\"]", Constants.ASSOC_CONTAINS, null);
            RepositoryServiceSoapBindingStub repositoryService =WebServiceFactory.getRepositoryService();
       
           ContentServiceSoapBindingStub contentService =WebServiceFactory.getContentService();
 
        String queryLucene2Bp="PATH:\""+companyHomeParent.getPath()+"/*\"  "; 
          
            Query query2Bp = new Query(Constants.QUERY_LANG_LUCENE, queryLucene2Bp);
           QueryResult queryResult2Bp = repositoryService.query(storeRef, query2Bp, false);
          
            ResultSetRow[] rows = queryResult2Bp.getResultSet().getRows();
            F16 fz=null;
           
       if (rows != null)

Dans ce cas (telechargement) l'astuce ne marche pas, et le problème n'est ps contourné contrairment au cas du upload .