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. bzoj 1269 bzoj 1507 Splay处理文本信息

    bzoj 1269 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1269 大致思路: 用splay维护整个文本信息,splay树的中序遍历即为 ...

  2. 【ArcGIS笔记】数据处理

    1.ARCGIS在导入Excel坐标点的时候出现"没有注册类"的情况怎么办? 确保你本机上装有office,并且版本要能够识别XLSX格式.2007以上. 2.导入excel时re ...

  3. iOS 反反注入 修改__RESTRICT,__restrict工具

    通过在 Xcode 里的 Other Linker Flags 设置参数,可以防止App被注入dylib(仅限于iOS 10 以下系统)  比如,某艺,XX音乐等 dylib无法注入,也就意味着没办法 ...

  4. CentOS 6.9/7通过yum安装指定版本的PostgreSQL扩展PostGIS

    一.安装PostGIS扩展插件(24_10) // 安装EPEL源 # rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-rele ...

  5. apache 与 iis共存

    先装上了apache ,再装iis会出现错误.所以先关闭apache,再进行iis安装.iis安装完后修改iis80端口为8080端口, 同时使用命令 cd C:\Inetpub\AdminScrip ...

  6. Spring Bean init-method 和 destroy-method实例

    在Spring中,可以使用 init-method 和 destroy-method 在bean 配置文件属性用于在bean初始化和销毁某些动作时.这是用来替代 InitializingBean和Di ...

  7. 再见了,DM

        在DM奋斗了20个月之后,我终于有机会DM说再见.这我不是我第一次和DM说再见,因此我也不确定这次的再见是再也不见,还是再次见面.但有一点可以确定的是,在接下来相当长的一段时间内,我是没有机会 ...

  8. Cocos2d-x3.2 TextureCache类异步载入功能解说

    本文TextureCache类异步载入功能的代码抽出,总共代码就200多行.感兴趣能够看看. 研究这个主要是由于项目中须要异步插入数据,但之前的方法在Android上总是崩溃所以想到TextureCa ...

  9. 如何使用V7包中ActionBar(Eclipse版)

    转自:http://blog.csdn.net/appte/article/details/11712591 以前3.0以前的版本要使用ActionBar,必须使用国外大牛写的ActionBarShe ...

  10. ABC定制视图导航控制器

      ABCustomUINavigationController  ABC定制视图导航控制器   Subclass of UINavigationController for overwriting ...