Builds fail to run on agents due to "no converter available"
Platform Notice: Data Center - This article applies to Atlassian products on the Data Center platform.
Note that this knowledge base article was created for the Data Center version of the product. Data Center knowledge base articles for non-Data Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Summary
Build plans fail to run and the following error can be seen in the <bamboo-agent-home>/atlassian-bamboo-agent.log
file
com.thoughtworks.xstream.converters.ConversionException: No converter available
Environment
The solution has been validated in Bamboo 9.6 and 9.4 but may be applicable to other versions.
This can also be seen when upgrading to Java 11 or Java 17.
Diagnosis
Build plans are unable to run and trigger the following error in the <bamboo-agent-home>/atlassian-bamboo-agent.log
file:
WARN [remoteEventRebroadcasterMessageListenerContainer-1] [AbstractMessageListenerContainer] Execution of JMS message listener failed, and no ErrorHandler has been set.
com.thoughtworks.xstream.converters.ConversionException: No converter available
---- Debugging information ----
message : No converter available
type : com.atlassian.bamboo.event.ServerFingerprintBroadcastEventV2
converter : com.atlassian.bamboo.serialization.xstream.StrippingConverter
message[1] : Could not initialize class net.sf.cglib.proxy.Enhancer
converter[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
message[2] : Unable to make field private static final long java.util.EventObject.serialVersionUID accessible: module java.base does not "opens java.util" to unnamed module @4eb6d1d0
version : not available
-------------------------------
at com.thoughtworks.xstream.core.DefaultConverterLookup.lookupConverterForType(DefaultConverterLookup.java:88) ~[xstream-1.4.20.jar:1.4.20]
The following errors can also be present in the <bamboo-agent-home>/logs/atlassian-bamboo.log
file:
INFO | jvm 1 | 2024/07/05 21:17:05 | 2024-07-05 21:17:05,483 ERROR [0-BAM::worker6-1.bar.iec.it.ubc.ca::Agent:pool-4-thread-1] [BuildAgentControllerImpl] Unknown error occurred on 'AHENT' when building Deployment of 'RELEASE' on 'ENVIRONMENT'. Agent will attempt process the build result...
INFO | jvm 1 | 2024/07/05 21:17:05 | com.google.common.util.concurrent.UncheckedExecutionException: io.atlassian.util.concurrent.LazyReference$InitializationException: com.thoughtworks.xstream.converters.ConversionException: com.thoughtworks.xstream.converters.enums.EnumSetConverter
INFO | jvm 1 | 2024/07/05 21:17:05 | ---- Debugging information ----
INFO | jvm 1 | 2024/07/05 21:17:05 | message : No converter available
INFO | jvm 1 | 2024/07/05 21:17:05 | type : java.util.EnumSet
INFO | jvm 1 | 2024/07/05 21:17:05 | converter : com.atlassian.bamboo.serialization.xstream.StrippingConverter
INFO | jvm 1 | 2024/07/05 21:17:05 | message[1] : Could not initialize class net.sf.cglib.proxy.Enhancer
INFO | jvm 1 | 2024/07/05 21:17:05 | converter[1] : com.thoughtworks.xstream.converters.enums.EnumSetConverter
INFO | jvm 1 | 2024/07/05 21:17:05 | message[2] : Could not initialize class com.thoughtworks.xstream.converters.enums.EnumSetConverter$Reflections
INFO | jvm 1 | 2024/07/05 21:17:05 | converter[2] : com.thoughtworks.xstream.converters.reflection.SerializableConverter
INFO | jvm 1 | 2024/07/05 21:17:05 | message[3] : Unable to make private void java.util.EnumSet.readObject(java.io.ObjectInputStream) throws java.io.InvalidObjectException accessible: module java.base does not "opens java.util" to unnamed module @7d4b5b0a
INFO | jvm 1 | 2024/07/05 21:17:05 | converter[3] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
INFO | jvm 1 | 2024/07/05 21:17:05 | message[4] : Unable to make field private static final long java.util.EnumSet.serialVersionUID accessible: module java.base does not "opens java.util" to unnamed module @7d4b5b0a
INFO | jvm 1 | 2024/07/05 21:17:05 | class : com.atlassian.bamboo.deployments.expiry.DeploymentExpiryConfig
INFO | jvm 1 | 2024/07/05 21:17:05 | required-type : com.atlassian.bamboo.deployments.expiry.DeploymentExpiryConfig
INFO | jvm 1 | 2024/07/05 21:17:05 | converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
INFO | jvm 1 | 2024/07/05 21:17:05 | path : /org.springframework.remoting.support.RemoteInvocationResult/value/deploymentExpiryConfig/expiryTypes
INFO | jvm 1 | 2024/07/05 21:17:05 | line number : 23
INFO | jvm 1 | 2024/07/05 21:17:05 | class[1] : com.atlassian.bamboo.configuration.AdministrationConfigurationImpl
INFO | jvm 1 | 2024/07/05 21:17:05 | required-type[1] : com.atlassian.bamboo.configuration.AdministrationConfigurationImpl
INFO | jvm 1 | 2024/07/05 21:17:05 | class[2] : org.springframework.remoting.support.RemoteInvocationResult
INFO | jvm 1 | 2024/07/05 21:17:05 | required-type[2] : org.springframework.remoting.support.RemoteInvocationResult
INFO | jvm 1 | 2024/07/05 21:17:05 | version : not available
INFO | jvm 1 | 2024/07/05 21:17:05 | -------------------------------
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2086) ~[guava-32.1.2-jre.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.google.common.cache.LocalCache.get(LocalCache.java:4012) ~[guava-32.1.2-jre.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4035) ~[guava-32.1.2-jre.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5013) ~[guava-32.1.2-jre.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5020) ~[guava-32.1.2-jre.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.v2.build.agent.remote.RemoteBuildLoggerManager.getLogger(RemoteBuildLoggerManager.java:119) ~[atlassian-bamboo-agent-remote-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.v2.build.agent.remote.RemoteBuildLoggerManager.getLogger(RemoteBuildLoggerManager.java:103) ~[atlassian-bamboo-agent-remote-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:151) ~[atlassian-bamboo-agent-core-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.lambda$start$0(DefaultBuildAgent.java:124) ~[atlassian-bamboo-agent-core-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.utils.BambooRunnables$1.run(BambooRunnables.java:48) ~[atlassian-bamboo-api-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.security.ImpersonationHelper.runWith(ImpersonationHelper.java:26) ~[atlassian-bamboo-api-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.security.ImpersonationHelper.runWithSystemAuthority(ImpersonationHelper.java:17) ~[atlassian-bamboo-api-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at com.atlassian.bamboo.security.ImpersonationHelper$1.run(ImpersonationHelper.java:41) ~[atlassian-bamboo-api-9.2.13.jar:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | at java.lang.Thread.run(Thread.java:840) ~[?:?]
INFO | jvm 1 | 2024/07/05 21:17:05 | Caused by: io.atlassian.util.concurrent.LazyReference$InitializationException: com.thoughtworks.xstream.converters.ConversionException: No converter available
Cause
Performance enhancements have been observed across Java versions 8, 11, and 17, although some classes now require additional parameters to function optimally. If the agent is not upgraded or manually updated as per the Bamboo remote agent installation guide, the properties outlined in the Solution section within the wrapper.conf file of the agent operating on Java 11 or Java 17 will not be updated and will result in the build plan being unable to execute. This will trigger the error detailed in the Diagnosis section.
The "Cannot invoke "Object.toString()" because the return value of "java.util.Map$Entry.getValue()" is null" has also been observed due to version mismatches between the agent and Bamboo, and on scenarios of Operating System upgrades.
Solution
The solution consists of ensuring that agents running on Java 11 or Java 17 can perform the necessary conversions effectively. This can be achieved in two ways:
Reinstall the agent
When upgrading Bamboo from versions 8.0–9.3 to version 9.4 or later it's recommended to download a new remote agent JAR from your upgraded Bamboo and reinstall the wrapper:
Workaround
An workaround to solve this error is to update the wrapper
configuration manually through the steps below:
- Stop the original agent.
- Open the wrapper configuration file
<BAMBOO_AGENT_HOME>/conf/wrapper.conf
. In the
wrapper.conf
file, replace the values for the following properties (or add them if they are not there):wrapper.java.version.min=11 wrapper.java.version.max=17 wrapper.java.version.fallback=11 wrapper.java.additional.4=--add-opens=java.base/java.util=ALL-UNNAMED wrapper.java.additional.5=--add-opens=java.base/java.lang=ALL-UNNAMED wrapper.java.additional.6=--add-opens=java.base/sun.net.www.protocol.http=ALL-UNNAMED wrapper.java.additional.7=--add-opens=java.base/sun.net.www.protocol.https=ALL-UNNAMED
Please ensure that you use a sequential number as per your wrapper.java.additional properties.
- Start the agent.