Services开源框架之CXF与在java程序中如何实现操作cmd执行网络命令

    xiaoxiao2025-01-22  1

    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地址中间是由一个空格的,不然没有结果返回。

    以上就是我所遇见的一些问题,如果有不妥之处欢迎指正!谢谢!

    转载请注明原文地址: https://ju.6miu.com/read-1295729.html
    最新回复(0)