Preparing for Jira Software 10.0 and Jira Service Management 6.0 - multiple EAPs coming your way

I am setting up Jira 10 environment for Connect App but when creating new Project on Jira 10 console shows this error and does not show dialog to create new project. Has anyone encountered this case? Can someone give me more advice in this case?

Thanks

Hi, has Jira 10.0.1 removed or made CharSequenceDownloadable internal?

Iā€™m getting Caused by: java.lang.ClassNotFoundException: com.atlassian.plugin.webresource.transformer.CharSequenceDownloadableResource not found by... on my plugin at version 10.0.1 but not at 10.0.0.

Is there a clear alternative to replace this class?

Hi folks,

I have a question regarding integration test in Jira 10.

I notice in the testkit repo and atlassian maven repo that there is a 10.0.0 version shipped. Do we still have backdoors and embedeed databases for jira 10 or we should provide a separate database (e.g Postgres) to be able to run tests properly.

Is there any migration guide anywhere ?

Kind regards,

hello @AndrzejKotas in Jira 10 im getting this error connection refused when I try to use com.atlassian.sal.api.net.TrustedRequest

here is my code

 TrustedRequestFactory trustedRequestFactory = ComponentAccessor.getOSGiComponentInstanceOfType(
        TrustedRequestFactory.class);
    TrustedRequest request = trustedRequestFactory.createTrustedRequest(
        Request.MethodType.POST, url);
    request.addTrustedTokenAuthentication(host, applicationUser.getUsername());
    request.setRequestBody(requestBody);
    request.setConnectionTimeout(5000000);
    request.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);

    return request.execute();

any ideas on this? cheers! @adam.labus @mkemp

Hi @RafaelSkinner , I am also facing the similar problem. Were you able to resolve this?

Hi @mkemp ,

Thank you for the suggestion. While splitting the app into two separate plugins might seem practical from Atlassianā€™s perspective, it can be quite challenging for partners. Not all customers will transition to Jira 10 immediately, and many may continue using Jira 9 for months, if not years.

From a partnerā€™s standpoint, it would be more manageable if Atlassian maintained the old API version in Jira 10, flagging it as deprecated, to then remove it with Jira 11, allowing for a smoother transition.

Is this something Atlassian might consider?

Thank you for your time and consideration!

Our plugin is throwing this error on jira server 10.0.1. Do you have any suggestions to resolve this error?

2024-09-10 17:05:00,266+0530 UpmAsynchronousTaskManager:thread-3 WARN admin     [c.a.p.o.hook.dmz.DmzResolverHook] Package org.apache.commons.lang.text is internal and is not available for export to plugin com.veracode.jira.plugin.synchronize.veracode-jira-flaws-synchronizer
2024-09-10 17:05:00,267+0530 UpmAsynchronousTaskManager:thread-3 WARN admin     [c.a.p.o.hook.dmz.DmzResolverHook] Package org.objectweb.asm is internal and is not available for export to plugin com.veracode.jira.plugin.synchronize.veracode-jira-flaws-synchronizer
2024-09-10 17:05:00,271+0530 UpmAsynchronousTaskManager:thread-3 WARN admin     [c.a.p.o.hook.dmz.DmzResolverHook] Package com.opensymphony.workflow.spi is deprecated and will be made unavailable for export to plugin com.veracode.jira.plugin.synchronize.veracode-jira-flaws-synchronizer in a future release
2024-09-10 17:05:00,271+0530 UpmAsynchronousTaskManager:thread-3 WARN admin     [c.a.p.o.hook.dmz.DmzResolverHook] Package com.opensymphony.workflow is deprecated and will be made unavailable for export to plugin com.veracode.jira.plugin.synchronize.veracode-jira-flaws-synchronizer in a future release
2024-09-10 17:05:00,336+0530 UpmAsynchronousTaskManager:thread-3 INFO admin     [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (1): [com.veracode.jira.plugin.synchronize.veracode-jira-flaws-synchronizer], 300 seconds remaining
2024-09-10 17:05:00,394+0530 ThreadPoolAsyncTaskExecutor::Thread 29 ERROR      [c.a.p.osgi.factory.OsgiPlugin] Unable to start the plugin container for plugin 'com.veracode.jira.plugin.synchronize.veracode-jira-flaws-synchronizer'
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compatibilityPluginScheduler': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.scheduler.compat.AutoDetectingCompatibilityPluginScheduler] from ClassLoader [com.veracode.jira.plugin-server [243]]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:298)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1302)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:209)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:57)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:322)
	at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:287)
	at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:137)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.scheduler.compat.AutoDetectingCompatibilityPluginScheduler] from ClassLoader [com.veracode.jira.plugin-server [243]]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:485)
	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:276)
	... 18 more
Caused by: java.lang.NoClassDefFoundError: com/atlassian/util/concurrent/LazyReference
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504)
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:467)
	... 20 more
Caused by: java.lang.ClassNotFoundException: com.atlassian.util.concurrent.LazyReference not found by com.veracode.jira.plugin-server [243]
	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1591)
	at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 24 more
2024-09-10 17:05:00,397+0530 ThreadPoolAsyncTaskExecutor::Thread 29 ERROR      [o.e.g.b.e.internal.support.ExtenderConfiguration] Application context refresh failed (NonValidatingOsgiBundleXmlApplicationContext(bundle=com.veracode.jira.plugin-server, config=osgibundle:/META-INF/spring/*.xml))
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compatibilityPluginScheduler': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.scheduler.compat.AutoDetectingCompatibilityPluginScheduler] from ClassLoader [com.veracode.jira.plugin-server [243]]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:298)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1302)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:209)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:57)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:322)
	at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:287)
	at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:137)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.scheduler.compat.AutoDetectingCompatibilityPluginScheduler] from ClassLoader [com.veracode.jira.plugin-server [243]]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:485)
	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:276)
	... 18 more
Caused by: java.lang.NoClassDefFoundError: com/atlassian/util/concurrent/LazyReference
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504)
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:467)
	... 20 more
Caused by: java.lang.ClassNotFoundException: com.atlassian.util.concurrent.LazyReference not found by com.veracode.jira.plugin-server [243]
	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1591)
	at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 24 more
2024-09-10 17:05:00,398+0530 ThreadPoolAsyncTaskExecutor::Thread 29 ERROR      [o.e.g.b.e.i.dependencies.startup.DependencyWaiterApplicationContextExecutor] Unable to create application context for [com.veracode.jira.plugin-server], unsatisfied dependencies: none
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compatibilityPluginScheduler': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.scheduler.compat.AutoDetectingCompatibilityPluginScheduler] from ClassLoader [com.veracode.jira.plugin-server [243]]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:298)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1302)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:209)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:57)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:322)
	at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:287)
	at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:137)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.atlassian.scheduler.compat.AutoDetectingCompatibilityPluginScheduler] from ClassLoader [com.veracode.jira.plugin-server [243]]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:485)
	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:276)
	... 18 more
Caused by: java.lang.NoClassDefFoundError: com/atlassian/util/concurrent/LazyReference
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504)
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:467)
	... 20 more
Caused by: java.lang.ClassNotFoundException: com.atlassian.util.concurrent.LazyReference not found by com.veracode.jira.plugin-server [243]
	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1591)
	at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 24 more
2024-09-10 17:05:02,346+0530 UpmScheduler:thread-1 WARN admin     [c.a.upm.pac.PacClientImpl] The request to check for app updates may take longer than expected because 192 apps are installed that could have updates. This may impact the performance of loading the Manage Apps page.
2024-09-10 17:05:03,385+0530 http-nio-8080-exec-5 url: /rest/plugins/1.0/installed-marketplace; user: admin WARN admin 1025x132x1 1xbmnln 0:0:0:0:0:0:0:1 /rest/plugins/1.0/installed-marketplace [c.a.upm.pac.PacClientImpl] The request to check for app updates may take longer than expected because 192 apps are installed that could have updates. This may impact the performance of loading the Manage Apps page.
2024-09-10 17:05:27,413+0530 Caesium-1-4 INFO ServiceRunner     [c.a.j.issue.index.DefaultIndexManager] Start to check for index consistency.
2024-09-10 17:05:27,414+0530 Caesium-1-4 INFO ServiceRunner     [c.a.j.issue.index.DefaultIndexManager] Index consistency check finished. indexConsistent: true; timeToCheckIndexConsistency: 1 ms
2024-09-10 17:07:27,413+0530 Caesium-1-2 INFO ServiceRunner     [c.a.j.issue.index.DefaultIndexManager] Start to check for index consistency.
2024-09-10 17:07:27,414+0530 Caesium-1-2 INFO ServiceRunner     [c.a.j.issue.index.DefaultIndexManager] Index consistency check finished. indexConsistent: true; timeToCheckIndexConsistency: 0 ms
2024-09-10 17:07:59,806+0530 jira-stats-0 INFO      [c.a.j.util.stats.JiraStats] [JIRA-STATS] [INDEXING-LIMITS] snapshot stats: duration=PT5M0.012S, statsOverhead=n/a, data={"_statsName":"INDEXING-LIMITS","_statsType":"snapshot","_time":"2024-09-10T11:37:59.781Z","_timestamp":1725968279781,"_duration":"PT5M0.012S","_invocations":3,"_statsOverhead":"n/a","settings":{"maxCommentsIndexed":500,"maxWorklogsIndexed":100,"maxChangeHistoryIndexed":100,"shouldFilterOutUnsupportedFields":true},"indexIssueWithRelated":0,"indexComments":0,"indexWorklogs":0,"indexChangeHistory":0,"indexAll":0,"numberOfTimesCommentsLimited":0,"numberOfTimesWorklogsLimited":0,"numberOfTimesChangeHistoryLimited":0,"numberOfComments":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"0":0,"1":0,"10":0,"100":0,"500":0,"1000":0,"10000":0,"20000":0,"50000":0}},"numberOfWorklogs":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"0":0,"1":0,"10":0,"100":0,"500":0,"1000":0,"10000":0,"20000":0,"50000":0}},"numberOfChangeHistory":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"0":0,"1":0,"10":0,"100":0,"500":0,"1000":0,"10000":0,"20000":0,"50000":0}},"filtering":{"numberOfChangeHistoryBeforeFiltering":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"0":0,"1":0,"10":0,"100":0,"500":0,"1000":0,"10000":0,"20000":0,"50000":0}},"numberOfChangeHistoryItemsBeforeFiltering":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"0":0,"1":0,"10":0,"100":0,"500":0,"1000":0,"10000":0,"20000":0,"50000":0}},"numberOfChangeHistoryItemsAfterFiltering":{"count":0,"min":0,"max":0,"sum":0,"avg":0,"distributionCounter":{"0":0,"1":0,"10":0,"100":0,"500":0,"1000":0,"10000":0,"20000":0,"50000":0}}},"topIssuesWithLimitedComments":{},"topIssuesWithLimitedWorklogs":{},"topIssuesWithLimitedChangeHistory":{}}

Hi @PrafullKulshrestha. Yes, but, unfortunately, I had to do a workaround by bringing the offending class to inside my project and replacing the offending imports to valid ones.

@RafaelSkinner
Thank you so much for your response :slight_smile:

Could you please give me little more detail as to which class you put in the project and which imports you replaced.

Weā€™re not considering it.

I understand itā€™s extra work, itā€™s extra work for us too. We wouldnā€™t have done it unless we thought we had to. We know whatever pain we feel vendors feel too. We know itā€™s a common request.

Adding back the grey and old API is undoing exactly what we set out to achieve.

There are other advanced techniques that bring a whole new set of problems with them and donā€™t make sense for a lot of plugins. Other vendors and I have written here about some of these already.

1 Like

Yes, itā€™s internal inline with the rest of the DC productsā€™ recent major releases.

The way to go is to implement the interface directly com.atlassian.plugin.servlet.DownloadableResource.

If the transformer is not using the original content, itā€™s probably better to use the writer directly for the sake of performance. Itā€™s really only a wrapper around ByteArrayOutputStream. If you want to feel free to effectively copy in our implementation to your plugin.

In Jira 10, our customers are experiencing that one of our features is broken with a 501 server error when they hit an endpoint that receives a HTTP PATCH request. The feature works on all versions prior to Jira 10.

<Response [501]>
<!doctype html><html lang="en"><head><title>HTTP Status 501 ā€“ Not Implemented</title><body><h1>HTTP Status 501 ā€“ Not Implemented</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Method [PATCH] is not implemented by this Servlet for this URI</p><p><b>Description</b> The server does not support the functionality required to fulfill the request.</p><hr class="line" /><h3>Apache Tomcat</h3></body></html>

It seems like Jira 10 as added a filter which restricts HTTP methods. Our plugin implements the HTTP PATCH method on our endpoints, and even though you yourself donā€™t support the HTTP PATCH method you cannot make any assumptions about what your ecosystem of apps does or does not do.

We digged and found the following code which seeminly leads to the aforementioned 501 error:

    public static String getMethodName(HttpServletRequest request) {
        switch (request.getMethod()) {
            case "GET":
                return "doGet";
            case "POST":
                return "doPost";
            case "PUT":
                return "doPut";
            case "DELETE":
                return "doDelete";
            case "HEAD":
                return "doHead";
            case "OPTIONS":
                return "doOptions";
            case "TRACE":
                return "doTrace";
            default:
                throw new IllegalArgumentException("Unsupported HTTP method: " + request.getMethod());
        }
    }

Please remove this filter as you cannot make such assumptions in your system about HTTP when apps for all you know implement this in their endpoints, as evident by our app.

Edit: https://jira.atlassian.com/browse/JRASERVER-78239

4 Likes

Hi :),

We are currently working on maintaining compatibility between our plugin for Jira 9.4 and Jira 10.x. Based on Jira 10ā€™s documentation, we updated our code to replace the Codehaus libraries with FasterXML libraries. However, after this update, the plugin no longer works on Jira 9. The error we get is: Unresolved requirements: (osgi.wiring.package=com.fasterxml.jackson.core.type).

We tried adding Jackson dependencies to the pom.xml without the provided scope, but this results in a banned dependency issue.

Could you advise on a solution to make the plugin compatible with both versions?

Thanks a lot!
Regards,
Dan

@mkemp

1 Like

This will only work in simple plugins without a lot more workarounds for the Jira API. If you need to use new API, which is Java 17, it will be more painful.

  1. Make compile in Maven so itā€™s bundled with your app
  2. Set package imports of all com.fasterxml.* to be optional - this means it will reuse the version in Jira if itā€™s available. Desirable so that we can patch versions (e.g. for security) in Jira and the plugin will pick it up automatically
  3. Exclude it from the banned dependencies in the POM and leave a comment explaining that itā€™s intentional to use the Jira version when provided and use the bundled version when Jira doesnā€™t provide.

Im sorry about thisā€¦ Idont have experience about thisā€¦

Hello,

I have created a post function that extends AbstractJiraFunctionProvider in Jira datacenter using java. However, in the Jira 10 upgrade, the dependencies com.opensymphony.module.*, and com.opensymphony.sitemesh.* will be removed. In this class, I have the following method:

public void execute(final Map rawTransientVars,
                    final Map rawArgs, final PropertySet ps)

The PropertySet is imported from:

import com.opensymphony.module.propertyset.PropertySet;

Any help to change this?