cancel
Showing results for 
Search instead for 
Did you mean: 

No encuentra la carpeta donde guardar el documento

gonial
Champ in-the-making
Champ in-the-making
Buenas chic@s.

He cambiado algo el código que tenia para trabajar con Alfresco, ya que tenía problemas cuando queria guardar un documento en una carpeta ya existente en el proyecto.

Con la modificación actual he dejado el código tal que así:


   public String uploadFile(String idfolder, byte[] bytes, String fileName,
         String contentType) {
      String idDoc = null;
      // properties
      Folder folder = (Folder) session.getObject(idfolder);
      Map<String, Object> newDocProps = new HashMap<String, Object>();
      newDocProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
      newDocProps.put(PropertyIds.NAME, fileName);
      ContentStream contentStream = new ContentStreamImpl(fileName,
            BigInteger.valueOf(bytes.length), contentType,
            new ByteArrayInputStream(bytes));
      try {
         // create the file
         Document doc = folder.createDocument(newDocProps, contentStream,
               VersioningState.NONE);
         idDoc = doc.getId();
      } catch (CmisConstraintException e) {
         System.out.println("No se pudo crear el archivo");
      }
      return idDoc;
   }


En la línea siguiente: Folder folder = (Folder) session.getObject(idfolder), idFolder contiene /carpetaDeseada/, que ya esta creada en alfresco, pero obtengo el siguiente error llegado a ese punto.

ADVERTENCIA: /subir.xhtml @98,49 fileUploadListener="#{documentoMBean.handleFileUpload}": org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: Object not found:
javax.el.ELException: /subir.xhtml @98,49 fileUploadListener="#{documentoMBean.handleFileUpload}": org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: Object not found:
   at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
   at org.primefaces.component.fileupload.FileUpload.broadcast(FileUpload.java:310)
   at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:755)
   at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
   at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
   at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
   at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at alfresco.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:52)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
   at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   at java.lang.Thread.run(Thread.java:662)
Caused by: org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: Object not found:
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.convertStatusCode(AbstractAtomPubService.java:484)
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.read(AbstractAtomPubService.java:645)
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.getObjectInternal(AbstractAtomPubService.java:868)
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.ObjectServiceImpl.getObject(ObjectServiceImpl.java:626)
   at org.apache.chemistry.opencmis.client.runtime.SessionImpl.getObject(SessionImpl.java:519)
   at org.apache.chemistry.opencmis.client.runtime.SessionImpl.getObject(SessionImpl.java:497)
   at alfresco.DocumentoManagedBean.uploadFile(DocumentoManagedBean.java:357)
   at alfresco.DocumentoManagedBean.handleFileUpload(DocumentoManagedBean.java:493)
   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.el.parser.AstValue.invoke(AstValue.java:278)
   at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
   at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
   … 27 more
16-jun-2015 13:41:43 com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: Object not found:
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.convertStatusCode(AbstractAtomPubService.java:484)
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.read(AbstractAtomPubService.java:645)
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.getObjectInternal(AbstractAtomPubService.java:868)
   at org.apache.chemistry.opencmis.client.bindings.spi.atompub.ObjectServiceImpl.getObject(ObjectServiceImpl.java:626)
   at org.apache.chemistry.opencmis.client.runtime.SessionImpl.getObject(SessionImpl.java:519)
   at org.apache.chemistry.opencmis.client.runtime.SessionImpl.getObject(SessionImpl.java:497)
   at alfresco.DocumentoManagedBean.uploadFile(DocumentoManagedBean.java:357)
   at alfresco.DocumentoManagedBean.handleFileUpload(DocumentoManagedBean.java:493)
   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.el.parser.AstValue.invoke(AstValue.java:278)
   at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
   at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
   at org.primefaces.component.fileupload.FileUpload.broadcast(FileUpload.java:310)
   at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:755)
   at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
   at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
   at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
   at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at alfresco.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:52)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
   at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   at java.lang.Thread.run(Thread.java:662)

¿Algunda sugerencia? Yo solo quiero poder almacenar un documento en un fichero ya existente.

Un saludo!!
16 REPLIES 16

cristinamr
World-Class Innovator
World-Class Innovator
Buenas.

No veo nada fuera de lo normal, podrías imprimir que contiene la variable folder una vez se ejecuta esta línea? :


Folder folder = (Folder) session.getObject(idfolder);

Por cierto, échale un vistazo a esta documentación, esta muy bien.
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

gonial
Champ in-the-making
Champ in-the-making
Gracias Cristina por responder, te muestro las variables que uso para seleccionar un directorio.


public void handleFileUpload(FileUploadEvent event) throws IOException {
               
                this.file = event.getFile();
      fichero = event.getFile().getContents();/* Byte */
      nombreFichero = file.getFileName();
      tipoFichero = file.getContentType();
      directorioAlfrescoDocumento= "/carpetaDeseada/";
                Controller(); /*me conecto con alfresco*/
      idDocumentoEnAlfresco = uploadFile(directorioAlfrescoDocumento, fichero, nombreFichero,tipoFichero);
}

public String uploadFile(String idfolder, byte[] bytes, String fileName,
         String contentType) {
      String idDoc = null;
      // properties
      Folder folder = (Folder) session.getObject(idfolder); /*error*/
      Map<String, Object> newDocProps = new HashMap<String, Object>();
      newDocProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
      newDocProps.put(PropertyIds.NAME, fileName);
      ContentStream contentStream = new ContentStreamImpl(fileName,
            BigInteger.valueOf(bytes.length), contentType,
            new ByteArrayInputStream(bytes));
      try {
         // create the file
         Document doc = folder.createDocument(newDocProps, contentStream,
               VersioningState.NONE);
         idDoc = doc.getId();
      } catch (CmisConstraintException e) {
         System.out.println("No se pudo crear el archivo");
      }
      return idDoc;
   }



Voy a ver la documentación para buscar una solución.

Gracias!!

gonial
Champ in-the-making
Champ in-the-making
Creo que mi problema puede estar en que confundo el "idfolder" con la ruta de la carpeta donde quiero almacenar el documento ("/carpetaDeseada/"). Voy a ver si consigo solucionarlo….

angelborroy
Community Manager Community Manager
Community Manager
CMIS no entiende la ruta "/carpetaDeseada/", ¿la has creado en la raíz del repositorio?

Para entender la nomenclatura puedes usar el cliente http://chemistry.apache.org/java/developing/tools/dev-tools-workbench.html
Hyland Developer Evangelist

cristinamr
World-Class Innovator
World-Class Innovator
Estoy de acuerdo con Ángel, debes obtener el id de la carpeta que quieras. Prueba a hacer esto (o similar):


String path = "/User Homes/folder"
CmisObject object = getSession().getObjectByPath(path);
String id = object.getId();

Lo tienes en la página que te pasé más arriba 😃
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

gonial
Champ in-the-making
Champ in-the-making
Muchas gracias Cristina y Angel, ya he sabido implementarlo en mi proyecto, os muestro como queda:


String path = "/index/2015/";
            CmisObject object = session.getObjectByPath(path);
                 //Sera carpeta ¿?
            if (object instanceof Folder) {
                // Nombre del documento
                String name = file.getFileName();
                String type = file.getContentType();

               
                byte[] data2 = fichero;
                Map<String, Object> properties2 = new HashMap<String, Object>();
                properties2.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
                properties2.put(PropertyIds.NAME, name);

                // Se carga el contenido en un ContentStream
               
                InputStream stream = new ByteArrayInputStream(data2);
                ContentStream contentStream = new ContentStreamImpl(name,
                        BigInteger.valueOf(data2.length),type, stream);
               

                // Se crea el documento
                Document newDoc = ((Folder) object).createDocument(properties2,
                        contentStream, VersioningState.MAJOR);


Otra pregunta Cristina. ¿Como puedo obtener la URL de ese documento que acabo de subir?

Me imagino que tendré que obtener el fichero que esta almacenado en Alfresco, después pasarlo a Byte y devolverlo a mi aplicacion web para su descarga.

¿Es correcto mi planteamiento?

Muchas Gracias!!

gonial
Champ in-the-making
Champ in-the-making
Solucionado, era mas facil de lo que pensaba.


                urlElemento=newDoc.getContentUrl();


Gracias!!

cristinamr
World-Class Innovator
World-Class Innovator
Perfecto!

Un saludo gonial!
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

gonial
Champ in-the-making
Champ in-the-making
Buenas de nuevo.

Estos días he estado probado la forma de poder acceder al fichero que tengo almacenado en Alfresco, desde una URL en la que no me pidan las credenciales de acceso (User/Password). He estado leyendo y no me queda claro si es posible obtener el fichero de esta forma, así que os pido consejo sobre la forma de solventar mi requerimiento.

Un saludo y muchas gracias.