Bitbucket Data Center is not starting due to DocumentBuilderFactoryImpl class not found
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
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
After attempting to add the AppDynamics java agent or after upgrading, Bitbucket Data Center fails to start.
Environment
- Bitbucket Data Center
- AppDynamics Java Agent
Diagnosis
The following appears in the atlassian-bitbucket.log
file after the failed Bitbucket start was attempted:
2024-08-16 16:21:02,522 ERROR [FelixDispatchQueue] c.a.p.o.c.f.FelixOsgiContainerManager Framework error in bundle org.eclipse.gemini.blueprint.extender
org.osgi.framework.BundleException: Activator start error in bundle org.eclipse.gemini.blueprint.extender [6].
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2479)
at java.base/java.lang.Thread.run(Thread.java:842)
... 3 frames trimmed
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from OSGi resource[bundle://02cfbe30-65f3-4d5b-a948-0dd78ee49197_11.0:0/META-INF/spring/extender/bitbucket-plugin-extender.xml|bnd.id=6|bnd.sym=org.eclipse.gemini.blueprint.extender]; nested exception is javax.xml.parsers.FactoryConfigurationError: Provider for class javax.xml.parsers.DocumentBuilderFactory cannot be created
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:417)
at org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext.loadBeanDefinitions(OsgiBundleXmlApplicationContext.java:171)
at org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext.loadBeanDefinitions(OsgiBundleXmlApplicationContext.java:141)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:679)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:562)
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$301(AbstractDelegatedExecutionApplicationContext.java:57)
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$1.run(AbstractDelegatedExecutionApplicationContext.java:165)
at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.normalRefresh(AbstractDelegatedExecutionApplicationContext.java:161)
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$NoDependenciesWaitRefreshExecutor.refresh(AbstractDelegatedExecutionApplicationContext.java:75)
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:154)
at org.eclipse.gemini.blueprint.extender.internal.support.ExtenderConfiguration.start(ExtenderConfiguration.java:164)
at org.eclipse.gemini.blueprint.extender.internal.boot.ChainActivator.start(ChainActivator.java:93)
... 2 common frames omitted
Caused by: javax.xml.parsers.FactoryConfigurationError: Provider for class javax.xml.parsers.DocumentBuilderFactory cannot be created
at java.xml/javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:307)
at java.xml/javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:262)
at java.xml/javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:172)
at org.eclipse.gemini.blueprint.context.support.BlueprintDocumentLoader.createDocumentBuilderFactory(BlueprintDocumentLoader.java:42)
... 15 common frames omitted
Caused by: java.lang.RuntimeException: Provider for class javax.xml.parsers.DocumentBuilderFactory cannot be created
at java.xml/javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:304)
... 18 common frames omitted
Caused by: java.util.ServiceConfigurationError: javax.xml.parsers.DocumentBuilderFactory: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:593)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1219)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1228)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
at java.xml/javax.xml.parsers.FactoryFinder$1.run(FactoryFinder.java:289)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.xml/javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:285)
... 18 common frames omitted
The plugins will time out in starting, which is not root the issue. While no specific AppDynamics error is specifically mentioned, we can see reference for the Felix boot delegation: "org.osgi.framework.bootdelegation=META-INF.services,com.singularity.". This class belongs to AppDynamics, which is a JVM monitoring tool to view your application metrics and more.
2024-08-16 16:21:00,536 DEBUG [spring-startup] c.a.p.o.c.f.FelixOsgiContainerManager Felix configuration: {felix.bootdelegation.implicit=false, felix.cache.rootdir=/opt/stash/data/plugins/.osgi-cache/felix, felix.log.level=4, felix.log.logger=com.atlassian.plugin.osgi.container.felix.FelixLoggerBridge@c057780, org.osgi.framework.bootdelegation=META-INF.services,com.singularity.,com.jprofiler,com.jprofiler.,org.apache.xerces,org.apache.xerces.,org.apache.xalan,org.apache.xalan.,sun.,com.sun.jndi,com.icl.saxon,com.icl.saxon.,javax.servlet,javax.servlet.,com.sun.xml.bind.,jdk.internal.reflect,jdk.internal.reflect.*, org.osgi.framework.bundle.parent=framework, org.osgi.framework.system.packages.extra=ch.qos.logback.classic;version=1.2.13,ch.qos.logback.classic.boolex;version=1.2.13,ch.qos.logback.classic.db.names;version=1.2.13,ch.qos.logback.classic.db.script;version=1.2.13,ch.qos.logback.classic.encoder;version=1.2.13,ch.qos.logback.classic.filter;version=1.2.13,ch.qos.logback.classic.helpers;version=1.2.13,ch.qos.logback.classic.html;version=1.2.13,ch.qos.logback.classic.jmx;version=1.2.13,ch.qos.logback.classic.joran;version=1.2.13,ch.qos.logback.classic.joran.action;version=1.2.13,ch.qos.logback.classic.jul;version=1.2.13,ch.qos.logback.classic.layout;version=1.2.13,ch.qos.logback.classic.log4j;version=1.2.13,ch.qos.logback.classic.net;version=1.2.13,ch.qos.logback.classic.net.server;version=1.2.13,ch.qos.logback.classic.pattern;version=1.2.13,ch.qos.logback.classic.pattern.color;version=1.2.13,ch.qos.logback.classic.selector;version=1.2.13,ch.qos.logback.classic.selector.servlet;version=1.2.13,ch.qos.logback.classic.servlet;version=1.2.13,ch.qos.logback.classic.sift;version=1.2.13,ch.qos.logback.classic.spi;version=8.19.5,ch.qos.logback.classic.turbo;version=1.2.13,ch.qos.logback.classic.util;version=1.2.13,ch.qos.logback.core;version=1.2.13,ch.qos.logback.core.boolex;version=1.2.13,ch.qos.logback.core.encoder;version=1.2.13,ch.qos.logback.core.filter;version=1.2.13,ch.qos.logback.core.helpers;version=1.2.13,ch.qos.logback.core.hook;version=1.2.13,ch.qos.logback.core.html;version=1.2.13,ch.qos.logback.core.joran;version=1.2.13,ch.qos.logback.core.joran.action;version=1.2.13,ch.qos.logback.core.joran.conditional;version=1.2.13,ch.qos.logback.core.joran.event;version=1.2.13,ch.qos.logback.core.joran.event.stax;version=1.2.13,ch.qos.logback.core.joran.node;version=1.2.13,ch.qos.logback.core.joran.spi;version=1.2.13,ch.qos.logback.core.joran.util;version=1.2.13,ch.qos.logback.core.joran.util.beans;version=1.2.13,ch.qos.logback.core.layout;version=1.2.13,ch.qos.logback.core.net;version=1.2.13,ch.qos.logback.core.net.server;version=1.2.13,ch.qos.logback.core.net.ssl;version=1.2.13,ch.qos.logback.core.pattern;version=1.2.13,ch.qos.logback.core.pattern.color;version=1.2.13,ch.qos.logback.core.pattern.parser;version=1.2.13,ch.qos.logback.core.pattern.util;version=1.2.13,ch.qos.logback.core.property;version=1.2.13,ch.qos.logback.core.read;version=1.2.13,ch.qos.logback.core.recovery;version=1.2.13,ch.qos.logback.core.rolling;version=1.2.13,ch.qos.logback.core.rolling.helper;version=1.2.13,ch.qos.logback.core.sift;version=1.2.13,ch.qos.logback.core.spi;version=1.2.13,ch.qos.logback.core.status;version=1.2.13,ch.qos.logback.core.subst;version=1.2.13,ch.qos.logback.core.util;version=1.2.13,com.atlassian.activeobjects.spi;version=5.3.1,com.atlassian.analytics.api.annotations;version=8.4.2,com.atlassian.analytics.api.annotations.v2;version=8.4.2,com.atlassian.analytics.api.events;version=8.4.2,com.atlassian.analytics.api.events.v2;version=8.4.2,com.atlassian.analytics.api.extractor;version=8.4.2,com.atlassian.analytics.api.listener;version=8.4.2,com.atlassian.analytics.api.services;version=8.4.2,com.atlassian.annotations;version=4.0.3,com.atlassian.annotations.nonnull;version=4.0.3,com.atlassian.annotations.nullability;version=4.0.3,com.atlassian.annotations.security;version=4.0.3,com.atlassian.annotations.tenancy;version=4.0.3,com.atlassian.applinks.api;version=9.2.4,com.atlassian.applinks.api.application.bamboo;version=9.2.4,com.atlassian.applinks.api.application.bitbucket;version=9.2.4,com.atlassian.applinks.api.application.confluence;version=9.2.4,com.atlassian.applinks.api.application.crowd;version=9.2.4,com.atlassian.applinks.api.application.fecru;version=9.2.4,com.atlassian.applinks.api.application.generic;version=9.2.4,com.atlassian.applinks.api.application.jira;version=9.2.4,com.atlassian.applinks.api.application.refapp;version=9.2.4,com.atlassian.applinks.api.application.stash;version=9.2.4,com.atlassian.applinks.api.auth;version=9.2.4,com.atlassian.applinks.api.auth.oauth;version=9.2.4,com.atlassian.applinks.api.auth.types;version=9.2.4,com.atlassian.applinks.api.event;version=9.2.4,com.atlassian.applinks.api.oauth2;version=9.2.4,com.atlassian.applinks.host;version=9.2.4,com.atlassian.applinks.host.spi;version=9.2.4,com.atlassian.applinks.host.spring;version=9.2.4,com.atlassian.applinks.host.util;version=9.2.4,com.atlassian.applinks.spi;version=9.2.4,com.atlassian.applinks.spi.application;version=9.2.4,com.atlassian.applinks.spi.auth;version=9.2.4,com.atlassian.applinks.spi.link;version=9.2.4,com.atlassian.applinks.spi.manifest;version=9.2.4,com.atlassian.applinks.spi.util;version=9.2.4,com.atlassian.audit.api;version=1.16.3,com.atlassian.audit.api.events;version=1.16.3,com.atlassian.audit.api.util.pagination;version=1.16.3,com.atlassian.audit.core;version=1.16.3,com.atlassian.audit.core.ecosystem;version=1.16.3,com.atlassian.audit.core.impl.broker;version=1.16.3,com.atlassian.audit.core.impl.service;version=1.16.3,com.atlassian.audit.core.spi;version=1.16.3,com.atlassian.audit.core.spi.service;version=1.16.3,com.atlassian.audit.entity;version=1.16.3,com.atlassian.audit.spi.entity;version=1.16.3,com.atlassian.audit.spi.feature;version=1.16.3,com.atlassian.audit.spi.lookup;version=1.16.3,com.atlassian.audit.spi.migration;version=1.16.3,com.atlassian.audit.spi.permission;version=1.16.3,com.atlassian.bamboo;version=3.4.6,com.atlassian.beehive;version=5.1.0,com.atlassian.bitbucket;version=8.19.5,com.atlassian.bitbucket.activity;version=8.19.5,com.atlassian.bitbucket.attachment;version=8.19.5,com.atlassian.bitbucket.attribute;version=8.19.5,com.atlassian.bitbucket.audit;version=8.19.5,com.atlassian.bitbucket.auth;version=8.19.5,com.atlassian.bitbucket.avatar;version=8.19.5,com.atlassian.bitbucket.build;version=8.19.5,com.atlassian.bitbucket.build.server;version=8.19.5,com.atlassian.bitbucket.build.server.operations;version=8.19.5,com.atlassian.bitbucket.build.status;version=8.19.5,com.atlassian.bitbucket.cluster;version=8.19.5,com.atlassian.bitbucket.codeinsights;version=8.19.5,com.atlassian.bitbucket.codeinsights.annotation;version=8.19.5,com.atlassian.bitbucket.codeinsights.coverage;version=8.19.5,com.atlassian.bitbucket.codeinsights.report;version=8.19.5,com.atlassian.bitbucket.comment;version=8.19.5,com.atlassian.bitbucket.commit;version=8.19.5,com.atlassian.bitbucket.commit.graph;version=8.19.5,com.atlassian.bitbucket.compare;version=8.19.5,com.atlassian.bitbucket.concurrent;version=8.19.5,com.atlassian.bitbucket.content;version=8.19.5,com.atlassian.bitbucket.dashboard;version=8.19.5,com.atlassian.bitbucket.dmz.admin.banner;version=8.19.5,com.atlassian.bitbucket.dmz.annotation;version=8.19.5,com.atlassian.bitbucket.dmz.auditing;version=8.19.5,com.atlassian.bitbucket.dmz.autodecline;version=8.19.5,com.atlassian.bitbucket.dmz.build;version=8.19.5,com.atlassian.bitbucket.dmz.build.operations;version=8.19.5,com.atlassian.bitbucket.dmz.build.server;version=8.19.5,com.atlassian.bitbucket.dmz.build.status;version=8.19.5,com.atlassian.bitbucket.dmz.build.status.dao;version=8.19.5,com.atlassian.bitbucket.dmz.build.status.legacy;version=8.19.5,com.atlassian.bitbucket.dmz.cluster;version=8.19.5,com.atlassian.bitbucket.dmz.cluster.exception;version=8.19.5,com.atlassian.bitbucket.dmz.codeowners;version=8.19.5,com.atlassian.bitbucket.dmz.comment;version=8.19.5,com.atlassian.bitbucket.dmz.commit;version=8.19.5,com.atlassian.bitbucket.dmz.concurrent;version=8.19.5,com.atlassian.bitbucket.dmz.deployment;version=8.19.5,com.atlassian.bitbucket.dmz.deployments;version=8.19.5,com.atlassian.bitbucket.dmz.deployments.event;version=8.19.5,com.atlassian.bitbucket.dmz.discovery;version=8.19.5,com.atlassian.bitbucket.dmz.emoticon;version=8.19.5,com.atlassian.bitbucket.dmz.features;version=8.19.5,com.atlassian.bitbucket.dmz.git.lfs;version=8.19.5,com.atlassian.bitbucket.dmz.hook.script;version=8.19.5,com.atlassian.bitbucket.dmz.idx;version=8.19.5,com.atlassian.bitbucket.dmz.markup.renderer;version=8.19.5,com.atlassian.bitbucket.dmz.mdc;version=8.19.5,com.atlassian.bitbucket.dmz.mesh;version=8.19.5,com.atlassian.bitbucket.dmz.migration;version=8.19.5,com.atlassian.bitbucket.dmz.mirror;version=8.19.5,com.atlassian.bitbucket.dmz.mirror.event;version=8.19.5,com.atlassian.bitbucket.dmz.mirror.hash;version=8.19.5,com.atlassian.bitbucket.dmz.monitoring;version=8.19.5,com.atlassian.bitbucket.dmz.notification;version=8.19.5,com.atlassian.bitbucket.dmz.notification.commit;version=8.19.5,com.atlassian.bitbucket.dmz.notification.pull;version=8.19.5,com.atlassian.bitbucket.dmz.notification.pull.custom;version=8.19.5,com.atlassian.bitbucket.dmz.notification.repository;version=8.19.5,com.atlassian.bitbucket.dmz.permission;version=8.19.5,com.atlassian.bitbucket.dmz.policy;version=8.19.5,com.atlassian.bitbucket.dmz.process;version=8.19.5,com.atlassian.bitbucket.dmz.pull;version=8.19.5,com.atlassian.bitbucket.dmz.pull.automerge;version=8.19.5,com.atlassian.bitbucket.dmz.pull.template;version=8.19.5,com.atlassian.bitbucket.dmz.ratelimit;version=8.19.5,com.atlassian.bitbucket.dmz.repository;version=8.19.5,com.atlassian.bitbucket.dmz.repositorymanagement;version=8.19.5,com.atlassian.bitbucket.dmz.request;version=8.19.5,com.atlassian.bitbucket.dmz.resilience;version=8.19.5,com.atlassian.bitbucket.dmz.secretscanning;version=8.19.5,com.atlassian.bitbucket.dmz.secretscanning.event;version=8.19.5,com.atlassian.bitbucket.dmz.secretscanning.scan;version=8.19.5,com.atlassian.bitbucket.dmz.secretscanning.validation;version=8.19.5,com.atlassian.bitbucket.dmz.server;version=8.19.5,com.atlassian.bitbucket.dmz.settingsrestriction;version=8.19.5,com.atlassian.bitbucket.dmz.signature.verification;version=8.19.5,com.atlassian.bitbucket.dmz.ssh;version=8.19.5,com.atlassian.bitbucket.dmzh4
Cause
The OSGi boot delegation is not configured correctly and is causing the startup to fail. To work, AppDynamics must be injected into the OSGI framework model and this is done by modifying the JVM arguments. Doing so incorrectly, impacts the boot order for necessary classes causing problems with the application not starting or failing to start. Adding atlassian.org.osgi.framework.bootdelegation.extra
to the JVM arguments will append the classes for AppDynamics so that the default boot order is preserved.
Solution
- Update the
JVM_SUPPORT_RECOMMENDED_ARGS
variable (in the_start-webapp.sh
/_start-webapp.bat
file located in$BITBUCKET_HOME/bin
) by adding theatlassian.org.osgi.framework.bootdelegation.extra
option with the following value:
-Datlassian.org.osgi.framework.bootdelegation.extra=com.singularity.*
- Restart Bitbucket Data Center
After applying this change, your JVM_SUPPORT_RECOMMENDED_ARGS
variable may look something like:
JVM_SUPPORT_RECOMMENDED_ARGS="-javaagent:/path/to/appdynamics/java-agent/javaagent.jar -Dappdynamics.agent.tierName=SOMETHING_HERE -Dappdynamics.agent.nodeName=SOMETHING_HERE -Datlassian.org.osgi.framework.bootdelegation.extra=com.singularity.*"
If using the above example, be sure to add any other needed settings (based on your team's existing settings for this variable), as well as modify the above -
Dappdynamics.*
and -
javaagent
arguments to match your company's desired values.