1

I have created a banner document with an image and some text as content. I also have created a rest link with their rest service manager. But when running the below rest link, I get an NullPointerException:

rest link: http://localhost:8080/site/restapi/Banner?_type=json

My Banner.java bean is:

@XmlRootElement(name = "banner")
@XmlAccessorType(XmlAccessType.NONE)
@HippoEssentialsGenerated(internalName = "gogreen:bannerdocument")
@Node(jcrType = "gogreen:bannerdocument")
public class Banner extends BaseDocument {
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:title")
    public String getTitle() {
        return getProperty("gogreen:title");
    }

    @XmlJavaTypeAdapter(HippoHtmlAdapter.class)
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:content")
    public HippoHtml getContent() {
        System.out.println("**  Getting the NPE here: **********");
        return getHippoHtml("gogreen:content");
    }

    @HippoEssentialsGenerated(internalName = "gogreen:link")
    public HippoBean getLink() {
        return getLinkedBean("gogreen:link", HippoBean.class);
    }
    @HippoEssentialsGenerated(internalName = "gogreen:image")
    public Imageset getImage() {
        System.out.println("********  Getting the banner Image here **********");
        return getLinkedBean("gogreen:image", Imageset.class);
    }
..
}

I'm getting the NullPointerExeption in line:

return getHippoHtml("gogreen:content");

Banner already has contents (image/text) but getContent() returns null.. Please help me to resolve this issue:

Exception is:

[INFO] [talledLocalContainer] 13.11.2015 14:29:04 ERROR http-nio-8080-exec-8 [DefaultHstLinkCreator$HstLinkResolver.resolve:620] E
xception during creating link
[INFO] [talledLocalContainer] java.lang.NullPointerException
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.linking.DefaultHstLinkCreator$HstLinkResolver.resolve(DefaultHstLinkCreat
or.java:505)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.linking.DefaultHstLinkCreator.create(DefaultHstLinkCreator.java:136)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.content.rewriter.impl.SimpleContentRewriter.createLink(SimpleContentRewriter.j
ava:417)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.content.rewriter.impl.SimpleContentRewriter.getLink(SimpleContentRewriter.java
:374)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.content.rewriter.impl.SimpleContentRewriter.getBinaryLink(SimpleContentRewrite
r.java:298)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.content.rewriter.impl.SimpleContentRewriter.rewriteBinaryLink(SimpleContentRew
riter.java:274)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.content.rewriter.impl.SimpleContentRewriter.rewrite(SimpleContentRewriter.java
:179)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.content.rewriter.impl.SimpleContentRewriter.rewrite(SimpleContentRewriter.java
:84)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.content.rewriter.impl.SimpleContentRewriter.rewrite(SimpleContentRewriter.java
:42)
[INFO] [talledLocalContainer]   at org.onehippo.cms7.essentials.components.rest.adapters.HippoHtmlAdapter.marshal(HippoHtmlAdapter
.java:36)
[INFO] [talledLocalContainer]   at org.onehippo.cms7.essentials.components.rest.adapters.HippoHtmlAdapter.marshal(HippoHtmlAdapter
.java:27)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.module.jaxb.AdapterConverter.convert(AdapterConverter.java:33)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer.convertValue(StdDelegatingSerial
izer.java:238)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer.serialize(StdDelegatingSerialize
r.java:156)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:
505)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.ja
va:639)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSeri
alizer.java:100)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSeri
alizer.java:21)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.ja
va:183)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:
505)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.ja
va:639)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerPr
ovider.java:250)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:604)
[INFO] [talledLocalContainer]   at com.fasterxml.jackson.jaxrs.base.ProviderBase.writeTo(ProviderBase.java:648)
[INFO] [talledLocalContainer]   at org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1363)
[INFO] [talledLocalContainer]   at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:
244)
[INFO] [talledLocalContainer]   at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:1
17)
[INFO] [talledLocalContainer]   at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:80)

[INFO] [talledLocalContainer]   at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
[INFO] [talledLocalContainer]   at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java
:83)
[INFO] [talledLocalContainer]   at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
[INFO] [talledLocalContainer]   at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
[INFO] [talledLocalContainer]   at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)
[INFO] [talledLocalContainer]   at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223
)
[INFO] [talledLocalContainer]   at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)
[INFO] [talledLocalContainer]   at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.jaxrs.cxf.CXFJaxrsService.invoke(CXFJaxrsService.java:147)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.JaxrsRestServiceValve.invoke(JaxrsRestServiceValve.java:38)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline$Invocation.invokeNext(HstSitePipeline.java:269)

[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.GenericResponseHeadersValve.invoke(GenericResponseHeadersValve.
java:83)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline$Invocation.invokeNext(HstSitePipeline.java:269)

[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.SubjectBasedSessionValve.invoke(SubjectBasedSessionValve.java:5
8)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline$Invocation.invokeNext(HstSitePipeline.java:269)

[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.SecurityValve.invoke(SecurityValve.java:177)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline$Invocation.invokeNext(HstSitePipeline.java:269)

[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.CmsSecurityValve.invoke(CmsSecurityValve.java:82)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline$Invocation.invokeNext(HstSitePipeline.java:269)

[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.InitializationValve.invoke(InitializationValve.java:50)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline$Invocation.invokeNext(HstSitePipeline.java:269)

[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline.invokeValves(HstSitePipeline.java:170)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstSitePipeline.invoke(HstSitePipeline.java:153)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.core.container.HstRequestProcessorImpl.processRequest(HstRequestProcessorImpl.
java:79)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.container.HstDelegateeFilterBean.doFilter(HstDelegateeFilterBean.java:397)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.container.DelegatingFilter.doFilter(DelegatingFilter.java:84)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.container.HstFilter.doFilter(HstFilter.java:51)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:23
9)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
[INFO] [talledLocalContainer]   at org.hippoecm.hst.container.XSSUrlFilter.doFilter(XSSUrlFilter.java:52)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:23
9)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
[INFO] [talledLocalContainer]   at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter
.java:88)
[INFO] [talledLocalContainer]   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:23
9)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
[INFO] [talledLocalContainer]   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
[INFO] [talledLocalContainer]   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
[INFO] [talledLocalContainer]   at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
[INFO] [talledLocalContainer]   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
[INFO] [talledLocalContainer]   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
[INFO] [talledLocalContainer]   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)

[INFO] [talledLocalContainer]   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521)
[INFO] [talledLocalContainer]   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478)
[INFO] [talledLocalContainer]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[INFO] [talledLocalContainer]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[INFO] [talledLocalContainer]   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
Nomesh DeSilva
  • 1,649
  • 4
  • 25
  • 43

1 Answers1

0

You've used the Essentials Rest setup tool which generates an example or demo Rest implementation. After generating the setup a developer needs to extend and refine the result. By default, the links inside rich text in this setup are generated for the current mount, which is the REST mount. Since the images are not available through the REST mount, you get the /pagenotfound URL.

If you inspect the bean for the Banner you see that for the HippoHtml field an HippoHtmlAdapter is used. Check its code : it uses the SimpleContentRewriter. Create your own version of the Adapter and use an extended version of the ContentRewriter. Override the #rewriteBinaryLink method. In it call the super method, but specify the site mount as the target mount.

Adding an hst:alias to the site mount is a good idea so you can reference the site with the alias.