WEBService - Java调用第三方接口,WEBService协议

项目上使用到特在此记录下。百度一个下午找到的内容都是缺胳膊少腿,实在难搞,研究出来较为便捷的实现方式分享给大家,共同学习进步。
废话少说,直接上代码。

项目环境:Springboot框架、jdk1.8

1.首先引入依赖

<!-- WEB Service 调用相关 -->
		<dependency>
			<groupId>javax.xml</groupId>
			<artifactId>jaxrpc-api</artifactId>
			<version>1.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.axis</groupId>
			<artifactId>axis</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
		    <groupId>commons-discovery</groupId>
		    <artifactId>commons-discovery</artifactId>
		    <version>0.2</version>
		</dependency>
		<dependency>
		    <groupId>wsdl4j</groupId>
		    <artifactId>wsdl4j</artifactId>
		    <version>1.5.2</version>
		</dependency>
  1. 实现demo
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.encoding.XMLType;

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

import com.alibaba.fastjson.JSONObject;

public class WebServiceUtil {

	public static JSONObject sendWebService(String carNO) {
		JSONObject json = new JSONObject();
//        json.put("CarNo", "HJSCE6E8VN0000888");
		json.put("CarNo", carNO);
		Service service = new Service();
		String result = null;
		try {
			Call call = (Call) service.createCall();
			// wsdl完整地址
			call.setTargetEndpointAddress("http://gpszh.hyundai-cn.com:9210/gpsservice.asmx?wsdl");
			/**
			 * 设置方法名 new QName(String namespaceURI, String localPart)
			 * namespaceURI即为wsdl中的targetNamespace, localPart即为接口名
			 */
			call.setOperationName(new QName("http://tempuri.org/", "getMachineryInfo"));
			/**
			 * 添加参数 addParameter方法的参数包括:参数名(namespace+参数名)、参数类型、ParameterMode(入参即为IN)
			 */
			call.addParameter(new QName("http://tempuri.org/", "sjson"), XMLType.XSD_STRING, ParameterMode.IN);
			call.setUseSOAPAction(true);
			// SOAPActionURI格式为targetNamespace+方法名
			call.setSOAPActionURI("http://tempuri.org/getMachineryInfo");
			// 指定返回值类型,为字符串
			call.setReturnType(XMLType.XSD_STRING);
			call.setReturnClass(java.lang.String.class);

			result = (String) call.invoke(new Object[] { json.toJSONString() });
		} catch (RemoteException | ServiceException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		return JSONObject.parseObject(result);
	}

	public static void main(String[] args) {
		JSONObject jsonObject = sendWebService("HJSCE6E8VN0000888");
		System.out.println(jsonObject);
	}
}
  • 其中比较容易踩坑的点是如下几句代码
/**
			 * 设置方法名 new QName(String namespaceURI, String localPart)
			 * namespaceURI即为wsdl中的targetNamespace, localPart即为接口名
			 */
			call.setOperationName(new QName("http://tempuri.org/", "getMachineryInfo"));
			/**
			 * 添加参数 addParameter方法的参数包括:参数名(namespace+参数名)、参数类型、ParameterMode(入参即为IN)
			 */
			call.addParameter(new QName("http://tempuri.org/", "sjson"), XMLType.XSD_STRING, ParameterMode.IN);
			call.setUseSOAPAction(true);
			// SOAPActionURI格式为targetNamespace+方法名
			call.setSOAPActionURI("http://tempuri.org/getMachineryInfo");
  • 这边的 namespaceURI 即为 SoapUI工具调试时 xml第一行的后半段地址,这个地方写错会出现各种报错。

  • 其次就是参数名称不要写错,完整的wsdl地址可以看到对应接口的说明,例如:在这里插入图片描述

扩展资料:
拿到webservice地址后可以先使用 Soapui 工具进行调试,工具调的通接口,那代码调用就没有问题了。
官网下载后安装:
使用步骤:
在这里插入图片描述

在这里插入图片描述

点击ok后左侧树状菜单栏会显示出所有的接口名字,找到自己对应的点开,补充参数即可调用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值