AnsweredAssumed Answered

Carga de archivos con aspectos via CMIS

Question asked by cavila.g on Sep 28, 2012
Latest reply on Oct 2, 2012 by cristinamr
Intentando evitar el problema que tiene alfresco en la carga de archivos encontré el servicio CMIS que expone alfresco, asi que me dispuse a enviar archivos por medio de ese servlet, ahora todo funciona de maravilla hasta que tuve que enviar un esquema de aspectos dentro del archivo xml que recibe dicho servlet.
Mi problema es que no consigo hacer que el archivo tome los aspectos y propiedades que le estoy enviando en el xml.

Este es el codigo que tengo en este momento:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Collection;

import org.apache.xml.security.utils.Base64;

import eu.medsea.mimeutil.MimeType;
import eu.medsea.mimeutil.MimeUtil;
import eu.medsea.mimeutil.MimeUtil2;

public class TestCMIS {

   /**
       * @param args
       */
      public static void main(String[] args) {
         try {
            TestCMIS poc = new TestCMIS("admin", "password", new URL("http://localhost:8083/alfresco/service/cmis/p/TEST/children"),
                  new File("D:\\alfrescotest.txt"));
            poc.createContent();
         } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }

      private URL url;

      private File file;

      private static final String mensaje = "<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:app=\"http://www.w3.org/2007/app\""
          + " xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\""
          + " xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:alf=\"http://www.alfresco.org\""
          + " xmlns:opensearch=\"http://a9.com/-/spec/opensearch/1.1/\">\n"
            + "\t<title>FILE_NAME</title>\n"
            + "\t<content type=\"MIME_TYPE\"><![CDATA[CONTENT]]></content>\n"
            + "\t<cmis:object>\n"
            + "\t\t\t<alf:setAspects>\n"
          + "\t\t\t\t<alf:aspectsToAdd>P:cm:titled</alf:aspectsToAdd>\n"
          + "\t\t\t\t<alf:properties>\n"
          + "\t\t\t\t\t<cmis:propertyString propertyDefinitionId=\"cm:title\" displayName=\"Title\" queryName=\"cm:title\">\n"
          + "\t\t\t\t\t   <cmis:value>titulo</cmis:value>\n"
          + "\t\t\t\t\t</cmis:propertyString>\n"
          + "\t\t\t\t</alf:properties>\n"
          + "\t\t\t</alf:setAspects>\n"
            + "\t\t<cmis:properties>\n"
            + "\t\t\t<cmis:propertyString cmis:name=\"ObjectTypeId\"><cmis:value>document</cmis:value></cmis:propertyString>\n"
          
            + "\t\t</cmis:properties>\n" + "\t</cmis:object>\n" + "</entry>\n";
      private String usuario;

      private String password;

      public TestCMIS(String usuario, String password, URL url, File file) {
         super();
         this.usuario = usuario;
         this.password = password;
         this.url = url;
         this.file = file;
      }

      @SuppressWarnings("unchecked")
      private void createContent() throws IOException {
        
         FileInputStream fis = new FileInputStream(file);
         DataInputStream dis = new DataInputStream(fis);
         // Create the byte array to hold the data
         byte[] bytes = new byte[(int) file.length()];
         dis.readFully(bytes);
        
         Collection<MimeType> mimeTypes = MimeUtil.getMimeTypes(file);
         MimeType mimeType = MimeUtil.getMostSpecificMimeType(mimeTypes);
         if(mimeType == null) mimeType = MimeUtil2.UNKNOWN_MIME_TYPE;
        
         System.out.println("Content mime type is: " + mimeType.toString());
        
         String datos = TestCMIS.mensaje;
         datos = datos.replaceFirst("FILE_NAME", file.getName());
         datos = datos.replaceFirst("MIME_TYPE", mimeType.toString());
         datos = datos.replaceFirst("CONTENT", Base64.encode(bytes));
        
         String auth = Base64.encode((usuario + ":" + password).getBytes());

         URLConnection conn = url.openConnection();
         conn.setDoOutput(true);
         conn.setRequestProperty("Authorization", "Basic " + auth);
         conn.setRequestProperty("Content-Type", "application/atom+xml;type=entry");
         File file = new File("out1.xml");
         FileOutputStream fos = new FileOutputStream(file);

         OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());

         fos.write(datos.getBytes());
         out.write(datos);
         out.close();

         // A ver que nos cuentan.
         String decodedString;

         BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

         while ((decodedString = in.readLine()) != null) {
            System.out.println(decodedString);
         }
         in.close();

      }

}

Espero me puedan dar una mano porque no tengo idea de que estoy haciendo mal para que no m tome siquierea ese aspecto que es propio de alfresco.

gracias

Outcomes