接上篇。
这个例子开始加入tomcat,但是未加入Spring。所以这个项目是个Web项目,不是普通Java项目。
首先还是pom,pom的依赖比上篇项目少了两个带jetty的就可以了。
bean类和服务类代码都一样。
但是要重写一个Bus加载。在上一篇有提到一个错误是
Cannot find any HttpDestinationFactory from the Bus.
就是这个bus。
具体代码如下:
public class CXFNonSpringServletImpl extends CXFNonSpringServlet{
private static final long serialVersionUID = 1L;
@Override
public void loadBus(ServletConfig servletConfig) {
super.loadBus(servletConfig);
Bus bus = getBus();
BusFactory.setDefaultBus(bus);
OrderProcessImpl orderProcessImpl = new OrderProcessImpl();
Endpoint.publish("/OrderProcess", orderProcessImpl);
}
}
可以看出,除了设置bus以外,也就做了跟上篇例子里Server主类一样的事情。
然后是web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>test1TomcatServerNoSpring</display-name>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>demo.order.CXFNonSpringServletImpl</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
可以看到,将CXF的Servlet设置为了刚刚重写的Servlet类。并且将CXF的url映射匹配定为/service/*。
部署启动。其中,我将该项目的url改成nospring。所以,当我们访问:
http://localhost:8080/nospring/services/
会出现以下页面:

这就是CXF下所有的WS列表。我们点击其中的WSDL网址,就会出现和上篇截图WSDL差不多的内容。
客户端代码和之前一样。唯一不一样的是wsdl地址变化了。在本例子中,变成了:
http://localhost:8080/nospring/services/OrderProcess?wsdl




