【发布时间】:2016-04-14 05:14:29
【问题描述】:
有没有像Endpoint.publish(address, implementor) 这样的类来公开服务?我正在尝试在 Tomcat 上部署我的应用程序。 CXF 或 JAX-RS 中是否有任何类可以公开 REST Web 服务?
【问题讨论】:
有没有像Endpoint.publish(address, implementor) 这样的类来公开服务?我正在尝试在 Tomcat 上部署我的应用程序。 CXF 或 JAX-RS 中是否有任何类可以公开 REST Web 服务?
【问题讨论】:
您需要在 serviceBean 中使用基于 javax.ws.rs 的注解来注解您的 API,这些注解代表 HTTP 方法,例如 GET、PUT、POST、DELETE 等。这会将您的 API 暴露给 JAX-您需要在 CXF 配置 XML 中创建 RS 服务器。像这样 -
<jaxrs:server id="base" address="/">
<jaxrs:providers>
<ref bean="provider1" />
<ref bean="provider2" />
</jaxrs:providers>
<jaxrs:serviceBeans>
<ref bean="serviceBean" />
</jaxrs:serviceBeans>
</jaxrs:server>
此配置文件与您的 web.xml 中提到的 <context-param>contextConfigLocation 相同
如果您不使用 Spring,可以使用以下方式以编程方式创建 JAX-RS 服务器:
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setResourceClasses(abc.class);
List providers = new ArrayList();
sf.setProviders(providers);
sf.setAddress(ENDPOINT_ADDRESS);
server = sf.create();
但我看不出在没有 Spring 的情况下使用 CXF 有什么意义。
【讨论】:
JAXRSServerFactoryBean 我得到 There is a endpoint already running on / 一直以来,您能否扩展您的答案,以便完全不用 xml 来完成?