WebService介绍与java调用WebService方法两种方式介绍

WebService介绍与java调用WebService方法两种方式介绍

WebService相关术语介绍

  • SOAP (Simple Objext Access) 简单对象访问协议
  • WASDL (Web Service Definition Language) web服务语言与结构分析
  • UDDI(Universal Description Discovery Integration) 统一描述发现和集成

WebService主要解决问题

  • 不同系统、不同平台、不同语言之间的通信访问和调用
  • 应用程序的集成,不同业务的整合

WebService应用

  • QQ中的天气预报
  • 淘宝中可以查看第三方快递信息,比如查看中通快递信息

java调用WebService两种方式

方式一,需要下载客户端代码

步骤

以调用第三方天气接口为例:
天气接口地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

Step1: 打开项目文件目录路径文件夹,在当前文件夹打开cmd,其中exam是项目包目录,输入

wsimport -keep -p exam -verbose

Step2: 如果遇到如下错误:

在这里插入图片描述

用浏览器打开:天气接口地址http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
在这里插入图片描述
ctrl+s保存文件为weather.wsdl。用编辑器打开下载的文件,将

<s:element ref="s:schema" /> <s:any />

修改成

<s:any minOccurs="2" maxOccurs="2" />
Step3:打开保存的文件路径输入cmd,输入
wsimport -s .   weather.wsdl

在这里插入图片描述

生成的文件
在这里插入图片描述
文件内容:
在这里插入图片描述
在这里插入图片描述

Step4,测试java调用webservice天气接口
测试代码
public class Test {
    public static void main(String[] args) throws MalformedURLException {
//        URL url=new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");
//        WeatherWebService ws = new WeatherWebService(url);
        WeatherWebService ws = new WeatherWebService();
        //WeatherWebServiceSoap为调用的实现类
        WeatherWebServiceSoap wsSoap = ws.getWeatherWebServiceSoap();
        ArrayOfString aos = null;
        aos = wsSoap.getWeatherbyCityName("西安");
        System.out.println(aos.getString());
    }
}
测试结果

在这里插入图片描述

方式二,直接调用

步骤
Step 1.导入依赖
  <!--webservice-->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
        <version>3.2.5</version>
    </dependency>
Step 2.测试代码
public class WebServiceTest {
    private static final AriesJcLogger logger = AriesJcLoggerFactory.getLogger(WebServiceTest.class);

    /**
     * 调用webservice接口
     */
    public String sendWsdl() {

        logger.info("--------调用webservice接口begin-------");
        // 创建动态客户端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

        //对方的wsdl地址
//        Client client = dcf.createClient("http://xx .xxx.xx.xx:9556/xxx/ws/getAlarmWs?wsdl");
//        Client client = dcf.createClient("http://10.195.246.151:8123/SynTime?wsdl");
//        String wsdl = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
        String wsdl = "F:\\IDEA_Project\\练习\\exam\\weather.wsdl";
        logger.info("wsdl地址:{}", JsonUtil.toJson(wsdl));
        Client client = dcf.createClient(wsdl);
        String json = null;
        try {
            String targetNameSpace = "http://WebXml.com.cn/";
            String methodName = "getWeatherbyCityName";
            logger.info("目的地址:{}",JsonUtil.toJson(targetNameSpace));
            logger.info("方法名称:{}",JsonUtil.toJson(methodName));
            QName qName = new QName(targetNameSpace, methodName);
//            QName qName = new QName("http://tempuri.org/ns.xsd/Service.wsdl", "SynTime");
//            URL wsdlLocation = new URL("http://10.195.246.151:8123");
//            Service service = Service.create(wsdlLocation, qName);
            //Object[] objects1= client.invoke(qName, "aaa","bbb"); //参数1,参数2,参数3......按顺序放就看可以
//            Object[] objects1= client.invoke(qName, ""); //参数1,参数2,参数3......按顺序放就看可以
            logger.info("调用方法:{}",JsonUtil.toJson(qName));
            String cityName ="西安";
            logger.info("参数列表:{}",JsonUtil.toJson(cityName));
            Object[] objects1= client.invoke(qName,cityName); //参数1,参数2,参数3......按顺序放就看可以
            json = JsonUtil.toJson(objects1[0]);
            System.out.println("返回数据:" + json.toString());

        } catch (Exception e) {
            e.printStackTrace();
            logger.info("服务器断开连接,请稍后再试",e);
        }
        logger.info("--------调用webservice接口end-------");
        return json;


    }

    public static void main(String[] args) {
        WebServiceTest wt = new WebServiceTest();
        String s = wt.sendWsdl();
        System.out.println(s);
    }
}

如果遇到如下错误:
在这里插入图片描述
需要将方式一中的 weather.wsdl保存到本地,修改wsdl地址为如下:

String wsdl = "F:\\IDEA_Project\\练习\\exam\\weather.wsdl";
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java调用WebService接口有多种方式,以下是其中两种常见的方式: 1. 使用JAX-WS (Java API for XML Web Services):JAX-WS是Java EE的一部分,它提供了一种简单的方式来开发和调用WebService接口。你可以使用wsimport工具根据WSDL(Web Services Description Language)文件生成客户端代码,并使用该代码调用WebService接口。下面是一个简单的示例代码: ```java import com.example.webservice.HelloWorld; import com.example.webservice.HelloWorldService; public class WebServiceClient { public static void main(String[] args) { HelloWorldService service = new HelloWorldService(); HelloWorld port = service.getHelloWorldPort(); String result = port.sayHello("John"); System.out.println(result); } } ``` 2. 使用Apache CXF:Apache CXF是一个开源的WebService框架,它提供了丰富的功能和灵活的配置选项。你可以使用CXF的工具生成客户端代码,并使用该代码调用WebService接口。下面是一个简单的示例代码: ```java import com.example.webservice.HelloWorld; public class WebServiceClient { public static void main(String[] args) { HelloWorld service = new HelloWorld(); HelloWorld port = service.getHelloWorldPort(); String result = port.sayHello("John"); System.out.println(result); } } ``` 这只是两种常见的方式之一,实际上还有其他的方式可以调用WebService接口,如使用Spring Web Services等。具体选择哪种方式取决于你的需求和项目的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值