之前没有接触过webService  现在需要写个webService的客户端去获取服务端的数据,然后再存入到本机的数据库中,不知道该如何实现
这个是开发的报表功能,现在报表的数据是本机自己建的表,但实际的数据要从别的几个系统中取出,再存入本机的数据库,所以想请问下实现过程是什么,谢谢
更多 0

解决方案 »

  1.   

    研究下socket和PHPRPC喽,webserive内容很多了
      

  2.   

    提供数据的系统必须提供webservice接口,你才能通过客户端进行调用。可以通过httpClient的方式访问服务端的webservice接口,并且客户端不需要导入任何关于webservice的jar 包。
      

  3.   

    通过服务端提供的wsdl生成对应的客户端,然后去调用
      

  4.   

    给你个CXF调用的参考
    这个是服务那边提供的接口类
    import java.util.List;import javax.jws.WebParam;
    import javax.jws.WebService;@WebService(targetNamespace="com.yx.service")
    public interface HelloWorld {

         String sayHi(@WebParam(name="text")String text);
         String sayHiToUser(String name);
         String[] SayHiToUserList(List<String> userList);
     }
    下面是客户端
    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;import com.yx.webservice.HelloWorld;
    /**
     * CXF客户端测试webservice--利用服务端接口类WebserviceTest
     * @author 
     *
     */
    public class TestCXFClient {
    public static void main(String[] args) {
    //方法一
    /**
     * 这种调用service的好处在于调用过程非常简单,就几行代码就完成一个webservice的调用,
     * 但是客户端也必须依赖服务器端的接口,这种调用方式限制是很大的,
     * 要求服务器端的webservice必须是java实现--这样也就失去了使用webservice的意义
     */
    JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
            factory.setServiceClass(HelloWorld.class);
            factory.setAddress("http://localhost:8080/CXFWebserver/webservice/helloWorld?wsdl");
            HelloWorld service=(HelloWorld) factory.create();
            System.out.println(service.sayHi("rr-cxf"));   
            
            
            //方法二
            JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();  
            Client client = clientFactory.createClient("http://localhost:7777/myWebservice?wsdl");  
            Object[] result;
    try {
    result = client.invoke("sayHello", "rr-cxf");
    System.out.println(result[0]); 
    } catch (Exception e) {
    e.printStackTrace();
    }         
    }
    }
    最简单的是得到服务端的wsdl,用eclipse的web service client 生成代码,客户端就简单了
    右键--new-- >other -- > web service client  把swdl 输入,就能生成客户端代码了,然后写个调用接口的方法
    public static void main(String[] args) {
    try {
    URL url = new URL("http://localhost:7777/myWebservice?wsdl");
    WebserviceTestImplService service = new WebserviceTestImplServiceLocator();

    WebserviceTestImplServiceSoapBindingStub stub = new WebserviceTestImplServiceSoapBindingStub(url,service);
        
    System.out.println(stub.sayHello("rrr-eclipse"));

    } catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (RemoteException e) {
    e.printStackTrace();
    }
    }
    这种方式,生成的代码太多
     
      

  5.   

    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;import com.yx.webservice.HelloWorld;
    /**
     * CXF客户端测试webservice--利用服务端接口类WebserviceTest
     * @author 
     *
     */
    public class TestCXFClient {
    public static void main(String[] args) {
    //方法一
    /**
     * 这种调用service的好处在于调用过程非常简单,就几行代码就完成一个webservice的调用,
     * 但是客户端也必须依赖服务器端的接口,这种调用方式限制是很大的,
     * 要求服务器端的webservice必须是java实现--这样也就失去了使用webservice的意义
     */
    JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
            factory.setServiceClass(HelloWorld.class);
            factory.setAddress("http://localhost:8080/CXFWebserver/webservice/helloWorld?wsdl");
            HelloWorld service=(HelloWorld) factory.create();
            System.out.println(service.sayHi("rr-cxf"));   
            
            
            //方法二
            JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();  
            Client client = clientFactory.createClient("http://localhost:7777/myWebservice?wsdl");  
            Object[] result;
    try {
    result = client.invoke("sayHello", "rr-cxf");
    System.out.println(result[0]); 
    } catch (Exception e) {
    e.printStackTrace();
    }         
    }
    }
      

  6.   

    1. 使用ajax调用var xhr;
    function invoke(){
    if(window.ActiveXObject){
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
    xhr = new XMLHttpRequest();
    }
    //指定请求地址
    var url = "http://127.0.0.1:7777/hello?wsdl";
    //定义请求类型和地址和异步
    xhr.open("POST", url, true);
    //设置Content-Type
    xhr.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
    //指定回调方法
    xhr.onreadystatechange = back;

    var textVal = document.getElementById("mytext").value;
    //组装消息体的数据
    var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://server.hm.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
    +'<soapenv:Body>'
    +'<q0:sayHello>'
    +'<arg0>'+textVal+'</arg0>'
    +'</q0:sayHello>'
    +'</soapenv:Body>'
    +'</soapenv:Envelope>';
    xhr.send(data);
     
    }
    function back(){
    if(xhr.readyState == 4){
    if(xhr.status == 200){
    var doc = xhr.responseXML;
    alert(doc);
    alert(xhr.responseText);
    var tag = doc.getElementsByTagName("return")[0];
    alert(tag)

    }
    }}
    2. 通过URLConnection调用//创建url地址
    URL url = new URL("http://192.168.1.104:8080/hello");
    //打开连接
    URLConnection conn = url.openConnection();
    //转换成HttpURL
    HttpURLConnection httpConn = (HttpURLConnection) conn;
    //打开输入输出的开关
    httpConn.setDoInput(true);
    httpConn.setDoOutput(true);
    //设置请求方式
    httpConn.setRequestMethod("POST");
    //设置请求的头信息
    httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
    //拼接请求消息
    String data = "<soapenv:Envelope xmlns:soapenv=" +
    "\"http://schemas.xmlsoap.org/soap/envelope/\" " +
    "xmlns:q0=\"http://server.rl.com/\" " +
    "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
    +"<soapenv:Body>"
    +"<q0:sayHello>"
    +"<arg0>renliang</arg0> "
      +"</q0:sayHello>"
      +"</soapenv:Body>"
      +"</soapenv:Envelope>";
    //获得输出流
    OutputStream out = httpConn.getOutputStream();
    //发送数据
    out.write(data.getBytes());
    //判断请求成功
    if(httpConn.getResponseCode() == 200){
    //获得输入流
    InputStream in = httpConn.getInputStream();
    //使用输入流的缓冲区
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    StringBuffer sb = new StringBuffer();
    String line = null;
    //读取输入流
    while((line = reader.readLine()) != null){
    sb.append(line);
    }
    //创建sax的读取器
    SAXReader saxReader = new SAXReader();
    //创建文档对象
    Document doc = saxReader.read(new StringReader(sb.toString()));
    //获得请求响应return元素
    List<Element> eles = doc.selectNodes("//return");
    for(Element ele : eles){
    System.out.println(ele.getText());
    }
      

  7.   

    1. 使用ajax调用var xhr;
    function invoke(){
    if(window.ActiveXObject){
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
    xhr = new XMLHttpRequest();
    }
    //指定请求地址
    var url = "http://127.0.0.1:7777/hello?wsdl";
    //定义请求类型和地址和异步
    xhr.open("POST", url, true);
    //设置Content-Type
    xhr.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
    //指定回调方法
    xhr.onreadystatechange = back;

    var textVal = document.getElementById("mytext").value;
    //组装消息体的数据
    var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://server.hm.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
    +'<soapenv:Body>'
    +'<q0:sayHello>'
    +'<arg0>'+textVal+'</arg0>'
    +'</q0:sayHello>'
    +'</soapenv:Body>'
    +'</soapenv:Envelope>';
    xhr.send(data);
     
    }
    function back(){
    if(xhr.readyState == 4){
    if(xhr.status == 200){
    var doc = xhr.responseXML;
    alert(doc);
    alert(xhr.responseText);
    var tag = doc.getElementsByTagName("return")[0];
    alert(tag)

    }
    }}
    2. 通过URLConnection调用//创建url地址
    URL url = new URL("http://192.168.1.104:8080/hello");
    //打开连接
    URLConnection conn = url.openConnection();
    //转换成HttpURL
    HttpURLConnection httpConn = (HttpURLConnection) conn;
    //打开输入输出的开关
    httpConn.setDoInput(true);
    httpConn.setDoOutput(true);
    //设置请求方式
    httpConn.setRequestMethod("POST");
    //设置请求的头信息
    httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
    //拼接请求消息
    String data = "<soapenv:Envelope xmlns:soapenv=" +
    "\"http://schemas.xmlsoap.org/soap/envelope/\" " +
    "xmlns:q0=\"http://server.rl.com/\" " +
    "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
    +"<soapenv:Body>"
    +"<q0:sayHello>"
    +"<arg0>renliang</arg0> "
      +"</q0:sayHello>"
      +"</soapenv:Body>"
      +"</soapenv:Envelope>";
    //获得输出流
    OutputStream out = httpConn.getOutputStream();
    //发送数据
    out.write(data.getBytes());
    //判断请求成功
    if(httpConn.getResponseCode() == 200){
    //获得输入流
    InputStream in = httpConn.getInputStream();
    //使用输入流的缓冲区
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    StringBuffer sb = new StringBuffer();
    String line = null;
    //读取输入流
    while((line = reader.readLine()) != null){
    sb.append(line);
    }
    //创建sax的读取器
    SAXReader saxReader = new SAXReader();
    //创建文档对象
    Document doc = saxReader.read(new StringReader(sb.toString()));
    //获得请求响应return元素
    List<Element> eles = doc.selectNodes("//return");
    for(Element ele : eles){
    System.out.println(ele.getText());
    }
      

  8.   

    1.写个webService的客户端去获取服务端的数据,就是说服务端是由他们提供的,你只需调用一下获取数据存入数据库就可以了,
    所以你只用关注客户端需要提供的参数,应该有接口说明文档的吧。2.webService客户端网上案例很多,很简单;也有自动生成客户端的插件。
      

  9.   

    http://jingyan.baidu.com/article/925f8cb8c13233c0dde0561e.html
      

  10.   

    webService分为服务端和客户端,客户端的生成需要依赖服务端的wsdl。当然,调用也是使用的客户端调用接口。你现在需要的是百度一下如何使用webSerive编写接口。