2017-02-08 22 views
0

творю службу отдыха Spring загрузки с использованием @RestController, в одном проекте я также раскрывающую службы SOAP Apache CXF какSpring Ботинок: Apache CXF SOAP с @RestController

@RestController код

@RestController 
@RequestMapping(value = "/mobileTopUpService") 
public class TopUpRestService { 

@RequestMapping(value="/processTopUpRequest", method=RequestMethod.POST, 
      consumes = MediaType.APPLICATION_JSON_VALUE, produces=MediaType.APPLICATION_JSON_VALUE) 

    public ResponseEntity<TopUpRequestDTO> processTopUpRequest(HttpServletRequest httpServletRequest, @Valid RequestEntity<TopUpRequestDTO> _requestEntity) { 


     return new ResponseEntity<>(new exampleDTO("hi"), HttpStatus.OK); 
    } 
} 

Apache CXF SOAP

@Configuration 
    @Import(ApplicationConfiguration.class) 
    public class WebServiceConfig 
    { 
     public static final String SERVLET_MAPPING_URL_PATH = "/*"; 
     public static final String SERVICE_NAME_URL_PATH = "/services"; 

     @Autowired 
     private ApplicationConfiguration applicationConfiguration; 

     @Bean 
     public ServletRegistrationBean dispatcherServlet() 
     { 
      return new ServletRegistrationBean(new CXFServlet(), SERVLET_MAPPING_URL_PATH); 
     } 

     @Bean(name = Bus.DEFAULT_BUS_ID) 
     public SpringBus springBus() 
     { 
      return new SpringBus(); 
     } 

     @Bean 
     public ERSBackendService ersBackendServiceImpl() 
     { 
      return new ERSBackendServiceImpl(); 
     } 

     @Bean 
     public Endpoint endpoint() 
     { 
      EndpointImpl endpoint = new EndpointImpl(springBus(), ersBackendServiceImpl()); 
      endpoint.publish(SERVICE_NAME_URL_PATH); 

      AutomaticWorkQueue executorQueue = createThreadPoolExecutorQueue(); 
      endpoint.setExecutor(executorQueue); 

      return endpoint; 
     } 
@Bean 
public EmbeddedServletContainerFactory embeddedServletContainerFactory() 
{ 
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory("/backend-service", Integer.valueOf(applicationConfiguration.getPort())); 
    return factory; 
} 
} 

SOAP Service отлично работает после изменения, но REST (@RestController) перестают работать, но если я отключить методы

// @Bean 
// public ServletRegistrationBean dispatcherServlet() 
// { 
//  return new ServletRegistrationBean(new CXFServlet(), SERVLET_MAPPING_URL_PATH); 
// } 

и

@Bean 
// public EmbeddedServletContainerFactory embeddedServletContainerFactory() 
// { 
//  TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory("/backend-service", Integer.valueOf("8007")); 
//  return factory; 
// } 
//} 

и запустить http://localhost:8007/mobileTopUpService/processTopUpRequest/ @RestController работает нормально, но не мыло.

Мне нужно запустить оба @RestController и CXF SOAP, любезно предложите.

благодаря

ответ

0

я решил как @EnableWebMvc в классе, где начиная загрузки приложения SpringApplication.run т.е. (ApplicationStartup.класс, args);

Переехал ServletRegistrationBean весной загрузки класса тоже,

disbaled метод @Bean общественного EmbeddedServletContainerFactory embeddedServletContainerFactory() {...}

1

Я просто работаю с SOAP и REST вместе осуществляем услуги. Вот моя конфигурация: (В конце ответа, я включал образец проекта)

application.properties

cxf.path=/services 
cxf.servlet.load-on-startup=-1 

WebServiceConfig

@Configuration 
@ConditionalOnWebApplication 
public class WebServiceConfig { 

    private static final Logger LOGGER = LoggerFactory.getLogger(WsEndpointsConfiguration.class); 


    @Autowired 
    private Bus bus; 


    @Value("${cxf.path}") 
    private String cxfServletPath; 


    @Autowired 
    private YourServiceInterface yourService; 


    public Logger getLOGGER() { 
     return LOGGER; 
    } 


    public Bus getBus() { 
     return bus; 
    } 


    public String getCxfServletPath() { 
     return cxfServletPath; 
    } 


    public void setCxfServletPath(String cxfServletPath) { 
     this.cxfServletPath = cxfServletPath; 
    } 


    public YourServiceInterface getYourServiceInterface() { 
     return yourService; 
    } 


    @Bean 
    public Endpoint yourWebServiceEndpoint() { 
     EndpointImpl endpoint = new EndpointImpl(getBus(), new YourWebServiceEndpoint(getYourServiceInterface())); 
     endpoint.publish("/YourWebService"); 
     return endpoint; 
    } 


    @Bean 
    public FilterRegistrationBean openEntityManagerInViewFilter() { 
     FilterRegistrationBean filterRegBean = new FilterRegistrationBean(); 
     filterRegBean.setFilter(new OpenEntityManagerInViewFilter()); 
     List<String> urlPatterns = new ArrayList<String>(); 
     urlPatterns.add(getCxfServletPath() + "/*"); 
     filterRegBean.setUrlPatterns(urlPatterns); 
     if (getLOGGER().isDebugEnabled()) { 
      getLOGGER().debug("Registering the 'OpenEntityManagerInViewFilter' filter for the '" 
       .concat(getCxfServletPath() + "/*").concat("' URL.")); 
     } 
     return filterRegBean; 
    } 
} 

Заменить @Autowired обслуживание с вашим собственным интерфейсом обслуживания.

Вы можете проверить полный пример здесь:

https://github.com/jcagarcia/proofs/tree/master/spring-security-and-formatters

Связанные классы от образца приведенные выше:

Надеется, что это помогает,

 Смежные вопросы

  • Нет связанных вопросов^_^