• java-webService(调用wsdl接口)


    使用Axis或XFire实现WebService:

    Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。
     
    XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的WebService引擎已经不再被看好,渐渐的都败落了。

    参考路径:

    https://blog.csdn.net/rockstar541/article/details/21106407

    axis2:

    参考路径:

    https://ldzyz007.iteye.com/blog/1065927

    https://blog.csdn.net/qq_22067469/article/details/83652562

    http://blog.sina.com.cn/s/blog_b18fc8d60102wwhm.html

    private static Object[] requestFunctionWebService(String url,String parameters,String namespance,String methodName) {
            try {
                RPCServiceClient rpcServiceClient = new RPCServiceClient();
                EndpointReference endpointReference = new EndpointReference(url);//url后缀不加"?wsdl"
                Options options = rpcServiceClient.getOptions();
                options.setTimeOutInMilliSeconds(30000);
                options.setProperty(HTTPConstants.SO_TIMEOUT, 30000);
                options.setTo(endpointReference);
                rpcServiceClient.setOptions(options);
                QName qName = new QName(namespance, methodName);
                Class[] classStr = new Class[] {String.class};
                Object[] params = new Object[] {parameters};
                Object[] objects = rpcServiceClient.invokeBlocking(qName,params,classStr);
                return objects;
            } catch (Exception e) {
                logger.error("requestFunctionWebService请求接口异常:"+ e.toString());
                return null;
            }
        }

    CXF:

    参考路径:

    https://zhoshijie.iteye.com/blog/2189091

    添加依赖:

         <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>3.1.16</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http-jetty</artifactId>
                <version>3.1.16</version>
            </dependency>
    public static Object[] getService(String url,String parameters, String namespace,String methodName) {
            try {
                String newUrl =url+"?wsdl";
                JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();  
                Client client = dcf.createClient(newUrl);  
                QName name=new QName(namespace, methodName);
                Object[] params = new Object[] {parameters};
                return client.invoke(name,params);
            } catch (Exception e) {
                logger.error(e);
                return null;
            } 
        }

    XFire:

    参考路径:

    https://blog.csdn.net/zl834205311/article/details/51612207

    https://blog.csdn.net/u010402228/article/details/50155767

    http://www.cnblogs.com/toyz/p/6340269.html

    ① 通过WSDL地址来创建动态客户端 
    ② 通过服务端提供的接口来创建客户端 
    ③ 使用Ant通过WSDL文件来生成客户端

    第一种方式:通过WSDL地址来创建动态客户端

    package com.jadyer.client;  
    import java.net.MalformedURLException;  
    import java.net.URL;  
    import org.codehaus.xfire.client.Client;  
    /** 
     * 通过WSDL来创建动态客户端 
     * @see 此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries 
     */  
    public class ClientFromWSDL {  
        public static void main(String[] args) throws MalformedURLException, Exception {  
            Client client = new Client(new URL("http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl"));  
            Object[] results11 = client.invoke("sayHello", new Object[]{"Jadyer22"});  
            System.out.println(results11[0]);  
        }  
    }  

    第二种方式:通过服务端提供的端口来创建客户端

    package com.jadyer.client;  
    import java.net.MalformedURLException;  
    import java.util.List;  
    import org.codehaus.xfire.client.XFireProxyFactory;  
    import org.codehaus.xfire.service.Service;  
    import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
    import com.jadyer.model.Person;  
    import com.jadyer.model.User;  
    import com.jadyer.server.HelloService;  
    /** 
     * 通过Web服务端提供的接口来创建客户端 
     * @see 客户端必须提供一个与服务端完全一致的接口,包名也要一致 
     * @see 在本例中,需要在客户端(即该项目)中提供HelloService.java接口,以及Person和User两个POJO类 
     * @see 并且此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries 
     */  
    public class ClientFromInterface {  
        public static void main(String[] args)throws MalformedURLException{  
            //首先使用XFire的ObjectServiceFactory从HelloService接口创建一个服务模型serviceModel  
            //serviceModel包含服务的说明,换句话说,就是服务的元数据  
            //Create a metadata of the service  
            Service serviceModel = new ObjectServiceFactory().create(HelloService.class);  
              
            //访问的地址  
            String serviceURL = "http://127.0.0.1:8080/XFire_demo/services/XFireServer";  
              
            //通过查看org.codehaus.xfire.client.XFireProxyFactory源码发现  
            //下面两行代码与这里直接new XFireProxyFactory()的作用是等效的  
            //XFire xfire = XFireFactory.newInstance().getXFire();  
            //XFireProxyFactory factory = new XFireProxyFactory(xfire);  
            //为XFire获得一个代理工厂对象  
            //Create a proxy for the deployed service  
            XFireProxyFactory factory = new XFireProxyFactory();  
              
            //通过proxyFactory,使用服务模型serviceModel和服务端点URL(用来获得WSDL)  
            //得到一个服务的本地代理,这个代理就是实际的客户端  
            HelloService client = (HelloService)factory.create(serviceModel, serviceURL);  
              
            /** 
             * Invoke the service 
             * @see 调用服务的本地代理(即实际的客户端)中的方法,便得到我们需要的WebServcie 
             */  
              
            /*--处理简单对象--*/  
            String serviceResponse = client.sayHello("Jadyer11");  
            System.out.println(serviceResponse);  
              
            /*--处理对象--*/  
            User u = new User();  
            u.setName("Jadyer99");  
            Person pp = client.getPerson(u);  
            System.out.println(pp.getName());  
              
            /*--处理List--*/  
            List<Person> personList = client.getPersonList(24, "Jadyer88");  
            for(Person p : personList){  
                System.out.println(p.getName());  
            }  
        }  
    }  

    这是它要用到的接口和两个POJO类

    /** 
     * Web服务提供给客户端的接口 
     * @see 这是第二种方式创建的客户端,要用到的接口 
     */  
    package com.jadyer.server;  
    import java.util.List;  
    import com.jadyer.model.Person;  
    import com.jadyer.model.User;  
    public interface HelloService {  
        public String sayHello(String name);  
        public Person getPerson(User u);  
        public List<Person> getPersonList(Integer age, String name);  
    }  
    /** 
     * 第二种方式创建的客户端,要用到的两个POJO类 
     */  
    package com.jadyer.model;  
    public class User {  
        private String name;  
        /*--getter和setter略--*/  
    }  
    package com.jadyer.model;  
    public class Person {  
        private Integer age;  
        private String name;  
        /*--getter和setter略--*/  
    }  

    Axis:

    Java WebService接口生成和调用:

    参考路径:

    https://blog.csdn.net/qazwsxpcm/article/details/70370490

    调用:

    引用jar包:axis.jar 、jaxrpc.jar

    一、使用eclipse自动生成的wsdl接口

    1、

    2、

    3、

    调用接口

    private static String requestFunctionWebService(String http,String message) {
            //http="http://203.48.27.97:85/dagl/service/TDHYxService?wsdl"
            String retMessage = "";
            try {
                YxBrowseWSProxy yx = new YxBrowseWSProxy(http);
                retMessage = yx.yxBrowse(message);//方法名yxBrowse
            } catch (Exception e) { 
                logger.error("requestFunctionWebService请求接口异常:"+ e.getMessage());
                e.printStackTrace();
            }
            return retMessage;
        }

    二、直接AXIS调用远程的web service 

    import java.util.Date;   
    import java.text.DateFormat;   
    import org.apache.axis.client.Call;   
    import org.apache.axis.client.Service;   
    import javax.xml.namespace.QName;   
    import java.lang.Integer;   
    import javax.xml.rpc.ParameterMode;   
        
    public class caClient {   
                   
           public static void main(String[] args) {   
        
                  try {   
                         String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";   
                         //直接引用远程的wsdl文件   
                        //以下都是套路    
                         Service service = new Service();   
                         Call call = (Call) service.createCall();   
                         call.setTargetEndpointAddress(endpoint);   
                         call.setOperationName("addUser");//WSDL里面描述的接口名称   
                         call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,   
                                       javax.xml.rpc.ParameterMode.IN);//接口的参数   
                         call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型     
                         String temp = "测试人员";   
                         String result = (String)call.invoke(new Object[]{temp});   
                         //给方法传递参数,并且调用方法   
                         System.out.println("result is "+result);   
                  }   
                  catch (Exception e) {   
                         System.err.println(e.toString());   
                  }   
           }   
    }  
  • 相关阅读:
    python列表[]中括号
    python元组()小括号
    python break continue跳过和跳出循环
    python FOR循环
    python while循环
    python if elif else判断语句
    python使用变量
    python -input用户输入
    pycharm模板
    港股收费
  • 原文地址:https://www.cnblogs.com/lijianda/p/9811582.html
Copyright © 2020-2023  润新知