【发布时间】:2011-09-07 18:30:57
【问题描述】:
我正在尝试使用 jetty 7 在 Equinox osgi 环境中运行 apache cxf 端点。我需要端点位于地址 http://x.x.x.x:8080/ws/endpoint1 上,并且在根路径 http://x.x.x.x:8080/* 上有静态资源。
为此我有一个包含 cxf 库的专用包。 Spring 动态模块是我的目标平台的一部分。
经过一些研究,我尝试在我的 spring 应用程序上下文中启动 jetty 网络服务器。
<bean id="Server" class="org.eclipse.jetty.server.Server"
init-method="start" destroy-method="stop">
<property name="connectors">
<list>
<bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<property name="port" value="8080" />
</bean>
</list>
</property>
<property name="handler">
<bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerList">
<property name="handlers">
<list>
<bean class="org.eclipse.jetty.server.handler.ResourceHandler">
<property name="directoriesListed" value="true" />
<property name="welcomeFiles">
<list>
<value>index.html</value>
</list>
</property>
<property name="resourceBase" value="./someDir" />
</bean>
<ref bean="web-service-cxf" />
<bean class="org.eclipse.jetty.server.handler.DefaultHandler" />
</list>
</property>
</bean>
</property>
</bean>
<bean name="web-service-cxf" class="org.eclipse.jetty.servlet.ServletContextHandler">
<property name="contextPath" value="/ws" />
<property name="handler">
<bean class="org.eclipse.jetty.servlet.ServletHandler">
<property name="servlets">
<list>
<bean class="org.eclipse.jetty.servlet.ServletHolder">
<property name="name" value="cxf-servlet-holder" />
<property name="servlet">
<bean class="org.apache.cxf.transport.servlet.CXFServlet">
</bean>
</property>
</bean>
</list>
</property>
<property name="servletMappings">
<list>
<bean class="org.eclipse.jetty.servlet.ServletMapping">
<property name="servletName" value="cxf-servlet-holder" />
<property name="pathSpec" value="/*" />
</bean>
</list>
</property>
</bean>
</property>
</bean>
我的 WebService Endpoint 声明为:
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="someService" class="abc.xyz.SomeClass" />
<jaxws:endpoint id="endpointId" implementor="#someBean"
address="/endpoint1">
</jaxws:endpoint>
不幸的是,这不起作用。我可以访问静态资源,但不能访问网络服务。 日志显示,WebService 发布在地址 /endpoint1 下。没有警告,没有例外。
当我将 web 服务的地址更改为完整的 url 时
<bean id="someService" class="abc.xyz.SomeClass" />
<jaxws:endpoint id="endpointId" implementor="#someBean"
address="http://x.x.x.x:8080/ws/endpoint1">
</jaxws:endpoint>
webservice 工作正常,但静态资源不再可用。
是否可以通过这样的配置将端点发布到具有相对地址的正在运行的码头?还是我完全错了?我在网上找到的大多数示例都使用 web.xml,但我没有使用像 tomcat 这样的应用程序服务器,并且需要该应用程序是一个独立的 eclipse 应用程序。
在这上面花了整整两个晚上,非常感谢任何帮助。
亲切的问候, 小野
【问题讨论】:
标签: web-services spring jetty osgi cxf