How to get log message from Publish?

Enonic version: 7.1.1
OS: Ubuntu 19

I want to retrieve the Publish log message from a content. Is it possible?

1 Like

In Java, we’ve created a class that, in short, imports NodeService, NodeCommitEntry and then get the message with the following line:
final NodeCommitEntry nodeCommitEntry = nodeService.getCommit(new NodeCommitId().from(commitId));
The commitId value comes from RepoConnection -> getActiveVersion.

2 Likes

Hi,

I’m trying to use this to get the log message, but I’m getting a NullPointerException.

Right now I have the following in Java:
import com.enonic.xp.node.NodeCommitEntry;
import com.enonic.xp.node.NodeCommitId;
import com.enonic.xp.node.NodeService;

public class PublishLog {
  private NodeService ns;
  public NodeCommitEntry getPublishLogMessage(final String id)
  {
    NodeCommitId commitid = (new NodeCommitId()).from(id);
    NodeCommitEntry nce = ns.getCommit(commitid);
    // String nce = ns.getCommit(commitid).getMessage();
    // System.out.println(nce);
    return nce;
  }
}

And this in datatoolbox:

I already confirmed commitid has the value af73d821-fc55-4c3a-90ac-c4d9835236a6.

Am I missing anything?

Hi @maaubt,

Can you post your stack trace here?

Hi @maaubt. I’ve just checked it. That code works for me:

final NodeCommitEntry nodeCommitEntry = nodeService.getCommit( NodeCommitId.from("...") );
nodeCommitEntry.getMessage();

Please make sure that:

  1. NodeService is not null.
  2. The call of method executes in the correct context (branch, repositoryId, authInfo). If you have a wrong context please use com.enonic.xp.repo.impl.node.ContextBuilder to build it.

Hi @asi. I found that my nodeService variable is actually null. How do I set it properly, as it seems to be an abstract class?

Edit: I’m a bit out of practice on Java coding

hdir-xp-app    | Caused by: java.lang.NullPointerException: null
hdir-xp-app    | 	at no.seeds.helsedir.publishlog.PublishLog.getPublishLogMessage(PublishLog.java:13)
hdir-xp-app    | 	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$8349$637$publishlog.L:1#getlog#\==\_\!24(helsedirektoratet:/lib/api/publishlog.js:26)
hdir-xp-app    | 	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(Unknown Source)
hdir-xp-app    | 	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(Unknown Source)
hdir-xp-app    | 	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(Unknown Source)
hdir-xp-app    | 	at jdk.nashorn.javaadapters.java_util_concurrent_Callable.call(Unknown Source)
hdir-xp-app    | 	at com.enonic.xp.context.ContextImpl.callWith(ContextImpl.java:102)
hdir-xp-app    | 	at com.enonic.xp.lib.context.ContextHandlerBean.run(ContextHandlerBean.java:36)
hdir-xp-app    | 	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$8265$1216AA$context.L:1#run(helsedirektoratet:/lib/xp/context.js:56)
hdir-xp-app    | 	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$8347$160A$publishlog.L:1#getlog(helsedirektoratet:/lib/api/publishlog.js:13)
hdir-xp-app    | 	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$8346$121A$testService/0x00000008011bec40.L:1#get(helsedirektoratet:/services/testService/testService.js:7)
hdir-xp-app    | 	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(Unknown Source)
hdir-xp-app    | 	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(Unknown Source)
hdir-xp-app    | 	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(Unknown Source)
hdir-xp-app    | 	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.ScriptObjectMirror.call(Unknown Source)
hdir-xp-app    | 	at com.enonic.xp.script.impl.value.FunctionScriptValue.call(FunctionScriptValue.java:36)
hdir-xp-app    | 	... 154 common frames omitted

@maaubt please try this

import java.util.function.Supplier;

import com.enonic.xp.node.NodeCommitEntry;
import com.enonic.xp.node.NodeCommitId;
import com.enonic.xp.node.NodeService;
import com.enonic.xp.script.bean.BeanContext;
import com.enonic.xp.script.bean.ScriptBean;

public class PublishLog
    implements ScriptBean
{

    private Supplier<NodeService> nodeServiceSupplier;

    @Override
    public void initialize( final BeanContext context )
    {
        this.nodeServiceSupplier = context.getService( NodeService.class );
    }

    public Object getLog( final String id )
    {
        final NodeCommitEntry commitEntry = nodeServiceSupplier.get().getCommit( NodeCommitId.from( id ) );

        // map commit entry to DTO or just return message;

        return commitEntry.getMessage();
    }
}
1 Like

It worked.

Many thanks.