Apache CXF是一个开源的Services框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。 ————摘自于《360百科》
我们了解了CXF框架,那它是怎样搭建的呢?今天我就我学习的一些心得和总结和大家分享一下。我是利用cxf搭建的服务器来实现客户端向服务器发送一个ip地址,服务器将打开cmd进行ping,测试连通性。然后将测试的结果返回给客户端。
步骤:
a)建立一个web工程,将CXF的jar包导入进去。地址:http://download.csdn.net/detail/huangzebiao007/6380241
b)创建一个User类。(命名随意)
package com.zsl.service; import java.io.Serializable; public class User implements Serializable{ private String ip; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } } c)创建一个接口
package com.zsl.service; import javax.jws.WebService; import com.zsl.service.User; @WebService public interface PingCommand { String Ping(User user); } d)接口的实现类,这里的方法也实现了java程勋如何实现操作cmd执行网络命令
package com.zsl.service; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedHashMap; import java.util.Map; import javax.jws.WebService; import com.zsl.service.User; import com.zsl.service.PingCommand; @WebService(endpointInterface="com.zsl.service.PingCommand",serviceName="PingCommand") public class PingCommandImpl implements PingCommand { Map<Integer, User> users = new LinkedHashMap<Integer, User>(); public String Ping(User user) { StringBuffer buf=new StringBuffer(); String s=""; Process process; try { process=Runtime.getRuntime().exec("cmd /c ping"+" "+user.getIp()); BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream())); while((s=br.readLine())!=null) { buf.append(s+"\r\n"); } process.waitFor(); } catch (Exception e) { e.printStackTrace(); } String m=buf.toString(); return m; } } e)利用cxf创建服务器类
package com.zsl.service ; import javax.xml.ws.Endpoint; public class webServiceApp { public static void main(String[] args) { System.out.println("web service start"); PingCommandImpl implementor = new PingCommandImpl(); String address = "http://localhost:8080/pingCommand"; Endpoint.publish(address, implementor); System.out.println("web service started"); } } f)验证服务器正常启动与否打开浏览器在地址栏输入http://localhost:8080/pingCommand?wsdl如出现下图则成功启动。
h)写客户端的代码,用user.setIP()给客户端传递一个ip。
package com.zsl.client; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.zsl.service.User; import com.zsl.service.PingCommand; public class PingRunClient { public static void main(String[] args) { //首先右键run as 运行com.hsy.server.webServiceApp类,然后再运行这段客户端代码 JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean(); jwpfb.setServiceClass(PingCommand.class); jwpfb.setAddress("http://localhost:8080/pingCommand"); PingCommand pc = (PingCommand) jwpfb.create(); User user = new User(); user.setIp("127.0.0.1"); System.out.println(pc.Ping(user)); } } i)先启动服务器,然后在启用客户端,这样服务器就会把ping的结果返回到客户端,我们就可以在控制台上看见了。
以上就是实现简单的Services开源框架CXF的小例子。在这个简单的程序中我们可以学到cxf的搭建和如何在java程序中如何利用cmd执行一些网络命令。
我简单的说一下我再写这个程序中所遇见的一些问题:
1:在运行的时候我利用的8080端口,总所周知我们的tomcat的端口就是8080,所以我们在启用cxf的时候一定要记住把tomcat关掉。
2:就是在导入包的时候余姚记住,一定要导正确,我再导入的时候也出现了错误,调试了好久,血的教训啊 大家铭记啊!
3:就是在client的地址一定要和服务器上的地址一致,最好是copy过去,错了的话将导致数据传不过去。
4:网络命令一定要记住ping和ip地址中间是由一个空格的,不然没有结果返回。
以上就是我所遇见的一些问题,如果有不妥之处欢迎指正!谢谢!