1、所需的资源文件
需要三个压缩包:apache-cxf-2.4.2.zip,apache-ant-1.8.4-bin.zip,apache-tomcat-7.0.73.zip,并将其解压到同一文件夹下,还要有jdk的支持
2、配置环境变量
JAVA_HOME:D:\Java\jdk1.8.0_101、
CXF_HOME:D:\javaweb\apache-cxf-2.4.2、
ANT_HOME:D:\javaweb\apache-ant-1.8.4、
CATALINA_HOME:D:\javaweb\apache-tomcat-7.0.73,
并把所有的home配置都配置到path路径下,到bin目录;Path = %JAVA_HOME%\bin;%CXF_HOME%\bin;%CATALINA_HOME%\bin;%ANT_HOME%\bin
再配置下CLASSPATH:.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes
3、运行一个cxf实例
a、在D:\javaweb\apache-cxf-2.4.2\samples下找到例子java_first_pojo,将其和同目录下的common_build.xml文件一起拷贝到D:\javaweb\test_cxf下,位置都可自定,但需要无中文字体
b、更改common_build.xml文件,让其支持1.7和1.8的java版本
<condition property=”is.java.version.15″>
<or>
<equals arg1=”${ant.java.version}” arg2=”1.5″/>
<equals arg1=”${ant.java.version}” arg2=”1.6″/>
<equals arg1=”${ant.java.version}” arg2=”1.7″/>
<equals arg1=”${ant.java.version}” arg2=”1.8″/>
</or>
</condition>
c、在cmd命令窗口,跳转到D:\javaweb\test_cxf\java_first_pojo,执行ant server(执行的是build.xml文件中name为server的target,但执行server,需要依赖于build,所以具体过程为server–build–指向common_build.xml文件中的build—compile,进行创建build文件夹,javac编译,最后运行server)
出现server :[java] Server ready… ,表示运行服务端代码成功,并生成build文件夹,这时即可通过http://localhost:9000/Hello?wsdl获得服务说明文件wsdl文件
可查看下源代码:
接口:
package demo.hw.server;
public interface HelloWorld {
String sayHi(String text);
}
接口实现类:
package demo.hw.server;
public class HelloWorldImpl implements HelloWorld {
public String sayHi(String text) {
System.out.println(“sayHi called”);
return “Hello ” + text;
}
}
发布服务类:
package demo.hw.server;
import org.apache.cxf.frontend.ServerFactoryBean;
public class Server {
protected Server() throws Exception {
//创建了实现类的实例
HelloWorldImpl helloworldImpl = new HelloWorldImpl();
//发布服务类
ServerFactoryBean svrFactory = new ServerFactoryBean();
//设置服务的接口
svrFactory.setServiceClass(HelloWorld.class);
//设置服务的地址
svrFactory.setAddress(“http://localhost:9000/Hello”);
//设置服务的实现类
svrFactory.setServiceBean(helloworldImpl);
svrFactory.create();
}
public static void main(String args[]) throws Exception {
//执行发布
new Server();
System.out.println(“Server ready…”);
//超时5分钟,将会自动退出服务
Thread.sleep(5 * 60 * 1000);
System.out.println(“Server exiting”);
System.exit(0);
}
}
d、另起cmd命令窗口,跳转到D:\javaweb\test_cxf\java_first_pojo,执行ant client
出现client : [java] Invoke SayHi()… [java]Hello Administrator,表示运行客户端成功,完成了服务端的调用,并且这个时候编译服务端代码的cmd命令窗口出现了[java]sayHi called,如果持续执行ant client将不断生成[java]sayHi called
可查看下代码:
客户端调用类:
package demo.hw.client;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import demo.hw.server.HelloWorld;
public final class Client {
private Client() {
}
public static void main(String args[]) throws Exception {
//创建cxf中的访问代理类
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
//参数输入,如果没有输入,则直接将访问地址设置为http://localhost:9000/Hello
if (args != null && args.length > 0 && !””.equals(args[0])) {
factory.setAddress(args[0]);
} else {
factory.setAddress(“http://localhost:9000/Hello”);
}
//通过代理类生成服务类
HelloWorld client = factory.create(HelloWorld.class);
System.out.println(“Invoke sayHi()….”);
//进行业务逻辑的调用
System.out.println(client.sayHi(System.getProperty(“user.name”)));
System.exit(0);
}
}
以上是脱离web容器运行的,从下面开始进行项目在web项目下运行,
e、执行ant war, 在build文件夹下生成war文件夹,其下有helloworld.war
f、执行ant deploy –Dtomcat=true,将war包布署到tomcat的webapps下
h、开启tomcat服务器,服务就被发布了,查看webapps下的helloworld文件夹下的web.xml,其中是存在一个servlet的,所以可以它,访问http://localhost:8080/helloworld/services,再打开链接,即可得到wsdl服务说明文件,链接的访问路径是由D:\javaweb\test_cxf\java_first_pojo\wsdl下的cxf-servlet.xml来配置的,下下篇会再做解释!
i、卸载部署包,停止tomcat后卸载应用:ant undeploy –Dtomcat=true
j、清理构建目录:ant clean
4、小结
该文主要介绍cxf环境的搭建,利用ant工具将cxf中的一个小例子在命令窗口运行,运行服务端代码,发布服务,运行客户端代码访问服务;并且把它布署到tomcat下,进而发布webservice服务!下篇将介绍如何在java项目中使用cxf发布服务及访问服务!
如果对该文章有疑问或有何看法建议或存在问题的,欢迎评论,恳请指正!