6、CXF与spring的整合(WebService的整合)
web.xml
说明: 这里主要配置了 spring 的配置文件地址, spring 监听器、 CXF 核心控制器。
applicationContext.xml
说明:
在 spring 的配置文件中使用 jaxws:endpoint 元素来暴露 WebService ,这里有两种方式:
然后我们就可以将工程部署到 tomcat 中,在浏览器中使用
地址 http://localhost:8080/cxf_spring/myService 访问我们的 WebService 工程。
MyClient.java
注意: myService 指定我们的服务名字(在 web.xml 中配置),而 fkjava 指定服务提供者的地址(在 applicationContext.xml 中配置)。同时这种集成不好,因为将地址写死了,没有使用 spring 的注入方式。
我们看 HelloWorldWs.java 这个服务类:
可以看到其中的实际业务处理类还是使用的手工方法进行实例化,没有使用 spring 的注入方式。
在 spring 的配置文件中改变暴露 WebService 的方式:
说明: 加 # 号是为了让服务器知道这个名字不是一个类 ,而只是一个 id 。
然后改造 HelloWorldWs.java 服务类:
然后我们再次使用之前的地址进行访问,发现效果还是一样的。
在上面配置的基础上进行添加,在 applicationContext.xml 中:
此时,和以前一样我们需要在客户端(工程 Call_CXFSpring )那边加上拦截器,添加上用户名和密码的头,然后对服务器进行访问。以此来进行验证。客户端中我们运行类:
MyClient.java
访问服务端。
传统的 SSH 项目中,一般在本地是有相关的数据的,但是有一种场景是我们需要调用别人的数据,但是别人的数据不可能让我们进行修改等操作,那么别人只会暴露一个 WebService ,而我们就需要去调用别人的 WebService 服务器。我们在访问别人时,只能得到 WSDL 文档。此时我们的项目中就不需要业务逻辑组件了,直接去调用别人的 WebService 的一个代理即可。
首先我们拷贝上面的工程,改名为 cxf_springClient ,然后需要增加 struts2 的相关 jar 包:
将原有的一些包删掉,留下权限包 org.fkjava.cxf.ws.auth 。然后我们启动工程 Auth_Server 提供远程服务。在 web 工程中生成相应的包及程序。
web.xml
说明: 这里我们不再需要 CXF 的 servlet 了,因为不需要业务类了,我们直接调用远程业务即可。同时配置 struts2 的核心控制器。
applicationContext.xml
说明: 这里我们同样不需要业务类了,但是需要配置远程业务代理类( serviceClass )。同时注意:不要将端口设置为8080,会冲突。可以看到我们使用 serviceClass 将接口配置进去,而这里的 id 不能随便写,要和 action 中定义的接口名一致。由于远程服务器设置了权限拦截,所以这里使用过滤器将用户名和密码设置到 wsdl 文档的头中。然后在这个类中我们需要使用 execute 方法去获取相应的数据。
struts.xml
ListCatsAction .java
说明: 此时我们就可以使用地址 http://localhost:8080/cxf_springClient/listCats 进行访问了,当然会报找不到 jsp 的错误。
content/listCats.jsp
说明: 此时访问就可以看到