IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> WebService接口的一些问题 org/apache/commons/discovery/tools/DiscoverSingleton Server.userException等等 -> 正文阅读

[Java知识库]WebService接口的一些问题 org/apache/commons/discovery/tools/DiscoverSingleton Server.userException等等

我们一般在开发项目中很多时候都会涉及到调用三方的接口,比如一个电商项目需要调用物流接口、支付接口等等;一个旅游类的系统会调用国内的各大旅游厂商的接口甚至一些硬件厂商的接口等等。在这些接口中遇到最多的就是Http/Https的接口,但是在一些老的项目中还是延续了WebService这种接口,所以本文介绍两种WebService客户端的程序编写(axis及hutool中的封装),以及axis这种方式常见的异常解决方案。

一、WebService客户端程序

1、axis方式

首先引入以下包:

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis-jaxrpc</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>commons-discovery</groupId>
    <artifactId>commons-discovery</artifactId>
    <version>0.2</version>
</dependency>
<!--以下的mail包是springboot项目引入包,如果你是maven项目请看“二->3”引入对应的包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

编写客户端代码:

package com.test.webservice;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

/**
 * 2021/9/18 21:27
 */
public class WebService {

    /**
     * axis方式webService客户端代码
     * @param url 请求url
     * @param namespaceURI 命名空间
     * @param method 方法
     * @param params 方法参数
     * @return
     * @throws Exception
     */
    public String exec(String url,String namespaceURI,String method,Object[] params) throws Exception {
        Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTargetEndpointAddress(new java.net.URL(url));
        call.setOperationName(new QName(namespaceURI,method));
        String result = (String)call.invoke(params);
        System.out.println("webService接口返回数据"+result);
        return result;
    }
}

然后根据返回的数据是xml则按照xml格式进行解析,json格式按照json格式解析即可。

2、Hutool的SoapClient方式

Hutool官方文档
首先引入Hutool的包:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.12</version>
</dependency>

编写客户端代码:

package com.test.webservice;

import cn.hutool.http.webservice.SoapClient;
import java.util.Map;

/**
 * 2021/9/18 21:27
 */

public class WebService {

    /**
     * Hutool SoapClient方式webService客户端代码
     * @param url 请求url
     * @param namespaceURI 命名空间
     * @param method 方法
     * @param params 方法参数
     * @return
     * @throws Exception
     */
    public String exec(String url, String namespaceURI, String method, Map<String, Object> params) {
        // 新建客户端
        SoapClient client = SoapClient.create(url)
                // 设置要请求的方法和对应的命名空间
                .setMethod(method, namespaceURI)
                // 设置参数
                .setParams(params, false);
        // 发送请求,参数true表示返回一个格式化后的XML内容
        // 返回内容为XML字符串,可以配合XmlUtil解析这个响应
        String result = client.send();
        System.out.println("webService接口返回数据" + result);
        return result;
    }
}

说明:
setParams方法设置请求参数,useMethodPrefix为true表示为每个参数的key自动加上方法的前缀,false则不加,比如方法为web:getName那么前缀就是web,即是否为每个参数的key添加web:前缀。
send方法参数传true那么会将webService接口返回的数据使用XmlUtil转换为xml格式,如果不需要转换比如该webService接口返回为json格式已经很方便解析了则不传参数或者传入false,则会保留原格式返回。
然后根据返回的数据是xml则按照xml格式进行解析,json格式按照json格式解析即可。

二、axis常见异常解决方案

1、Call call = (Call) service.createCall() 出现类型转换异常

在这里插入图片描述
原因是service.createCall()方法返回的是javax.xml.rpc.Call而非我们需要强转的org.apache.axis.client.Call
在这里插入图片描述
解决方案:引入axis-jaxrpc 1.4包
在这里插入图片描述

2、Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton异常

解决方案:引入commons-discovery包
在这里插入图片描述

3、Unable to find required classes (javax.activation.DataHandler and javax.mail异常

解决方案:引入mail包
maven项目引入以下两个包:

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

spring boot项目引入以下包:
在这里插入图片描述

4、faultCode:{http://schemas.xmlsoap.org/soap/enevlope/}Server.userException异常

出现此异常的原因大概率是因为WebService的服务端非正常可用状态,比如未启动或者服务端已经挂掉等等

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:51:35  更:2021-09-19 07:52:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:05:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码