cancel
Showing results for 
Search instead for 
Did you mean: 

Problem with a java-backed Web Script, can't write content

deathuser
Champ in-the-making
Champ in-the-making
Hi there,

I'm trying to develop a java-backed web script to load a file from the file-system into the alfresco repository, the file was created into the repository but the content, content-type and Encoding, doesn't write, when I try to access with the webclient I get the message:

The node's content is missing:
   node: workspace://SpacesStore/e8755d53-54f7-445c-bb47-95e431612f46
   reader: null 
Please contact your system administrator.

This is because the content doesn't write, the alfresco version is:
alfresco-community-tomcat-3.3g with mysql 5.

Also, when the script run for first time, alfresco is deployed again and generate this error message:

Cannot create JDBC driver of class '' for connect URL 'null'
java.sql.SQLException: No suitable driver
   at java.sql.DriverManager.getDriver(DriverManager.java:264)
   at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
   at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
   at org.alfresco.config.JndiObjectFactoryBean.lookup(JndiObjectFactoryBean.java:44)
   at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:201)
   at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:187)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1305)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1305)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1305)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1305)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
   at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416)
   at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
   at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192)
   at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
   at org.alfresco.web.app.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:63)
   at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
   at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
   at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
   at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
   at org.apache.catalina.startup.Ho18:45:59,926 User:admin INFO  [domain.schema.SchemaBootstrap] Esquema gestionado por el gestor de base de datos org.hibernate.dialect.MySQLInnoDBDialect.
18:46:01,087 User:admin INFO  [domain.schema.SchemaBootstrap] No se hicieron cambios en el esquema.

Successive executions of the script runs without any error message.

The code is:


package org.alfresco.cde;

import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.ApplicationContextHelper;
import org.springframework.context.ApplicationContext;
import org.springframework.extensions.webscripts.WebScriptException;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
import org.springframework.extensions.webscripts.AbstractWebScript;



public class LotusIntegator extends AbstractWebScript {
  protected ServiceRegistry services;
  WebScriptRequest request;
  public void execute(WebScriptRequest req, WebScriptResponse res)
  throws IOException
  {
      ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
      final ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
      request = req;
      try
      {
         AuthenticationUtil.runAs(new RunAsWork<String>() {
            @SuppressWarnings("synthetic-access")

            public String doWork() throws Exception {
                String descripcion = request.getParameter("desc");
                String titulo = request.getParameter("title");
                String nombre = request.getParameter("name");
                  ContentService contentService = serviceRegistry.getContentService();
                  SearchService searchService = serviceRegistry.getSearchService();
                  NodeService nodeService = serviceRegistry.getNodeService();

                  StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore");
                  ResultSet resultSet = searchService.query(storeRef, SearchService.LANGUAGE_LUCENE, "PATH:\"/app:company_home\"");
                  NodeRef companyHome = resultSet.getNodeRef(0);
                  resultSet.close();
                  Map<QName, Serializable> contentProps = new HashMap<QName, Serializable>();
                  contentProps.put(ContentModel.PROP_NAME, nombre);
                  ChildAssociationRef association = nodeService.createNode(companyHome,
                        ContentModel.ASSOC_CONTAINS,
                        QName.createQName(NamespaceService.CONTENT_MODEL_PREFIX, nombre),
                          ContentModel.TYPE_CONTENT,
                          contentProps);
                 
                  NodeRef content = association.getChildRef();

                  // add titled aspect (for Web Client display)
                  Map<QName, Serializable> titledProps = new HashMap<QName, Serializable>();
                  titledProps.put(ContentModel.PROP_TITLE, titulo);
                  titledProps.put(ContentModel.PROP_DESCRIPTION, descripcion);
                  nodeService.addAspect(content, ContentModel.ASPECT_TITLED, titledProps);
                 
                  ContentWriter writer = contentService.getWriter(content, ContentModel.PROP_CONTENT, true);
                  writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
                  writer.setEncoding("UTF-8");
                  writer.putContent("This is a Test…");
                 
                  System.err.println("Writer Size: " + writer.getSize());
                  return "cool";
            }
            
         },"admin");
      }
      catch(Exception e)
      {
         throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
      }       
       res.getWriter().write("Carga OK");
   }
}

Thanks in advance for any suggestion.

bye
Smiley Wink
4 REPLIES 4

mrogers
Star Contributor
Star Contributor
How are you running this web script?   The errors shown are in spring initialisation, so is your server up and running when you run the script?

deathuser
Champ in-the-making
Champ in-the-making
How are you running this web script?
I'm running the script using the URL defined in the desc.xml file in a web browser.

The errors shown are in spring initialisation, so is your server up and running when you run the script?
Yes, the server is running, the attached errors are shown only in the first execution of the webscript, later executions doesn't show any error message

thanks…

gyro_gearless
Champ in-the-making
Champ in-the-making
This is indeed bizarre - from the stacktrace i would have bet (like perhaps mrogers) that your server is utterly misconfigured and not running at all  :shock:
Maybe can you post the configuration for your webscript from the xx-context.xml? The only elaborate guess i have to offer is that you maybe tried to configure some tomcat managed datasource in your beans(webscripts) configuration?

Cheers
Gyro

deathuser
Champ in-the-making
Champ in-the-making
The relevant part of: web-scripts-application-context.xml
<bean id="webscript.org.alfresco.cde.li.get" class="org.alfresco.cde.LotusIntegator" parent="webscript" />

No tomcat managed datasource is configured …

Thanks …