6、CXF与spring的整合(WebService的整合)

 我来答
舒适还明净的海鸥i
2022-07-12 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:69.5万
展开全部

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

说明: 此时访问就可以看到

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式