Channel Manager Troubleshooting - BloomReach Experience - Open Source CMS

This article covers a Hippo CMS version 12. There's an updated version available that covers our most recent release.

08-01-2018

Channel Manager Troubleshooting

Contents

This page describes common problems with the Channel Manager and Channel Editor and how to solve them:

Common Problems

Channel Editor says "Unable to change to composermode. Please check if the site is online."

  1. Check whether the site works by accessing it directly.

  2. Check whether the hst:cmslocation is configured correctly. Something like:

    /hst:hst:
      /hst:hosts:
        /dev-env:
          hst:cmslocation: http://localhost:8080/cms

    and:

    /hst:hst:
      /hst:hosts:
        /acct-env:
          hst:cmslocation: http://www.acct.example.com/cms
  3. If the channel manager works locally, but not on the server, check if you see a 404 message in Firebug in the channel manager, for example the following gives a 404:
    http://cms.example.org/site/_rp/cafebabe-cafe-babe-cafe-babecafebabe./keepalive/?FORCE_CLIENT_HOST=true&_dc=1374269666016
    Then most likely you missed Apache config as shown below under Preview of channels in the CMS and in a separate window does not work behind Apache web server.

Channel does not load and network shows a 409 (conflict)

This can happen in a clustered environment when you did not set up the loadbalancer correctly. See Bloomreach Experience Manager Loadbalancing Requirements how to set up the loadbalancer correctly.

'New' option is not available in Page menu

If in the Channel Manager you have the menu 'Page' open but you do not see the 'New' option as shown in the image below, then your project configuration does not have any prototype pages defined. The option will only be available for configurations that have prototype pages. If you add prototypes, the button will appear.

Channel cannot be previewed in a new window

When the 'Preview' link behind the channel name in the channel overview does not work:

  1. If you are accessing the site without portnumber, make sure that from your /hst:hst/hst:hosts/_your_hostgroup_ you remove the property hst:defaultport

  2. On /hst:hst/hst:hosts you are missing the property hst:defaultcontextpath. This property must be present and have the value of the contextpath (in case the site is deployed as ROOT.war the value must be empty string), including the starting /. The default value is /site:

    /hst:hst:
      /hst:hosts:
        hst:defaultcontextpath: /site

"This perspective could not be loaded. This is caused by the CMS not being able to connect to the site, either because the site is down or due to a misconfiguration. Please contact your system administrator."

If you see the above message, you should test whether the server side rest calls over 127.0.0.1 are requested and return within 1 second. You can check this by adding hst:diagnosticsenabled and hst:diagnosticsforips to hst:hosts as follows:

/hst:hst:
  /hst:hosts:
    hst:diagnosticsenabled: true
    hst:diagnosticsforips: 127.0.0.1

Now, when opening the channels perspective in the CMS, you should see logging something like:

INFO  [org.hippoecm.hst.core.container.DiagnosticReportingValve.logDiagnosticSummary():47] Diagnostic Summary:
   HstDelegateeFilterBean (11ms): {request=Request{ method='GET', scheme='http', host='127.0.0.1:8080', requestURI='/site/_cmsrest/channels/', queryString='null'}} 

If you do not see the above request, there must be some configuration problem.

Most likely the hstRestProxyService (at /hippo:configuration/hippo:frontend/cms/cms-services/hstRestProxyService) has an incorrect URI configured.

Note that you cannot refer to localhost in the rest.uri property. Use 127.0.0.1 instead.

(If you want to use IPv6 use http://[::1]/site/_cmsrest instead)

'View document in channel' menu does not work

You cannot view a document in a channel, and whenever you edit a document an error similar to the following is logged:

Caused by: java.net.ConnectException: ConnectException invoking http://127.0.0.1:8080
     /site/_cmsrest/documents/c23ac389-ceda-4117-be37-e063c2f9e405/channels/:
     Connection refused

Most likely you are running the application on a different port than the default 8080. See "This perspective could not be loaded [...]" above.

Preview of channels in the CMS and in a separate window does not work behind Apache Web Server

Make sure that VirtualHost configuration for the cms also contains a extra PROXYPASS for /site/

<VirtualHost *:80>
  ServerName cms.example.com

  ProxyPreserveHost Off

  #INCLUDE THE EXTRA PROXYPASS RULE FOR /site HERE
  ProxyPass /site/ http://127.0.0.1:8080/site/
  ProxyPass / http://127.0.0.1:8080/cms/
  ProxyPassReverse / http://127.0.0.1:8080/cms/
  ProxyPassReverseCookiePath /cms /
</VirtualHost>

Opening a channel shows a blank page

This can happen if your network infrastructure have disabled http HEAD requests, for example in a Citrix virtualization environment. In this case, you have to contact your system administrators in order to verify HEAD request type is not blocked.

This can also happen if you integrated the CMS authoring application with a web application security framework (such as Spring Security) which sets the response header X-Frame-Options to DENY. Bloomreach Experience Manager requires an X-Frame-Options response header value SAMEORIGINSpring Security Framework sets it to DENY by default since version 4.0. If you integrated with Spring Security Framework version 4.0 or later, change the response header value to SAMEORIGIN.

Wrong or empty channel opens in Channel Manager

This can only happen in CMS 12.0.0 or higher and the solution is also only valid for version 12.0.0 or higher

In the logs you can find messages back something like

WARN  http-nio-8080-exec-3 [VirtualHostsService.warnDuplicateChannel:450] Skip channel with id '${project-channel}' because already present for host group '${project-specific-hostgroup}'. Most likely there is a parent channel that already is a channel mngr channel. Set 'hst:nochannelinfo = true' on mount 'MountService [jcrPath=${project-specific-path}, hostName=${project-specific-host}]' to avoid this problem.

This can be a result of a very specific setup that used to work a tiny bit different in older versions, but works a tiny bit different in versions since CMS 12.0.0. The cause and fix and described at Explicitly hide a Mount in the Channel Manager.

Unable to find package resource nl.png

If you get a warning like this in the log files:

WARN [org.apache.wicket.markup.html.PackageResource.getResourceStream():594]
 Unable to find package resource [path = org/onehippo/cms7/channelmanager/channels/nl.png, style = null, locale = null]  

make sure the hst:locale in the accessed mount is a proper Java locale like nl_NL

Warnings/errors from RestProxyServicesManager

In the logs you might see something like:

11.12.2013 12:20:11 WARN  [org.onehippo.cms7.channelmanager.restproxy.RestProxyServicesManager.getLiveRestProxyServices:136]
Site for contextPath {} is not live. Re-checking in {} milliseconds.

Note that even on the server the application is running testing the URL http://127.0.0.1:8080/site/_cmsrest/sites/_isAlive via curl or wget does not work because encoded header credentials are required. The request can only be done by the application itself.

If you see the error above, you have configuration errors for the rest proxy service. The default single site.war webapp rest proxy configuration is located at:

http://localhost:8080/cms/console/?1&path=/hippo:configuration/hippo:frontend/cms/cms-services/hstRestProxyService

Make sure the context.path and request.uri are configured correctly. Note that after changing a rest proxy service configuration, you have to logout and then login again into the cms to see the changes

After changing rest proxy configuration below cms-services, you have to logout and login again in the cms to see the changes

How to enable logging on request/response payloads in hstRestProxyService

The rest proxy service mentioned above is responsible for making requests and getting responses (e.g, http://127.0.0.1:8080/site/_cmsrest/sites/_isAlive) in the server-side (between hstRestProxyService and HST CMS REST APIs) for Channel Manager.

You can set the log level to INFO for the folllowing logger to see logs of the request/response payloads:

  <!-- Enable RestProxy logging. e.g, http message payloads in the server-side. -->
  <Logger name="org.hippoecm.frontend.service.restproxy.logging" level="info"/>

Then it will give helpful logs on every payload in ther server-side, so that you can trace how it works as well. Here are some example logs:

10.10.2017 23:15:47 INFO  Thread-26 [AbstractLoggingInterceptor.log:274] Outbound Message
---------------------------
ID: 1
Address: http://127.0.0.1:8080/site/_cmsrest/sites/_isAlive
Http-Method: GET
Content-Type: 
Headers: {X-CMS-CS-ID=[fc741309-15b1-4bda-8482-98aca1f8500f], X-CMS-SC-ID=[669e1c14-0237-481d-bf00-b0879281b788], X-CMSREST-CMSHOST=[localhost:8080], Accept=[*/*]}
--------------------------------------
10.10.2017 23:15:47 INFO  Thread-26 [AbstractLoggingInterceptor.log:274] Inbound Message
----------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/plain;charset=UTF-8
Headers: {Cache-Control=[no-cache], Content-Length=[4], content-type=[text/plain;charset=UTF-8], Date=[Sat, 09 Sep 2017 03:15:47 GMT], Expires=[Thu, 01 Jan 1970 00:00:00 GMT], Pragma=[no-cache]}
Payload: true
...

No channels showing up in the channel manager list

This troubleshooting item only applies if you have deployed your site as ROOT.war. In case the site works correctly, but without any warnings/errors being logged the channel manager does not show any channels, make sure that the property hst:defaultcontextpath is present and has empty value like below

/hst:hst:
  /hst:hosts:
    hst:defaultcontextpath: (empty string)

Channels are showing a blank page with message to reload page

  • Try reloading CMS interface after removing browser cache data
  • Check if response header contains header with name X-Frame-Options and value "DENY".

Stacktraces MissingResourceException when clicking 'Channel Settings' in channel manager

When you see stacktraces when clicking 'Channel Settings' like below:

17.12.2013 15:05:55 ERROR [org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage():116] Error occurred during error handling, give up!
 org.apache.cxf.interceptor.Fault: Can't find bundle for base name org.onehippo.forge.channels.WebsiteInfo, locale en
 at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
 at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
 at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:167)
...
...
...
Caused by: java.util.MissingResourceException: Can't find bundle for base name org.example.channels.WebsiteInfo, locale en
 at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499)
 at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322)
 at java.util.ResourceBundle.getBundle(ResourceBundle.java:795)
...
... 

Then you either do not have added i18n resource bundles (in this case WebsiteInfo.properties, WebsiteInfo_de.properties, etc) next to the WebsiteInfo class, or, in case you have, you do not have added to the site/pom.xml <build> section the following part:

<build>
    ...
    ...
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <filtering>false</filtering>
        <includes>
          <include>**/*.properties</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
</build>

Changes in Blueprints through the Console are not visible in the Channel Manager at 'Add Channel'

This is due to caching of blueprints. To be able to see the changes, made to blueprints in the /console, in the Channel Manager, you need to logout from the CMS and login again.

Blueprint 'reusing existing content' does not work

Even though you have added a hst:site node with hst:content property to the blueprint, still you do not get to see a picker to select the existing content to use for a new channel. When this is the case, it might be that for your blueprint, you still have a bootstrap content node (same name as blueprint node) configured below /hippo:configuration/hippo:queries/hippo:templates/new-subsite/hippostd:templates. That one takes precedence over the hst:site/hst:content property.

Channel Manager shows: HTTP status 404 - /cms/angular/hippo-cms/index.html

When clicking a channel in the channel manager overview, you get to see something like:

channel manager 404

The problem above is most likely a result of a site created against version CMS 10 or earlier, and while  upgrading, the cms web.xml has not been correctly upgraded. Make sure you follow the following steps:

At cms/src/main/webapp/WEB-INF/web.xml you need to add a new servlet AngularResourceServlet and a new servlet mapping for the rewrite of the channel manager in angular, see Upgrade Channel Manager. Above the servlet CKEditorResourceServlet you need to add:

<servlet>
  <servlet-name>AngularResourceServlet</servlet-name>
  <servlet-class>org.onehippo.cms7.utilities.servlet.ResourceServlet</servlet-class>
  <init-param>
    <param-name>jarPathPrefix</param-name>
    <param-value>/angular</param-value>
  </init-param>
  <init-param>
    <param-name>allowedResourcePaths</param-name>
    <param-value>
      ^/.*\..*
    </param-value>
  </init-param>
</servlet>

and above the servlet mapping for CKEditorResourceServlet you need to add:

<servlet-mapping>
  <servlet-name>AngularResourceServlet</servlet-name>
  <url-pattern>/angular/*</url-pattern>
</servlet-mapping>

No borders visible for containers and components

The Channel Manager relies on HTML comments in the markup to be able to render containers and components. For instance, taken from our demo environment, the HST inserts comments like this in the page:

<!-- { "HST-Label":"bannercarousel", "HST-LastModified":"1490608164816", "HST-XType":"HST.Item", "uuid":"8d3699eb-fb88-41c9-8d10-590c2b7f9335", "HST-Type":"CONTAINER_ITEM_COMPONENT", "refNS":"r33_r1_r1_r1", "url":"/site/_cmsinternal/uk?_hn:type=component-rendering&_hn:ref=r33_r1_r1_r1"} -->

with a matching end comment:

<!-- { "uuid":"8d3699eb-fb88-41c9-8d10-590c2b7f9335", "HST-End":"true"} -->

If (blue) borders are not showing for containers and components in the Channel Manager, this can be caused by an optimization in your webapp container or web server. For instance, in Tomcat there could be a filter installed that strips out HTML comments. Web servers like Apache httpd or Nginx also have optimization capabilities. 

To resolve this, configure your set-up to not strip HTML comments during CMS requests.

Channel settings not editable

There can be multiple reasons why channel settings are not editable (read-only). It can be that the channel settings have been modified by someone else but not yet published. In this case, the settings are locked. It can also be that the entire hst:configuration node has hst:locked = true, resulting in that everything is locked. Another possibility is that the hst:channel node is located directly below the hst:configuration node and not below the hst:workspace. So if for example your channel is myproject, and the channel node location is

/hst:hst:
  /hst:configurations:
    /myproject:
      /hst:channel:
        /hst:channelinfo:

then the channel settings in the Channel Manager will be read-only. To make the channel settings editable, move the node below hst:workspace

/hst:hst:
  /hst:configurations:
    /myproject:
      /hst:workspace:
        /hst:channel:
          /hst:channelinfo:

Last reason why the channel settings can be read-only is the hst:channel node is not configured below the hst:configuration for the channel you are looking at, but that it comes from an inherited channel. In that case, the channel settings are read-only as well.

Did you find this page helpful?
How could this documentation serve you better?
On this page
    Did you find this page helpful?
    How could this documentation serve you better?