0

I'm currently developing a Liferay portlet that can upload some pdfs and png to the Documents and Media Repository in Liferay DXP 7.4.13 u33. I'm trying to use the static method addFileEntry from the class DLFileEntryLocalServiceUtil. Either in its normal or deprecated mode it's not working.

I have also tried with DLAppLocalServiceUtil.addFileEntry(externalReferenceCode, userId, repositoryId, folderId, sourceFileName,mimeType, urlTitle, description, changeLog, file, expirationDate, reviewDate, serviceContext) but I got the same result.

Im getting the following errors from this request, when I call this method via an MVCActionCommand in my portlet:

    ERROR [liferay/monitoring-4][ParallelDestination:59] Unable to process message {destinationName=liferay/monitoring, response=null, responseDestinationName=null, 
responseId=null, payload=[{displayName=ConceptUploadUrls, portletId=com_liferay_concept_upload_urls_ConceptUploadUrlsPortlet_INSTANCE_KNuJiTyuo6gx, 
requestType=ACTION, {attributes=null, companyId=20097, groupId=20121, description=null, duration=0, name=com_liferay_concept_upload_urls_ConceptUploadUrlsPortlet, 
namespace=com.liferay.monitoring.Portlet, requestStatus=null, stopWatch=0:00:10.151, timeout=0, user=20125}}, {referer=http://localhost:8080/client, remoteAddr=127.0.0.1, 
requestURL=, statusCode=0, userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36, {attributes=null, 
companyId=20097, groupId=20121, description=null, duration=10155, name=/c/portal/layout, namespace=com.liferay.monitoring.Portal, requestStatus=ERROR, stopWatch=0:00:10.155, 
timeout=-1, user=20125}}, {referer=http://localhost:8080/client, remoteAddr=127.0.0.1, requestURL=, statusCode=0, userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36, {attributes=null, companyId=20097, groupId=0, description=null, duration=10157, name=/web/guest/carga-por-url, 
namespace=com.liferay.monitoring.Portal, requestStatus=ERROR, stopWatch=0:00:10.157, timeout=-1, user=null}}], values={defaultLocale=en_US, companyId=20097, groupId=0, principalName=20125, 
permissionChecker=com.liferay.portal.kernel.util.TransientValue@4ff66308, siteDefaultLocale=en_US, themeDisplayLocale=en_US}}
    com.liferay.portal.kernel.messaging.MessageListenerException: java.lang.NullPointerException
    
    Caused by: java.lang.NullPointerException at com.liferay.portal.monitoring.internal.statistics.portlet.PortletStatistics.processDataSample(PortletStatistics.java:112) ~[?:?]
    ...

    ERROR [http-nio-8080-exec-3][VirtualHostFilter:381] null
    javax.servlet.ServletException: Servlet execution threw an exception
    
    Caused by: java.lang.NoSuchMethodError: com.liferay.document.library.kernel.service.DLAppService.addFileEntry(Ljava/lang/String;
    JJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/util/Date;Ljava/util/Date;Lcom/liferay/portal/kernel/service/ServiceContext;)Lcom/liferay/portal/kernel/repository/model/FileEntry;
            at com.liferay.concept.upload.urls.portlet.action.UploadFile.uploadFile(UploadFile.java:193) ~[?:?]
    ...

The complete program is the following:

package com.liferay.concept.upload.urls.portlet.action;

import com.liferay.concept.upload.urls.constants.ConceptUploadUrlsPortletKeys;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.ServiceContextFactory;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.kernel.util.MimeTypesUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.WebKeys;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

import com.liferay.concept.upload.urls.constants.MVCCommandNames;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.model.DLFolderConstants;
import com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil;
import com.liferay.dynamic.data.mapping.kernel.DDMFormValues;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;

import org.osgi.service.component.annotations.Component;

@Component(immediate = true, property = { "javax.portlet.name=" + ConceptUploadUrlsPortletKeys.CONCEPTUPLOADURLS,
        "mvc.command.name=" + MVCCommandNames.UPLOAD_FILE }, service = MVCActionCommand.class)

public class UploadFile extends BaseMVCActionCommand {

    @Override
    protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
        try {
            UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);

            if (uploadRequest.getSize("myFile") == 0) {
                SessionErrors.add(actionRequest, "error");
            }

            // saving the document in local
            String fileName = uploadRequest.getFileName("myFile");
            File file = uploadRequest.getFile("myFile");
            saveDocument(file, fileName);

            // readandDownload
            List<String> urls = UploadUrlsFromFile(actionRequest, file);

            System.out.println("urls Read: " + urls);
            SessionMessages.add(actionRequest, "success");
        } catch (FileNotFoundException e) {
            System.out.println("EXCEPTION! Input File Not Found.");
            e.printStackTrace();
            SessionMessages.add(actionRequest, "error");
        } catch (NullPointerException e) {
            System.out.println("EXCEPTION! An Object is null");
            e.printStackTrace();
            SessionMessages.add(actionRequest, "error");
        } catch (IOException e) {
            System.out.println("EXCEPTION! Error Reading The Input File.");
            SessionMessages.add(actionRequest, "error");
            e.printStackTrace();
        } catch (PortalException p) {
            System.out.println("EXCEPTION! Portal Exception");
            p.printStackTrace();
            SessionMessages.add(actionRequest, "error");
        }
    }

    private void saveDocument(File file, String fileName) throws IOException {
        File newFile = new File(folder + "_" + fileName);

        FileInputStream fis = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(newFile);
        System.out.println("File: " + file);
        System.out.println("SavedFile: " + newFile);

        byte[] bytes_ = FileUtil.getBytes(file);
        int i = fis.read(bytes_);

        while (i != -1) {
            fos.write(bytes_, 0, i);
            i = fis.read(bytes_);
        }
        fis.close();
        fos.close();
        long size = newFile.length();
        System.out.println("File size kb:" + (float) size / 1024);
        System.out.println("File created: " + newFile.getName());
    }

    private List<String> UploadUrlsFromFile(ActionRequest actionRequest, File inputFile)
            throws IOException, PortalException {
        BufferedReader br = new BufferedReader(new FileReader(inputFile));
        String line;
        List<String> urls = new ArrayList<String>();
        while ((line = br.readLine()) != null) {
            urls.add(line);
        }
        br.close();
        for (String url : urls) {
            String fileName = getNameForFileFromUrl(url);
            // download file from the web
            try {
                File file = downloadFile(url, fileName); 
                DLFileEntry dlFileEntry = uploadFile(actionRequest, file);
                
            } catch (NoSuchMethodError e) {
                System.out.println("EXCEPTION! Error with the class method.");
                SessionMessages.add(actionRequest, "error");
            } catch (PortalException e) {
                SessionMessages.add(actionRequest, "error");
                throw (new PortalException());
            } catch (FileNotFoundException e) {
                System.out.println("EXCEPTION! File Not Found.");
                SessionMessages.add(actionRequest, "error");
            } catch (MalformedURLException e) {
                System.out.println("EXCEPTION! Malformed URL.");
                SessionMessages.add(actionRequest, "error");
            } catch (IOException e) {
                System.out.println("EXCEPTION! Error reading the File.");
                SessionMessages.add(actionRequest, "error");
            }
        }
        return urls;
    }

    private String getNameForFileFromUrl(String url) {
        String fileName = String.valueOf(url);
        int index = fileName.lastIndexOf("/");
        if (index != -1) {
            fileName = fileName.substring(index + 1);
        }
        return fileName;
    }

    private File downloadFile(String url, String fileName) throws MalformedURLException, IOException, FileNotFoundException {
        String completePath = folder + fileName;
        BufferedInputStream in = new BufferedInputStream(new URL(url).openStream());

        System.out.println("URL: " + url);
        FileOutputStream fileOutputStream = new FileOutputStream(completePath);
        byte dataBuffer[] = new byte[1024];
        int bytesRead;
        while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
            fileOutputStream.write(dataBuffer, 0, bytesRead);
        }
        fileOutputStream.close();
        File file = new File(completePath);
        System.out.println("New File Downloaded: " + completePath);
        return file;
    }

    @SuppressWarnings("deprecation")
    private DLFileEntry uploadFile(ActionRequest actionRequest, File file) throws PortalException {
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        String fileName = file.getName();

        String externalReferenceCode = "";
        long userId = themeDisplay.getUserId();
        long groupId = themeDisplay.getScopeGroupId();
        long repositoryId = groupId;
        long folderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
        String sourceFileName = fileName;
        String mimeType = MimeTypesUtil.getContentType(file);
        String title = FileUtil.stripExtension(fileName);
        String urlTitle = FileUtil.stripExtension(fileName).substring(0, 10);
        String description = fileName;
        String changeLog = "initialization, web source";
        long fileEntryType = 0;
        Map<String, DDMFormValues> ddmFormValuesMap = null;
        InputStream inputStream = null;
        long size = file.length();

//      Calendar.set
        Calendar myCal = Calendar.getInstance();
        myCal.set(Calendar.YEAR, 2023);
        myCal.set(Calendar.MONTH, 3);
        myCal.set(Calendar.DAY_OF_MONTH, 2);
//      Date expirationDate = myCal.getTime(); // never expire
        myCal.set(Calendar.DAY_OF_MONTH, 1);
//      Date reviewDate = myCal.getTime(); // never review

        ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); // permissions and assets
        System.out.println("size: " + size);
        System.out.println("folderId: " + folderId);
        System.out.println("Creating file in DL....");

        DLFileEntry fileEntry = null;
        try {
            fileEntry = DLFileEntryLocalServiceUtil.addFileEntry(userId, groupId, repositoryId, folderId, fileName,
                    mimeType, fileName, "", "", 0, null, file, null, size, serviceContext);
            System.out.println("file entry added");

        } catch (Exception e) {
            System.out.println("Exception File Entry");
            e.printStackTrace();
            throw (new PortalException());
        }
        return fileEntry;

    }

    private String folder = "D:\\LIFERAY-gradebook\\gradebook-workspace\\modules\\concept-upload-urls\\files\\";
}
alfilAR
  • 1
  • 1

0 Answers0