基于“纯弹簧”的servlet是否具有基于CXF的WSDL的端点URL?

时间:2013-01-04 20:13:12

标签: java web-services spring

我有一个使用Spring的完美工作的演示服务器/客户端应用程序对(仅限!) - 不涉及CXF或WSDL。它在Apache Tomcat 7.0.34的帮助下运行。

我很想知道是否可以在浏览器(http://localhost:8080/)上看到它的存在迹象,但我找不到源代码中的URL的任何提示(从教程中逐字复制)。

然后我发现this thread提供了获取端点URL的方法:

TransportContext tc = TransportContextHolder.getTransportContext();
WebServiceConnection wc = tc.getConnection();
URI uri = wc.getUri();

我将此添加到我的demo / tutorial 客户端的代码中,而第一个语句(getTransportContext())没有抛出任何异常,返回null ,所以第二个(getConnection())抛出一个NullPointerException。

为什么?

“纯粹的”基于Spring的servlet是否缺少端点URL?

如果没有,我错过了什么?检索服务URL的方法是什么?

我知道客户端通过上下文路径 bean id (在共享的 beans.xml中定义)了解服务器):

ClassPathXmlApplicationContext appContext = 
      new ClassPathXmlApplicationContext( new String[] {"/sample/spring/beans.xml" } );

但是没有相当于此的URL吗?像WSDL一样吗?

1 个答案:

答案 0 :(得分:1)

我同意@ GreyBeardedGeek的评论,Spring web-app上没有端点URL的概念(一般来说是java servlet web-app)。

如果确实需要运行时查找用户用于访问应用程序的URL,可以使用ServletRequest / HttpServletRequest方法,如getRemoteAddr(),getRemoteHost(),getURL(),getContextPath()等。例如:

@RequestMapping("/home")
public String home(HttpServletRequest req) {
  String host =  req.getRemoteHost();
  // ...
}

但请记住,多个URL可以指向同一个tomcat服务器,例如,如果设置了反向代理/ DNS CName。这可能(或不会)为您提供不同的URL。