Unable to complete execution of health check Collaborative Editing Mode due to an exception
Asked by David Bonet Montes:

Hello all,

I have this error in our Confluence server (latest version).

All is working unless collaborative edition. In the logs, when I set the debug mode shows this log:

```
WARN [HealthCheckWatchdog:thread-3] [troubleshooting.healthcheck.concurrent.SupportHealthCheckTask] healthCheckError Unable to complete execution of health check Collaborative Editing Mode due to an exception
java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Base URL misconfigured: <null>
?? ?at java.util.concurrent.FutureTask.report(FutureTask.java:122)
?? ?at java.util.concurrent.FutureTask.get(FutureTask.java:206)
?? ?at com.atlassian.troubleshooting.healthcheck.concurrent.SupportHealthCheckTask.getFutureWithTimeout(SupportHealthCheckTask.java:88)
?? ?at com.atlassian.troubleshooting.healthcheck.concurrent.SupportHealthCheckTask.lambda$runAsync$0(SupportHealthCheckTask.java:68)
?? ?at java.util.concurrent.FutureTask.run(FutureTask.java:266)
?? ?at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
?? ?at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
?? ?at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Base URL misconfigured: <null>
?? ?at com.atlassian.confluence.api.impl.sal.ConfluenceApplicationProperties.getCanonicalContextPath(ConfluenceApplicationProperties.java:94)
?? ?at com.atlassian.fugue.Option$2.fold(Option.java:373)
?? ?at com.atlassian.fugue.Option.getOrElse(Option.java:207)
?? ?at com.atlassian.confluence.api.impl.sal.ConfluenceApplicationProperties.getBaseUrl(ConfluenceApplicationProperties.java:58)
?? ?at sun.reflect.GeneratedMethodAccessor323.invoke(Unknown Source)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
?? ?at com.sun.proxy.$Proxy317.getBaseUrl(Unknown Source)
?? ?at sun.reflect.GeneratedMethodAccessor323.invoke(Unknown Source)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
?? ?at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
?? ?at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
?? ?at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
?? ?at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
?? ?at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
?? ?at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
?? ?at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
?? ?at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
?? ?at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
?? ?at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
?? ?at com.sun.proxy.$Proxy1671.getBaseUrl(Unknown Source)
?? ?at com.atlassian.troubleshooting.healthcheck.SupportHealthStatusBuilder.getHelpPathUrl(SupportHealthStatusBuilder.java:114)
?? ?at com.atlassian.troubleshooting.healthcheck.SupportHealthStatusBuilder.buildStatus(SupportHealthStatusBuilder.java:135)
?? ?at com.atlassian.troubleshooting.healthcheck.SupportHealthStatusBuilder.warning(SupportHealthStatusBuilder.java:75)
?? ?at com.atlassian.troubleshooting.confluence.healthcheck.support.CollabEditingModeSupportHealthCheck.check(CollabEditingModeSupportHealthCheck.java:39)
?? ?at com.atlassian.troubleshooting.healthcheck.impl.PluginSuppliedSupportHealthCheck.check(PluginSuppliedSupportHealthCheck.java:49)
?? ?... 4 more
Caused by: java.net.MalformedURLException
?? ?at java.net.URL.<init>(URL.java:627)
?? ?at java.net.URL.<init>(URL.java:490)
?? ?at java.net.URL.<init>(URL.java:439)
?? ?at com.atlassian.confluence.api.impl.sal.ConfluenceApplicationProperties.getCanonicalContextPath(ConfluenceApplicationProperties.java:92)
?? ?... 37 more
Caused by: java.lang.NullPointerException
?? ?at java.net.URL.<init>(URL.java:532)
?? ?... 40 more
```

It confuses me because the base url is set. I'm in a subdomain (like confluence.mycompay.com) and my base url is correct. I edited this fragment of the server.xml.

```
??????? <Engine name="Standalone" defaultHost="localhost" debug="0">
??????????? <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="false" startStopThreads="4">
??????????????? <Context path="/" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true">
??????????????????? <!-- Logging configuration for Confluence is specified in confluence/WEB-INF/classes/log4j.properties -->
??????????????????? <Manager pathname=""/>
??????????????????? <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="60"/>
??????????????? </Context>
??????????????? <Context path="${confluence.context.path}/synchrony-proxy" docBase="../synchrony-proxy" debug="0"
???????????????????????? reloadable="false" useHttpOnly="true">
??????????????????? <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="60"/>
??????????????? </Context>
??????????? </Host>
??????? </Engine>
```

As you can see I set the path to "/" instead of empty. But still the exception says that is null. In the global configuration I have the base url set correctly.

Do you have any idea of why is that failing?


Answers:
author: David Bonet Montes
body: Hi! Finally it came to be a Confluence cloud to server migration bug: <https://jira.atlassian.com/browse/CONFSERVER-45919>  

Just edit and save the general configs and it solved the problem

comments: author: Flora Vidal
body: Hey David,

Many thanks for posting your solution. It worked for us too !

Cheers !


author: Puneet Baradia
body: Hey David

Yes the solution is right. It worked ,many thanks for the solution.


author: David Bonet Montes
body: Does anyone has the same problem?  
If you need any extra detail, please, don't hesitate to ask for it.


Tags: synchrony