【发布时间】:2011-10-27 14:20:23
【问题描述】:
尝试在我的 CXF Web 服务端点配置中使用相对发布地址时遇到很多困难。
我有一个简单的 Java 优先 JAX-WS 项目,其中包含以下配置文件:
applicationContent-cxf.xml:
<beans xmlns=...>
...
<jaxws:endpoint
id="helloWorldService"
implementorClass="org.helloworld.ws.HelloWorldServiceImpl"
implementor="#helloWorldServiceImpl" <!-- spring managed -->
endpointName="sayHello"
address="HelloWorldService"/>
</beans>
web.xml:
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/applicationContext.xml
WEB-INF/applicationContext-cxf.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<display-name>Hello World Servlet</display-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
根据http://cxf.apache.org/docs/servlet-transport.html,看来我应该能够指定HelloWorldService 的发布地址,并且服务的URL 将解析为(例如)http://localhost:8080/services/HelloWorldService。但是当我尝试转到http://localhost:8080/services/HelloWorldService?wsdl 时,我得到一个 404。如果我将我的 jaxws 端点中的发布地址更改为绝对 URL http://localhost:8080/services/HelloWorldService,我就可以访问 wsdl。
如果可能,我想指定一个相对端点地址。我是使用 CXF(和编写 Web 服务)的新手,因此非常感谢任何帮助!
更新 1:
请注意,我正在将我的 Web 服务部署到 Tomcat 7。我不知道它在记录什么,但我的启动日志中的一行显示 Setting the server's publish address to be HelloWorldService。如果有人需要更多信息来帮助我,请告诉我。
更新 2:
CXF 似乎检测到 CXFServlet 是否“正在使用”,如果没有,则使用嵌入式码头实例。 http://cxf.apache.org/docs/xfire-migration-guide.html#XFireMigrationGuide-HTTPandServletSetup。因此,出于某种原因,CXF 使用嵌入式码头实例而不是我的 servlet。但是,我不知道除了 web.xml 中的 HelloWorldServlet 之外还需要什么配置,而且 CXF 文档对我没有进一步的帮助。
【问题讨论】:
标签: web-services spring jax-ws cxf