前面已经已经通过CXF的配置文件来发布一个服务了并且运行于Tomcat中,既然CXF能通过配置文件来发布服务,必然也可以通过配置来调用WebService。
下面就介绍如何通过CXF的配置来调用WebService。
使用CXF配置方式调用WebService的优缺点:
此种情况,只需要生成的接口文件,和所依赖的实体类,适合于一个Javaweb项目已经集成了Spring。并希望通过CXF配置的方式调用Web服务 。 此种情况,仍然需要导入CXF的大量jar包。这种情况也存在一定人优点,如可以将外部的Web服务通过配置文件注入(DI)到Action类中。
在控制台中输入F:\>wsdl2java -d . -p com.client.cxf.wsdl2java http://localhost:8080/WSService/cxf/hi?wsdl
前提是你已经配置好了cxf的环境变量。将此处的wsdl路径换成你的即可。
把我们需要的接口文件、和所依赖的实体类copy到项目中。我这里使用到了IHiServiceForCXFConfig.java 和 HiBean.java 其他的不用copy,然后修改报错的地方,将ObjectFactory.class去掉即可。
接着配置调用服务的文件ClientBeans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<!-- Spring配置来访问WebService -->
<!-- serviceClass:服务的接口类型 address:请求服务的地址 -->
<jaxws:client id="hiClient" serviceClass="com.spring.IHiServiceForCXFConfig"
address="http://localhost:8080/WSService/cxf/hi" >
</jaxws:client>
</beans>
在mian方法中测试
package com.client.spring;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author jackphang
* @date 2013-4-14
* @description 此种情况,只需要生成的接口文件,和所依赖的实体类,适合于一个Javaweb项目已经集成了Spring。
* 并希望通过CXF配置的方式调用Web服务 。 此种情况,仍然需要导入CXF的大量jar包。
* 这种情况也存在一定人优点,如可以将外部的Web服务通过配置文件注入(DI)到Action类中。
*/
public class ClientForSpring {
/**
* @param args
*/
public static void main(String[] args) {
AbstractApplicationContext bean = new ClassPathXmlApplicationContext(
"/com/spring/ClientBeans.xml");
IHiServiceForCXFConfig hi = bean.getBean("hiClient",
IHiServiceForCXFConfig.class);
String respValue = hi.sayHi("哈哈,spring");
System.out.println("服务器返回:" + respValue);
HiBean hiBean = hi.findHiById(1);
System.out.println(hiBean.getId() + "," + hiBean.getName() + ","
+ hiBean.getAddress());
}
}
运行main方法,就可以调用WebService的服务了 。