Jira Gadget:对REST资源的简单调用不起作用 [英] Jira Gadget: Simple call to REST resource doesn't work

查看:130
本文介绍了Jira Gadget:对REST资源的简单调用不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在jira插件中编写一个小工具,即使是一个非常简单的小工具,我也遇到了一些问题.目前,我正在尝试从我编写的一个简单的Java类获得响应.以下代码位于我的gadget.xml中:

Im trying to write a gadget inside a jira plugin and I've encountered some problems even with a very simple one. Currently I'm trying to get a response from a simple java class i wrote. Following code is located in my gadget.xml:

        Hello Gadget<br />

    #requireResource("com.atlassian.gadgets.publisher:ajs-gadgets")
    #requireResource("com.tngtech.gadgets.jira-complain-gadget-plugin:web-resources")

    #includeResources() 

    #oauth

    <script type="text/javascript">(function () {
var gadget = AJS.Gadget({
    baseUrl: "__ATLASSIAN_BASE_URL__",
    view: {
        onResizeAdjustHeight: true,
        enableReload: true,
        template: function(args) {

            var gadget = this;

            window.alert("1");

            gadget.getView().html(args.hello);

            window.alert("2");

        },
        args: [{
            key: "hello",
            ajaxOptions: function () {
                return {
                    url: "/rest/jira-rest/1.0/ComplainChart/HelloWorld"
                };
            }
        }]
    }
});
})();
    </script>

]]></Content>

我处理的Java类如下:

The Java class i adress looks like this:

@Path("/ComplainChart")
@AnonymousAllowed
@Produces(MediaType.TEXT_HTML)
public class ComplainChart {

public ComplainChart() {
}

@GET
@Path("/HelloWorld")
@Produces(MediaType.TEXT_HTML)
public Response getVersionsForProject() {
    return Response.ok("Hello Java<br/>").build();
}
}

URL可能是正确的,get请求的firebug输出看起来像这样:

The URL is probably correct, the firebug output for the get Request looks like this:

throw 1; < don't be evil' >{"http://localhost:1990/jira/rest/jira-rest/1.0/complainChart/HelloWorld?cacheBuster=1308293636385":{"headers":{"set-cookie":["JSESSIONID=5652167D4DADE39719C4FED0C7174A03;Path=/","atlassian.xsrf.token=BV8N-OK2J-IQUQ-YNNK|b52c0f4b28944d7d11561aed079093f767448aca|lin; Path=/jira"]},"body":"Hello Java<br/>","rc":200}}

即使没有gadget.getView部分,也不会执行警报(它们没有args部分),并且我在Atlas运行的终端中获得了巨大的Stack Trace

Even without the gadget.getView part, the alerts aren't executed (they are without the args part) and I get a huge Stack Trace in my atlas-run terminal

[INFO] [talledLocalContainer] com.atlassian.util.concurrent.LazyReference$InitializationException: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
[INFO] [talledLocalContainer]   at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:152)
[INFO] [talledLocalContainer]   at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:115)
[INFO] [talledLocalContainer]   at com.atlassian.plugin.servlet.DefaultServletModuleManager.getFilter(DefaultServletModuleManager.java:358)
[INFO] [talledLocalContainer]   at com.atlassian.plugin.servlet.DefaultServletModuleManager.getFilters(DefaultServletModuleManager.java:212)
.............

有人可以帮我吗?

亚历克斯

这里是我的pom文件,我不确定,这种方式是完全正确的:

Fyi here my pom file, I'm not sure, it's completely right this way:

<dependencies>
      <dependency> 
        <groupId>com.atlassian.gadgets</groupId> 
        <artifactId>atlassian-gadgets-api</artifactId> 
        <version>3.1.7</version> 
    </dependency>
    <dependency> 
        <groupId>com.atlassian.jira</groupId> 
        <artifactId>atlassian-jira</artifactId> 
        <version>${jira.version}</version> 
        <scope>provided</scope> 
    </dependency> 
    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.6</version> 
        <scope>test</scope> 
    </dependency> 
    <dependency> 
        <groupId>com.atlassian.jira</groupId> 
        <artifactId>jira-func-tests</artifactId> 
        <version>${jira.version}</version> 
        <scope>test</scope> 
    </dependency> 
    <dependency> 
        <groupId>javax.ws.rs</groupId> 
        <artifactId>jsr311-api</artifactId> 
        <version>1.1.1</version> 
        <scope>provided</scope> 
    </dependency> 
   <dependency> 
        <groupId>com.atlassian.jira</groupId> 
        <artifactId>jira-rest-plugin</artifactId> 
        <version>${jira.version}</version> 
        <scope>provided</scope> 
    </dependency> 
    <dependency> 
        <groupId>javax.xml.bind</groupId> 
        <artifactId>jaxb-api</artifactId> 
        <version>2.1</version> 
        <scope>provided</scope> 
    </dependency> 
    <dependency> 
        <groupId>com.atlassian.plugins.rest</groupId> 
        <artifactId>atlassian-rest-common</artifactId> 
        <version>2.5.0</version> 
        <scope>provided</scope> 
    </dependency> 
    <dependency> 
        <groupId>javax.servlet</groupId> 
        <artifactId>servlet-api</artifactId> 
        <version>2.5</version> 
        <scope>provided</scope> 
    </dependency> 
    <dependency> 
        <groupId>com.atlassian.sal</groupId> 
        <artifactId>sal-api</artifactId> 
        <version>2.1.0.beta1</version> 
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-jira-plugin</artifactId>
            <version>3.5-SNAPSHOT</version>
            <extensions>true</extensions>
            <configuration>
                <productVersion>${jira.version}</productVersion>
                <productDataVersion>${jira.data.version}</productDataVersion>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<properties>
    <jira.version>4.3.4</jira.version>
    <jira.data.version>4.3.4</jira.data.version>
</properties>

推荐答案

找到了解决方案:您需要返回带有以下注释的自己类的Object:

Found the solution: You need to return an Object of an own class with annotations like these:

    @XmlRootElement
public static class HelloClass {
    @XmlElement
    String output;

    HelloClass() {
        output = "Hello";
    }

    HelloClass(String who) {
        output = "Hello " + who;
    }
}

这篇关于Jira Gadget:对REST资源的简单调用不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆