二、Webservice基于Java的多种调用方式

前言

前不久,为客户开发的一个身份验证功能开发要用到Webservice,我是第一次接触Webservice的开发。

刚开始用CXF的方式去调用Webservice,成功了,但是部署到测试环境报错了,原因是CXF依赖与JDK的一个tool.jar,而测试环境使用的是JRE环境(JRE环境没有tool.jar这个jar包),因而CXF调用Webservice的方式行不通。于是,我又寻找了其它调用Webservice的方式进行尝试,AXIS、AXIS2,HttpClient,这三种方式都试过了,也踩了不少坑,最后使用HttpClient的方式解决了问题。

在此,我需要将这个踩坑过程记录,加深Webservice调用方式的知识点。

这次Webservice身份验证功能接口我一共使用了四种方式去调用,它们分别是:

(1)CXF方式。

(2)AXIS方式。

(3)AXIS2方式

(4)Http Client方式。

下面,对这四种调用方式进行介绍。可能某些方面介绍的不太齐全,但希望能大家能有所帮助。

首先看一下Webservice服务端的代码,这是一个非常简单的Webservice接口,方便理解Webservice调用的交互流程。

Webservice服务端代码

package com.chenlw.webservice;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;


/**
 * Title: ServiceHello
 * Description: 基于jdk1.6以上的javax.jws 发布webservice接口
 *
 * @author panchengming
 * @WebService - 它是一个注解,用在类上指定将此类发布成一个ws。
 * Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解
 * 对象绑定到一个地址的端口上。
 * Version:1.0.0
 */
@WebService
public class MyWebServiceTester {

    public static String JWS_SERVER_URL = "http://192.168.174.1:9090/MyWebService/testWebService";


    public static void main(String[] args) {
        // 通过EndPoint(端点服务)发布一个WebService
        // 发布成功后 在浏览器输入 http://192.168.174.1:9090/MyWebService/testWebService?wsdl
        Endpoint.publish(JWS_SERVER_URL, new MyWebServiceTester());
        System.out.println("发布成功!");

    }


    /**
     * 供客户端调用方法  该方法是非静态的,会被发布
     *
     * @param param 传入参数
     * @return String 返回结果
     */
    public String testWebService(String param) {
        return "Webservice接口返回数据:" + param;
    }


}

代码运行后,在浏览器输入http://192.168.174.1:9090/MyWebService/testWebService?wsdl可以如下内容(这是WSDL,即基于XML语言的Web服务描述语言)。

1 CXF方式调用Webservice

1.1 CXF简介

Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。【来源于:百度百科CXF】

1.2 CXF调用Webservice

测试代码:

package com.chenlw.webservice;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

/**
 * @author chenlw 2019/10/02
 */
public class CxfClientTester {

    public static final String SERVICE_URL = "http://192.168.174.1:9090/MyWebService/testWebService?wsdl";
    public static final String METHOD_NAME = "testWebService";


    public static void main(String[] args) {
        try {
            test1();
        } catch (Exception e) {
            System.out.println("ERROR:" + e.getMessage());
        }
    }

    public static void test1() throws Exception {
        JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
        Client client = clientFactory.createClient(SERVICE_URL);
        Object[] result = client.invoke(METHOD_NAME, "hello");
        System.out.println(result[0]);
    }

}

运行结果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值