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; } }
总之,通过这个简单的案例展示,主要是为了记录下,调用第三方的提供的web服务,当第三方提供web服务后,我们可以将这个服地址(http://localhost:22002/services/HIS?wsdl)。 放在浏览器打开,需要关注 名称空间名称 、方法名称 、以及需要传入的参数。已经参数类型,通常都是string.