1

I have create an All-in-one amp in alfresco. Inside repo-amp l have create a java webscript and I want to get the file name as json return of specific workspace. The java code following

.
.
.

public class Fields extends AbstractWebScript
{

      private ServiceRegistry serviceRegistry;

    public void setServiceRegistry(ServiceRegistry serviceRegistry) {
        this.serviceRegistry = serviceRegistry;
    }
    public void execute(WebScriptRequest req, WebScriptResponse res)
        throws IOException
    {
        try
        {
            NodeService nodeService = serviceRegistry.getNodeService();
            String parameter=req.getParameter("nodeRef");
            NodeRef nodeRef=new NodeRef(parameter);

               Map<QName, Serializable> props = nodeService.getProperties(nodeRef);

   // Fetch a few common properties
   String name = (String)props.get(ContentModel.PROP_NAME);
   String title = (String)props.get(ContentModel.PROP_TITLE);

JSONObject obj = new JSONObject();

            // put some data on it
            obj.put(title,name);
            /
            // build a JSON string and send it back
            String jsonString = obj.toString();
            res.getWriter().write(jsonString);
        }
        catch(JSONException e)
        {
            throw new WebScriptException("Unable to serialize JSON");
        }
    }

Define the script inside webscript-context.xml as following

    <bean id="webscript.fields.get" 
      class="com.test.testa.demoamp.Fields"
      parent="webscript">

</bean>

And I create a config xml file fields.get.desc.xml

<webscript>
  <shortname>Fields</shortname>
  <description>Hands back a little bit of JSON</description>
  <url>/api/fields?nodeRef={nodeRef}</url>
   <authentication>user</authentication>
    <format default="json"></format>
   <property name="serviceRegistry" ref="ServiceRegistry" />
</webscript>

When I am executing the script from browser I am getting the following error

http://localhost:8080/alfresco/service/api/fields?nodeRef=workspace://SpacesStore/f96e024a-0a13-4bf9-905e-2ae3f5bcf450

{
    "status" : 
  {
    "code" : 500,
    "name" : "Internal Error",
    "description" : "An error inside the HTTP server which prevented it from fulfilling the request."
  },  

  "message" : "java.lang.NullPointerException",  
  "exception" : "java.lang.NullPointerException",

  "callstack" : 
  [ 
      ""      ,"java.lang.NullPointerException"
      ,"com.test.testa.demoamp.Fields_docx$$EPf3jZCD.execute(Fields_docx.java:94)"
      ,"com.test.testa.demoamp.Fields_docx$$DPf3jZCD.execute(Unknown Source)"
      ,"com.test.testa.demoamp.Fields_docx.execute(Fields_docx.java)"
      ,"org.alfresco.repo.web.scripts.RepositoryContainer$3.execute(RepositoryContainer.java:482)"
      ,"org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:457)"
      ,"org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:551)"
      ,"org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:619)"
      ,"org.alfresco.repo.web.scripts.RepositoryContainer.executeScriptInternal(RepositoryContainer.java:399)"
      ,"org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:280)"
      ,"org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:378)"
      ,"org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)"
      ,"org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132)"
      ,"javax.servlet.http.HttpServlet.service(HttpServlet.java:728)"
      ,"org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)"
      ,"org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)"
      ,"org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)"
      ,"org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)"
      ,"org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)"
      ,"org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:61)"
      ,"org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)"
      ,"org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)"
      ,"org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)"
      ,"org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)"
      ,"org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)"
      ,"org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)"
      ,"org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)"
      ,"org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)"
      ,"org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)"
      ,"org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)"
      ,"org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)"
      ,"org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)"
      ,"org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)"
      ,"java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)"
      ,"java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)"
      ,"java.lang.Thread.run(Thread.java:745)"

  ],

  "server" : "Community v5.0.0 (d r99759-b2) schema 8,022",
  "time" : "Mar 10, 2016 6:12:10 PM"
}

I have try various types of authentication none of them works. What is missing and the noderef is null ?

Gagravarr
  • 47,320
  • 10
  • 111
  • 156
mr antoni
  • 595
  • 1
  • 6
  • 17
  • 1
    Which line is your line 94 which is throwing the NPE? – Gagravarr Mar 10 '16 at 18:28
  • @Gagravarr while executing this line NodeService nodeService = serviceRegistry.getNodeService(); – mr antoni Mar 11 '16 at 08:13
  • Ah ha! You need to inject the service registry into your webscript through the spring bean definition. (Spring is pretty magic, but you don't have auto-wiring enabled so it's not complete magic!) – Gagravarr Mar 11 '16 at 09:21
  • @Gagravarr thank you for your answer. I had to re run clean install apache tomcat in alfresco sdk in order to apply this property. If you want answer this question so I could verify it. – mr antoni Mar 15 '16 at 08:05

1 Answers1

4

Your bean definition needs to be updated to inject serviceregistry to your bean

 <bean id="webscript.fields.get" 
  class="com.test.testa.demoamp.Fields"
  parent="webscript">
    <property name="serviceRegistry" ref="ServiceRegistry"/>
 </bean>

Hope this resolves your problem.

For each dependancy injections you need reference entry in your context file and bean declared as property with getter setter.

mitpatoliya
  • 2,037
  • 12
  • 23