Enonic version: 7.1.1
OS: Ubuntu 19
I want to retrieve the Publish log message from a content. Is it possible?
I want to retrieve the Publish log message from a content. Is it possible?
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.
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. I’ve just checked it. That code works for me:
final NodeCommitEntry nodeCommitEntry = nodeService.getCommit( NodeCommitId.from("...") );
nodeCommitEntry.getMessage();
Please make sure that:
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();
}
}
It worked.
Many thanks.