2015-05-07 88 views
2

我有一个需要编写工作原理如下应用:春季启动 - REST和SOAP组合

  1. 我可以一个SOAP文档/ A/ABC,通常SOAP方式。

  2. 我可以GET/a/abc,并返回200 /好。这只是一个测试,看看该方法是否存在。

什么是正确的方法来做到这一点?我还没有看到在SOAP上下文中执行GET的方法。我已经尝试创建REST和SOAP bean,如下所示:

@Bean 
public ServletRegistrationBean WsRegistrationBean(ApplicationContext applicationContext) { 
    MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
    servlet.setApplicationContext(applicationContext); 
    servlet.setTransformWsdlLocations(true); 
    return new ServletRegistrationBean(servlet, "https://stackoverflow.com/a/*"); 
} 

@Bean 
public ServletRegistrationBean RsRegistrationBean(ApplicationContext applicationContext) { 
    DispatcherServlet servlet = new DispatcherServlet(); 
    servlet.setApplicationContext(applicationContext); 
    return new ServletRegistrationBean(servlet, "https://stackoverflow.com/a/*"); 
} 

但是,这不起作用,SOAP bean似乎赢了。如果我注释掉soap bean,我的REST控制器正在正确处理GET请求,但是如果我将SOAP bean留在那里,我会得到“405 /不允许的方法”。

这些可以共存并且具有由Rest控制器处理的GET,并且POST处理了SOAP方式吗?还是有另一种方式?

+0

您正在将两个Servlet映射到/ a的相同url上下文。我建议你使用不同的路径,因为迟早你会在POSTing时遇到问题。 –

+0

不幸的是我的要求是获取并发布到相同的url上下文。我必须使用get来测试Iuri上下文是否存在,如果存在,那么我可以在此背景下讨论soap。 –

+0

嗯听起来像一个非常奇怪的要求? Get只是检查端点是否存在?然后可能会实施一个Dummy操作,您也称为Soap服务。 –

回答

0

我没能找到一个答案,但我有一个解决办法:

  1. 将剩下的控制器不同的URL上下文(例如/ B/ABC)。
  2. 将nginx放在应用程序的前面
  3. 让nginx将“GET/a/abc”的请求重写为“GET/b/abc”。

到目前为止,这似乎可以满足我的需求。这可能有多种方式,但我无法用内置的tomcat弄清楚,而nginx方法可以将重定向保持在应用程序的外部。