в джерси 2.x я получаю сообщение об ошибке, например java.util.concurrent.ExecutionException

  1. я использовал трикотажную реализацию jaxrs, но я не могу использовать следующую программу, это случай, когда у меня возникают проблемы, любая идея поможет мне

    в следующей программе я использовал реализацию jersy 2.x для jaxrs, я реализовал программу, используя реализацию jersy для jax-rs (restfull) 2 класса, которые я написал вместо web.xml, я использовал класс

    MyResource.java

    package com.rest.application;
    
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.ws.rs.ApplicationPath;
    
    import com.rest.webservice.SampleService;
    @ApplicationPath("rest")
    public class MyResource {
        private Set s;
        public MyResource() {
            s=new HashSet();
            s.add(new SampleService());
        }
         public Set getSingletons() {
            return s;
        }
    }
    

    SampleService.java

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    
    @Path("sample")
    public class SampleService {
        @GET
        @Produces("text/html")
        @Path("{username}")
        public String sayHello(@PathParam("username")String s) {
            return "<font color='blue' size=8>Hello:" +s+ "</font>";
        }
        @GET
        @Produces("text/plain")
        public String sayBye() {
        return "Bye";
    }
    }
    

    я добавил все банки, необходимые для этой программы, но я получаю следующую ошибку

    java.util.concurrent.ExecutionException:
    org.apache.catalina.LifecycleException:
    Failed to start component [StandardEngine[Catalina].
    StandardHost[localhost].StandardContext[/RestApp2]]
    Caused by: org.apache.catalina.LifecycleException:
    Failed to start component [StandardEngine[Catalina].
    StandardHost[localhost].StandardContext[/RestApp2]]
    

    вроде везде такая же ошибка

    когда я изменил сервер tomcat 7 на 6, он работает, но не отображает вывод, кто-нибудь знает, заранее спасибо


person Anil Amane    schedule 09.06.2015    source источник
comment
пожалуйста, очистите свой код... не могу прочитать   -  person Rash    schedule 09.06.2015


Ответы (2)


здесь говорится, что @ApplicationPath("rest") может применяться только к подкласс приложения.

Можете ли вы рассказать больше о том, что вы пытаетесь сделать, и что такое полная трассировка стека. Вы используете web.xml?

person MSD    schedule 09.06.2015

Как упоминалось в @MSD, ваше использование @ApplicationPath неверно. См. документацию Джерси по адресу Развертывание приложений, чтобы увидеть все различные варианты развертывания, а также как они работают в разных средах.

По сути, самый простой способ поместить @ApplicationPath в пустой класс Application

@ApplicationPath("/rest")
public class MyApplication extends Application {}

Это просканирует весь путь к классам на наличие аннотированных классов @Provider и @Path для регистрации в приложении. Хотя это может показаться проще, более распространенным подходом при работе с Джерси является использование его ResourceConfig, который является подклассом Application. Вы можете зарегистрировать пакеты, которые будут сканировать пакеты и подпакеты

@ApplicationPath("/rest")
public class MyApplication extends ResourceConfig {
    public MyApplication() {
        packages("com.my.packages");
    }
}

Одним из преимуществ является то, что иногда будут аннотированные сторонние зависимости, которые вы не хотите регистрировать. Чтобы зарегистрировать отдельные классы, просто используйте register(...class) в файле ResourceConfig.

Теперь причина ошибки в Tomcat 7, а не 6, скорее всего, в том, что Tomcat 6 (сервлет 2.5) не имеет механизма подключаемости sevlet, который использует ServletContainerInitializer. Реализация этого инициализатора на Джерси загружает приложение, ища @ApplicationPath в подклассе Application. Если вы не находитесь в среде 3.0, эта функция не будет работать.

Обратите внимание, что инициализатор Jersey включен в банку jersey-container-servlet. Подробнее об этом можно прочитать здесь

person Paul Samsotha    schedule 10.06.2015