通过java调用webservice服务详细案例一

通过java调用webservice服务详细案例一

前言

1)通过一个简单的java案例如何调用第三方提供的web服务,想想自己测试接口的时候用过,可能对有些新伙伴有些帮助。

所以还是记录一下吧。如有不足,请指教。。。。。

一、用到的依赖包

(可以在mevan中央仓库自行下载 https://mvnrepository.com/)

org.apache.axis

axis

1.4

org.dom4j

dom4j

2.1.1

javax.xml.rpc

javax.xml.rpc-api

1.1.2

二、说明

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.

相关内容