Не удается загрузить класс contextConfigLocation в ServletContextHandler из класса обслуживания - PullRequest
1 голос
/ 09 марта 2019

У меня есть проект с Spring и несколько сервисов.Я пытаюсь включить кучу услуг отдыха в нем.Дело в том, что встроенный джет-сервер находится в экземпляре @Service, и по многим причинам я не могу его коснуться.Итак, я попытался настроить этот сервер с моими новыми требованиями и не могу.

Я пытался отказаться от классического подхода вне логики проекта, и он работает:

public class Starter {
public static void main( final String[] args ) throws Exception {
    Server server = new Server( 8888 );

    // Register and map the dispatcher servlet
    final ServletHolder servletHolder = new ServletHolder( new CXFServlet() );
    final ServletContextHandler context = new ServletContextHandler();      
    context.setContextPath( "/" );
    context.addServlet( servletHolder, "/rest/*" );     
    context.addEventListener( new ContextLoaderListener() );

    context.setInitParameter( "contextClass", AnnotationConfigWebApplicationContext.class.getName() );
    context.setInitParameter( "contextConfigLocation", AppConfig.class.getName() );

    server.setHandler( context );
    server.start();
    server.join();  
}

}

Но если я попытаюсь сделать то же самое в контексте службы Spring, он не будет работать.

Если я использую ту же инициализацию внутри него, я получу:

WARN  Can't find the the request for http://localhost:8888/rest/api/people's Observer 

Я пытался изменить в applicationContext.xml, чтобы включить остальные необходимые классы, но в этом случае / api / resource был зарегистрирован дважды.

Я уверен, что яне понимая что-то:)

1 Ответ

0 голосов
/ 12 марта 2019

Нашли!

@Bean 
@DependsOn( "cxf" )
public Server jaxRsServer() {
    JAXRSServerFactoryBean factory = RuntimeDelegate.getInstance().createEndpoint( jaxRsApiApplication(), JAXRSServerFactoryBean.class );
    factory.setBus(cxf()); // <-- THIS!
    factory.setServiceBeans( Arrays.< Object >asList( peopleRestService() ) );
    factory.setProviders( Arrays.< Object >asList( jsonProvider() ) );
    return factory.create();
}
...