JavaWeb 如何调用接口

CreateTime--2018年4月2日19:04:29

Author:Marydon

1.所需jar包

2.代码设计

  WebUtils.java

import java.io.ByteArrayOutputStream;
import java.net.URL; import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import org.codehaus.xfire.client.Client; /**
*
* @author Marydon
* @createTime 2018年3月9日上午10:40:01
* @updateTime
* @Email:Marydon20170307@163.com
* @version:1.0.0
*/
public class WebUtils { /**
* 接口调用方法 内部使用xfire 调用
* @param param1
* 接口传参
* @param methodName
* 调用接口方法名
* @param url
* 调用接口地址
* @return String 返回结果
*/
public static String call(Object[] param1, String methodName, String url) {
// 调用接口
if (null == url) {
throw new RuntimeException("接口地址不能为空!");
}
if (!url.endsWith("?wsdl")) {
url += "?wsdl";
}
// 接口名称
String intefaceName = methodName;
// 客户端
Client client;
Object[] results;
try {
client = new Client(new URL(url));
results = client.invoke(intefaceName, param1);
if (results != null && results.length > 0) {
if (results[0] instanceof String) {
return (String) results[0];
} else if (results[0] instanceof org.w3c.dom.Document) {
org.w3c.dom.Document doc = (org.w3c.dom.Document) results[0];
return WebUtils.w3cDocument2String(doc);
} else {
if (results.length > 1) {
System.err.println("返回结果长度:" + results.length);
}
return String.valueOf(results[0]);
}
}
} catch (Exception e) {
// log.error("调用接口失败"+url+":"+methodname,e);
}
return null;
} /**
* 将w3c定义的Document对象转换为String字符串
*
* @param doc
* @return
* @throws Exception
*/
public static String w3cDocument2String(org.w3c.dom.Document doc) {
// 设置源和目标
DOMSource src = new DOMSource(doc);
StreamResult sos;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
sos = new StreamResult(bos);
// 转换器
Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(src, sos);
return bos.toString("UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return null; } }

3.测试

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element; /**
* 发送webservice请求测试类
* @author Marydon
* @createTime 2018年3月9日上午10:51:07
* @updateTime
* @Email:Marydon20170307@163.com
* @version:1.0.0
*/
public class Test { /**
* @param args
*/
public static void main(String[] args) {
String url = "http://127.0.0.1:8070/demo/services/IServiceTest?wsdl";
// 必须指定方法名
String methodName = "getUserInfo"; StringBuilder sb = new StringBuilder();
sb.append("<Request><userId>2</userId></Request>"); Document document = DocumentHelper.createDocument(); // 创建Document document 以xml的格式存放返回参数
Element request = document.addElement("Request"); // 在 document中 新建一个Request节点
// (具体节点请参考接口文档)
request.addElement("userId").setText("1");
// TODO 发送空id
// request.addElement("id").setText("");
String data = document.asXML().toString();// 以xml格式进行传输 String res = WebUtils.call(new Object[] { data }, methodName, url);
System.out.println(res);
Document dhead;
try {
dhead = DocumentHelper.parseText(res);
String userName = dhead.selectSingleNode("//Response/userName").getText().trim();
System.out.println(userName);
} catch (DocumentException e) {
e.printStackTrace();
} } } 

4.说明

   以接口的形式进行传输时,"&"是特殊符号,不能直接传,必须转义成"&amp;",否则报错。

 

JavaWeb 调用接口的更多相关文章

  1. C#怎样通过url调用接口

    在做一些项目过程中,我们常常总避免不了要调用接口,那么怎么通过url调用借口呢.我今天浅显的写一下. 首先要获取你访问链接的App Key 和 App Secret 那么什么是App Key 和 Ap ...

  2. C#动态webservice调用接口 (JAVA,C#)

    C#动态webservice调用接口 using System; using System.Collections; using System.IO; using System.Net; using ...

  3. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  4. WPS Office手机版调用接口代码指导帖之一(Android)

    经常会有一些喜欢开发鼓捣的童鞋问我们,WPS Office手机版是否提供调用接口,希望在android中使用一个调用命令,直接调用WPS手机版来打开指定的DOC文件,而不用弹出一个程序可选列表(如果用 ...

  5. 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

    原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...

  6. json格式数据,将数据库中查询的结果转换为json, 然后调用接口的方式返回json(方式一)

    调用接口,无非也就是打开链接 读取流 将结果以流的形式输出 将查询结果以json返回,无非就是将查询到的结果转换成jsonObject ================================ ...

  7. URLConnection调用接口

    写在前面: 项目是java web,jdk1.4,weblogic 7;对方.net系统,用wcf开发的接口.对方提供接口url地址,以及说明用post方式去调用,无需传递参数,直接返回json ar ...

  8. java如何调用接口方式二

    java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...

  9. java如何调用接口方式一

    java如何调用接口 其实对于java调用接口进行获取对方服务器的数据在开发中特别常见,然而一些常用的基础的知识总是掌握不牢,让人容易忘记,写下来闲的时候看看,比回想总会好一些. 总体而言,一些东西知 ...

随机推荐

  1. java中重载(overload)与重写(override)的区别

    方法重载(overload): 方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同的定义,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就 ...

  2. [转]android 自定义圆形imageview控件

      android布局 首先,定义定义圆形Imageview类: import android.content.Context; import android.graphics.Bitmap; imp ...

  3. hihocoder1320 160周 压缩字符串

    hihocoder1320 题目链接 思路: dp解法.用map[i][j]表示从第i个开始到第j个的字串的best压缩长度.(包括i,j,两端闭合). 用k表示i,j中的一点. 用zip()表示压缩 ...

  4. zabbix install

    Auth: Jin Date: 20140714 用了5 6年的监控工具 http://zabbix.org/wiki/InstallOnCentOS_RHEL Server Install yum ...

  5. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  6. HDU 4498 Function Curve (分段,算曲线积分)

    Function Curve Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)To ...

  7. MySQL在windows系统的安装

    原文:https://blog.csdn.net/wokaowokaowokao12345/article/details/76736152 MySQL在windows系统的安装 原创 2017年08 ...

  8. 【mysql】mysql创建数据库,基字符集 和 数据库排序规则 的对比选择

    1.一般选择utf8.下面介绍一下utf8与utfmb4的区别. utf8mb4兼容utf8,且比utf8能表示更多的字符.至于什么时候用,看你的做什么项目了,到https://www.cnblogs ...

  9. 关于Unity3D的编辑器崩溃时的线索定位

    今天在Unity3D编辑器中进行功能測试的时候,编辑器突然崩溃了(就是整个窗体突然消失,进程直接结束)之后也没有不论什么错误报告信息提示.好吧,应该是偶现问题.我侥幸地想,我用的好歹也是正版啊,不应该 ...

  10. lua中遍历table的几种方式比较

    当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtes ...