The Jira application cannot be access via the port configured in the server.xml file after upgrading from 8.x to 9.x

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

The Jira application cannot be access via the port configured in the server.xml file (nor via its base URL) after upgrading Jira from 8.x to 9.x.

The purpose of this KB article is to describe one scenario that leads to this behavior, how to identify it, and how to fix it.

Environment

Jira Server/Data Center on any version from 9.0.0.

Diagnosis

  • Go to the server the Jira application is running on and confirm that Jira is up and running (it has a process ID)

  • Try to access the Jira application via a browser using its IP address and the port used by the connector configured in <JIRA_INSTALL>/conf/server.xml, and verify that Jira is still inaccessible (the purpose of this test is to rule out any impact from Reverse Proxy Servers or Load Balancers)

  • Open the catalina logs (which are located in the file <JIRA_INSTALL>/logs/catalina.out), and look for the error below:

    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 04-Nov-2023 11:01:50.414 SEVERE [main] org.apache.catalina.connector.Connector.<init> Protocol handler instantiation failed java.lang.ClassNotFoundException: org.apache.coyote.http11.Http11Protocol at java.base/java.net.URLClassLoader.findClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at org.apache.coyote.ProtocolHandler.create(ProtocolHandler.java:260) at org.apache.catalina.connector.Connector.<init>(Connector.java:88) at org.apache.catalina.startup.ConnectorCreateRule.begin(ConnectorCreateRule.java:65) at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1277) at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1535) at org.apache.catalina.startup.Catalina.parseServerXml(Catalina.java:617) at org.apache.catalina.startup.Catalina.load(Catalina.java:709) at org.apache.catalina.startup.Catalina.load(Catalina.java:746) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:307) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:477)
  • Open the file <JIRA_INSTALL>/conf/server.xml, and take a look at the protocol used by the connector.

    • If the protocol parameter looks like the one below, then this KB article is relevant and you can move on to the Solution section.

      1 protocol="org.apache.coyote.http11.Http11Protocol"
    • Example of connector using this protocol:

      1 <Connector SSLEnabled="true" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" acceptCount="100" clientAuth="false" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" keyAlias="jira_2020" keystoreFile="E:\jirahome\jira.jks" keystorePass="Sanitized by Support Utility" keystoreType="JKS" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS" useBodyEncodingForURI="true"/>

Cause

Jira 9 ships with Tomcat 9.x, and the Http11Protocol class was removed from Tomcat 9 completely.

As a result, if a connector is configured to use this class, Tomcat will be unable to start it on the port is configured to listen to (port 443 in the example of connector above). Since that connector tries to use a class that no longer exists, the error java.lang.ClassNotFoundException: org.apache.coyote.http11.Http11Protocol will be thrown in the catalina logs. Because of that, the Jira application will be inaccessible from that port.

Solution

The solution consists in fixing the protocol parameter in the connector to use the right class, by following the steps below:

  1. Locate file <JIRA_INSTALL>/conf/server.xml in the Jira application (or on each Jira node, in case of a cluster)

  2. Edit the file, by replacing any instance of

    1. This string

      1 protocol="org.apache.coyote.http11.Http11Protocol"
    2. With this string

      1 protocol="org.apache.coyote.http11.Http11NioProtocol"
  3. Re-start the Jira application (or all the Jira nodes, in case of a cluster)

Updated on March 14, 2025

Still need help?

The Atlassian Community is here for you.