由于我负责的项目中jdk版本为1.6,于是下述内容以CXF2.6版本为准,CXF3.X版本以后再写。
一.服务端开发
1.建立一个web工程ws_cxf_webservice,引入CXF相关jar包(再次强调是2.6版本)
2.service开发
接口类:
package com.cxf.hello;
import javax.jws.WebService;
public interface Hello {
public String sayHello(String name);
}
实现类:
package com.cxf.hello.impl;
import com.cxf.hello.Hello;
public class HelloImpl implements Hello {
@Override
public String sayHello(String name) {
return "Hello" + name;
}
}
3.配置web.xml
4.配置spring_ws.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="HelloTest" address="/HelloService">
<jaxws:implementor>
<ref bean="helloImpl" />
</jaxws:implementor>
</jaxws:endpoint>
<bean id="helloImpl" class="com.cxf.hello.impl.HelloImpl" />
</beans>
5.发布到tomcat中,然后IE中输入
http://localhost:8080/ws_cxf_service/services/HelloService?wsdl,还是以看到wsdl描述语言为准。
二 . 客户端
建一个java工程ws_cxf_client,采用JUNIT单元测试;采用wsdl2Java生成客户端的方式调用,这里要用到cxf包中bin中的wsdl2java.bat。
1.打开cmd命令窗口,找到cxf安装包中的bin目录(如下):
F:\jar\apache-cxf-2.6.0\bin>wsdl2java -p com.cxf.proxy -d d:/ws -verbose http://localhost:8080/ws_cxf_service/services/HelloService?wsdl
说明:-p 包名路径,最好和项目中的包名对应,这样生成的代码无需修改。
-d 生成的代码的位置,这里指定在d盘ws文件下。
-verbose 后面就是服务端生成的wsdl。
其它参数可以参考CXF的官方文档
2.将生成的d:\\ws下的代码Copy到我们的工程中,对于有异常的类做一下修改(通过是XXXImplService.java有点异常,按照提示修改一下参数就行了);也可以将客户端代码编译后打包引入进工程中。
3.引入客户端调用的包,这里给一个需要引入最少JAR的列表
4.客户端测试代码
public class CXFClient {
public void testSayHello() throws Exception {
try {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(Hello.class);
factory.setAddress("http://localhost:8080/ws_cxf_service/services/HelloService");
Object obj = factory.create();
if (obj != null) {
Hello ws = (Hello) obj;
String s = ws.sayHello(" gary");
System.out.println("s="+s);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}