在DLFileEntryLocalServiceUtil.addFileEntry之后,Liferay给我一个NoSuchEntryException

时间:2013-12-02 10:33:27

标签: java java-ee liferay liferay-6

我试图以编程方式将图像添加到liferay文档库中。 我使用了liferay portal 6.1.30 ee。

这是我的代码:

    protected void addDocument(long userId, Group group, InputStream inputStream, DLFolder dlFolder, String name) throws IOException {
    long fileEntryTypeId;
    try {
        fileEntryTypeId = DLFileEntryTypeLocalServiceUtil.getDefaultFileEntryTypeId(dlFolder.getFolderId());
    } catch (NestableException e) {
        if(LOGGER.isWarningEnabled())LOGGER.warn("unable to get fileEntryType ",e);
        return;
    }

    ServiceContext serviceContext = new ServiceContext();
    serviceContext.setCompanyId(group.getCompanyId());
    serviceContext.setScopeGroupId(group.getGroupId());
    serviceContext.setAssetEntryVisible(true);

    try {
        DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.addFileEntry(userId, group.getGroupId(), dlFolder.getRepositoryId(),
                dlFolder.getFolderId(), name, MimeTypesUtil.getContentType(name), name,
                StringPool.BLANK, StringPool.BLANK, fileEntryTypeId, null, null,
                inputStream, inputStream.available(), new ServiceContext());


        //fileEntry = DLFileEntryLocalServiceUtil.updateDLFileEntry(fileEntry);
        //fileEntry = DLFileEntryLocalServiceUtil.updateFileEntry(fileEntry.getUserId(),fileEntry.getFileEntryTypeId(),name,MimeTypesUtil.getContentType(name),name,StringPool.BLANK,StringPool.BLANK,false, fileEntryTypeId, new HashMap<String, Fields>(), null, fileEntry.getContentStream(), fileEntry.getSize(),serviceContext);
        //fileEntry = DLFileEntryLocalServiceUtil.updateStatus(fileEntry.getUserId(), fileEntry.getFileVersion().getFileVersionId(), WorkflowConstants.STATUS_APPROVED, new HashMap<String, Serializable>(), serviceContext);

        if(LOGGER.isTraceEnabled()) LOGGER.trace("file "+name+" added");
    } catch (NestableException e) {
        if(LOGGER.isWarningEnabled())LOGGER.warn("error adding file "+name+" ",e);
    }
}

我尝试使用DLFileEntryLocalServiceUtil.addFileEntry,但它没有正确创建我的文档,因为我在this post中红了,没有创建assetEntry记录。

所以我尝试了DLFileEntryLocalServiceUtil.updateStatus(这里评论),但我收到了这个错误,仍然没有assetEntry:

  

com.liferay.portlet.asset.NoSuchEntryException:不存在AssetEntry   密钥{classNameId = 10076,classPK = 42954}
在   com.liferay.portlet.asset.service.persistence.AssetEntryPersistenceImpl.findByC_C(AssetEntryPersistenceImpl.java:2933)   
在sun.reflect.GeneratedMethodAccessor1937.invoke(未知   来源)
在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
在java.lang.reflect.Method.invoke(Method.java:597)
  在   com.liferay.portal.security.lang.DoPrivilegedHandler.doInvoke(DoPrivilegedHandler.java:88)   
在   com.liferay.portal.security.lang.DoPrivilegedHandler.invoke(DoPrivilegedHandler.java:56)   
在com.sun.proxy。$ Proxy689.findByC_C(未知来源)   
在   com.liferay.portlet.asset.service.impl.AssetEntryLocalServiceImpl.updateVisible(AssetEntryLocalServiceImpl.java:866)   
在sun.reflect.GeneratedMethodAccessor1936.invoke(未知   来源)
在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
在java.lang.reflect.Method.invoke(Method.java:597)
  在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:117)   
在   com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:62)   
在   com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:52)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:218)   
在   com.liferay.portal.security.pacl.PACLInvocationHandler.doInvoke(PACLInvocationHandler.java:62)   
在   com.liferay.portal.security.pacl.PACLInvocationHandler.invoke(PACLInvocationHandler.java:51)   
在com.sun.proxy。$ Proxy394.updateVisible(未知来源)   
在   com.liferay.portlet.documentlibrary.service.impl.DLAppHelperLocalServiceImpl.updateStatus(DLAppHelperLocalServiceImpl.java:584)   
在sun.reflect.GeneratedMethodAccessor1935.invoke(未知   来源)
在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
在java.lang.reflect.Method.invoke(Method.java:597)
  在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:117)   
在   com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:62)   
在   com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:52)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:218)   
在   com.liferay.portal.security.pacl.PACLInvocationHandler.doInvoke(PACLInvocationHandler.java:62)   
在   com.liferay.portal.security.pacl.PACLInvocationHandler.invoke(PACLInvocationHandler.java:51)   
在com.sun.proxy。$ Proxy466.updateStatus(未知来源)   
在   com.liferay.portlet.documentlibrary.service.impl.DLFileEntryLocalServiceImpl.updateStatus(DLFileEntryLocalServiceImpl.java:1298)   
在   com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceWrapper.updateStatus(DLFileEntryLocalServiceWrapper.java:624)   
在sun.reflect.GeneratedMethodAccessor1933.invoke(未知   来源)
在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
在java.lang.reflect.Method.invoke(Method.java:597)
  在   com.liferay.portal.kernel.bean.ClassLoaderBeanHandler.invoke(ClassLoaderBeanHandler.java:67)   
在com.sun.proxy。$ Proxy782.updateStatus(未知来源)   
在sun.reflect.GeneratedMethodAccessor1933.invoke(未知   来源)
在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
在java.lang.reflect.Method.invoke(Method.java:597)
  在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:117)   
在   com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:62)   
在   com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:52)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)   
在   com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:113)   
在   com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:218)   
在   com.liferay.portal.security.pacl.PACLInvocationHandler.doInvoke(PACLInvocationHandler.java:62)   
在   com.liferay.portal.security.pacl.PACLInvocationHandler.invoke(PACLInvocationHandler.java:51)   
在com.sun.proxy。$ Proxy468.updateStatus(未知来源)   
在   com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil.updateStatus(DLFileEntryLocalServiceUtil.java:626)   
在xxx.addDocument()

我尝试调用方法DLFileEntryLocalServiceUtil.updateDLFileEntry或updateFileEntry  但没有区别

编辑:

我在addFileEntry:

之后找到了使用此代码的解决方案
    fileEntry = DLFileEntryLocalServiceUtil.updateFileEntry(userId, fileEntry.getFileEntryId(),name, MimeTypesUtil.getContentType(name), name,"", "", true, fileEntryTypeId, null, null, null, 0, serviceContext);
    Map<String, Serializable> workflowContext = new HashMap<String, Serializable>();
    workflowContext.put("event",DLSyncConstants.EVENT_UPDATE);
    fileEntry = DLFileEntryLocalServiceUtil.updateStatus(fileEntry.getUserId(), fileEntry.getFileVersion().getFileVersionId(), WorkflowConstants.STATUS_APPROVED, workflowContext, serviceContext);

1 个答案:

答案 0 :(得分:1)

您可以尝试使用DLFileAppLocalServiceUtil中的方法。它们生成文件的元数据,其他需要文件版本等字段。

HTH。