Jira Rest Java Client Dynamic WebApp, преобразованный в Maven, не работает

У меня есть Java-клиент Jira Rest, который отлично работает как отдельное приложение Java, но когда я использую его с сервером Tomcat для создания динамического веб-приложения с использованием Maven, он выдает следующую трассировку стека

Кроме того, каждый раз, когда я делаю исправление, возникает новое исключение. Помогите пожалуйста, если кто сталкивался с такой проблемой.

java.lang.ClassNotFoundException: java.lang.ClassNotFoundException: com.atlassian.jira.rest.client.api.JiraRestClientFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2918)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory.createClient(AsynchronousHttpClientFactory.java:53)
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.create(AsynchronousJiraRestClientFactory.java:35)
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.createWithBasicHttpAuthentication(AsynchronousJiraRestClientFactory.java:42)
at ReferenceClass.ListOfProjects(ReferenceClass.java:20)
at GetProjectList.doGet(GetProjectList.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Мой pom.xml выглядит следующим образом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.javarticles.webapp</groupId>
<artifactId>webappExample</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>webappExample Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.openengsb.wrapped</groupId>
        <artifactId>jira-rest-java-client-api</artifactId>
        <version>2.0.0-m32.w1</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>org.openengsb.wrapped</groupId>
        <artifactId>jira-rest-java-client-core</artifactId>
        <version>2.0.0-m32.w1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>

</dependencies>
<build>
    <finalName>webappExample</finalName>
</build>

ReferenceClass:

public class ReferenceClass {
    static ArrayList<String> names;
    public static ReferenceClass JInstance= null;
    public static ReferenceClass getInstance(){
        if (JInstance == null) {
            JInstance = new ReferenceClass();
        }
        return JInstance;


    }
    public String ListOfProjects() throws URISyntaxException, IOException {
        String username = "xxxxx";
        String password = "xxxx";
        ArrayList<String> list = null ;
         URI jiraserverURI = new URI("https://jira.xxxxx.com");
         JiraRestClientFactory restClientfactory = new AsynchronousJiraRestClientFactory();
         JiraRestClient Client = restClientfactory.createWithBasicHttpAuthentication(jiraserverURI, username,
                password);

        try {
            Iterable<BasicProject> allproject = Client.getProjectClient().getAllProjects().claim();
            list = new ArrayList<String>();
            for (BasicProject project : allproject) {
                list.add(project.getName());
            }

            System.out.println( "--------" + list);

        } catch (Exception e) {
            System.out.println("Exception found " + e);
        }
        return new Gson().toJson(list);

    }

Сервлет GetProjectList

public class GetProjectList extends HttpServlet {
private static final long serialVersionUID = 1L;





/**
 * @see HttpServlet#HttpServlet()
 */
public GetProjectList() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void  doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub


     //ReferenceClass r = new ReferenceClass();
    response.setContentType("application/JSON");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write("Hello Servlet");
    try {
        response.getWriter().write(ReferenceClass.getInstance().ListOfProjects());
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Использование этого для вызова GetProjectList()

    $(document).ready(function() {
    $.getJSON('GetProjectList', function(resp) { // on sucess
        alert("Alert");
    }).fail(function() { // on failure
        alert("Request failed.");
    });
});

person Kandarp Gandhi    schedule 23.07.2015    source источник
comment
Как вы управляли им как standalone Java application? Как тогда включались зависимости? Можете ли вы проверить свою папку .m2, чтобы увидеть, можете ли вы найти класс JiraRestClientFactory?   -  person Tim Biegeleisen    schedule 23.07.2015
comment
@TimBiegeleisen Я запускал его как отдельное приложение в конфигурации maven. Он работал отлично, когда у меня был основной класс n ReferenceClass.java   -  person Kandarp Gandhi    schedule 23.07.2015
comment
Вы не ответили на мой другой вопрос. Можете ли вы найти класс JiraRestClientFactory в папке .m2?   -  person Tim Biegeleisen    schedule 23.07.2015
comment
Также проверьте наличие этого класса в папке lib вашего файла WAR. Держу пари, его там нет.   -  person Tim Biegeleisen    schedule 23.07.2015
comment
@TimBiegeleisen Я проверил файл WAR и его присутствие в папке lib. Я сделал это, установив maven на eclipse и переименовав сгенерированный .war в .jar.   -  person Kandarp Gandhi    schedule 23.07.2015


Ответы (1)


Ваши конфигурации выглядят нормально. Баночка доступна в репозитории maven: http://repo1.maven.org/maven2/org/openengsb/wrapped/jira-rest-java-client-api/2.0.0-m32.w1/

Вы запускали «mvn clean package»? Он загрузит все ваши зависимости, включая отсутствующий класс в ошибке.

person Alec Zhang    schedule 23.07.2015
comment
Он загружает все зависимости, которые мне нужны. Но все же, когда я запускаю его на сервере, он показывает эту ошибку. Кроме того, после нескольких исправлений он показывает разные ошибки classdefnotfound каждый раз, когда я пытаюсь его запустить. - person Kandarp Gandhi; 23.07.2015