前言
1)通过一个简单的java案例如何调用第三方提供的web服务,想想自己测试接口的时候用过,可能对有些新伙伴有些帮助。
所以还是记录一下吧。如有不足,请指教。。。。。
一、用到的依赖包
(可以在mevan中央仓库自行下载 https://mvnrepository.com/)
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<!-- axis 1.4 jar start -->
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<!-- 处理xml-->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency>
二、说明
1、通过java程序远程访问地方服务提供的webservice服务,需要传入四个参数
2、通过读取本地文件,并判断是否符合xml格式
3、如符合,则格式化xml,提高阅读性
三、代码样例
package cn.tx.webservice;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.StringReader;
import java.io.StringWriter;
import java.rmi.RemoteException;
/**
* @ClassName SendSynyiPatientCardAdd
* @Description TODO
* @Author jiac
* @Date 2021/11/5 14:08
* @Version 1.0
**/
public class SendSynyiPatientCardAdd {
//设置访问wsdl服务地址
private final String url="http://localhost:22002/services/HIS?wsdl";
//命名空间
private final String namespace="www.synyi.com";
//具体方法
private final String method="invoke";
//设置接口名称
// private final String soapAction="";
public String sendPatientAdd(String services,String urid,String pwd,String parameter) throws ServiceException, ServiceException, RemoteException {
Service service=new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);//设置请求wsdl
call.setOperationName(new QName(namespace,method)); //设置请求命名空s间及具体方法
//设置入参
call.addParameter("services", XMLType.XSD_STRING, ParameterMode.IN);//设置请求参数1
call.addParameter("urid", XMLType.XSD_STRING, ParameterMode.IN);//设置请求参数2
call.addParameter("pwd", XMLType.XSD_STRING, ParameterMode.IN);//设置请求参数3
call.addParameter("parameter", XMLType.XSD_STRING, ParameterMode.IN);//设置请求参数4
call.setUseSOAPAction(true); //设置使用soap操作
call.setTimeout(6000); //设置超时时间
call.setReturnType(XMLType.XSD_STRING);//设置返回类型
Object[] obj = { services, urid, pwd,parameter};
String invoke = (String)call.invoke(obj);
return invoke;
}
//判断是否符合xml格式要求
public static boolean isXmlDocument(String xml){
boolean isxml=true;
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder=null;
try {
documentBuilder= documentBuilderFactory.newDocumentBuilder();
documentBuilder.parse(new InputSource(new StringReader(xml)));
} catch (Exception e) {
isxml=false;
}
return isxml;
}
//将字符串string的xml 进行格式化
public static String formatXml(String xml) throws Exception {
boolean isxml = isXmlDocument(xml);
if(isxml==false){
return "false";
}
org.dom4j.Document document= DocumentHelper.parseText(xml);
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
StringWriter stringWriter=new StringWriter();
//格式化输出
XMLWriter xmlWriter=new XMLWriter(stringWriter,outputFormat);
xmlWriter.write(document);
return stringWriter.toString();
}
public static void main(String[] args) throws Exception {
SendSynyiPatientCardAdd send=new SendSynyiPatientCardAdd();
StringBuffer sbf = new StringBuffer();
BufferedReader bufferedReader=new BufferedReader(new FileReader("D:\\MAVEN\\tx_boot\\springboot_first\\src\\InhospitalRegistrationUpdate.xml"));
String xml="";
while ( (xml=(bufferedReader.readLine()))!=null){
sbf.append(xml);
}
String isxml = formatXml(sbf.toString());
if(isxml!="false"){
String st = send.sendPatientAdd("InhospitalRegistrationUpdate", "HIS", "HIS", isxml);
String responseXml = formatXml(st);
System.out.println("Response:"+"\r\n"+responseXml);
}
return;
}
}
1.结尾
总之,通过这个简单的案例展示,主要是为了记录下,调用第三方的提供的web服务,当第三方提供web服务后,我们可以将这个服地址(http://localhost:22002/services/HIS?wsdl)。放在浏览器打开,需要关注 名称空间名称 、方法名称 、以及需要传入的参数。已经参数类型,通常都是string.