Bitbucket Data Center is not starting due to DocumentBuilderFactoryImpl class not found

Platform Notice: Data Center Only - This article only applies to Atlassian products on the Data Center platform.

Note that this KB was created for the Data Center version of the product. Data Center KBs 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

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:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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.

1 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 the atlassian.org.osgi.framework.bootdelegation.extra option with the following value:

1 -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:

1 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-javaagentarguments to match your company's desired values.

Updated on March 21, 2025

Still need help?

The Atlassian Community is here for you.