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. bzoj1004 purfer 序列

    之前没不知道这个数列. 一个purfer序列与一棵树一一对应. 长度为n的purfer的集合: A = { s | s is a sequence and a∈[1,len(s)+2] 一个直接的结论 ...

  2. 清北学堂学习总结 day2 字符串 练习

    1.hash表(哈希表) codevs 2147 数星星--简单哈希  时间限制: 3 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小明 ...

  3. JavaScript设计模式与开发实践——读书笔记1.高阶函数(上)

    说来惭愧,4个多月未更新了.4月份以后就开始忙起来了,论文.毕设.毕业旅行等七七八八的事情占据了很多时间,毕业之后开始忙碌的工作,这期间一直想写博客,但是一直没能静下心写.这段时间在看<Java ...

  4. 《python学习手册》第35章 异常的设计

    嵌套异常处理器 其实我们主要需要搞清楚的问题应该是这样的,当异常发生的时候,无论是简单的异常处理还是复杂的异常处理,我们都应该能够清楚的了解到异常运行到哪里,被谁捕获了,现在控制权到了哪里了,下面我们 ...

  5. UML类图符号 各种关系说明以及举例(转载)

    文章出处:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述对象和类之间相互关系的方式包括:依赖(Dependen ...

  6. MySQL单表恢复方法

    正休息的时候一个电话将我的睡意完全打散,“开发童鞋写update SQL的时候忘了加where条件了”,相信每一个DBA同学听到这个消息的时候都有骂街的冲动吧.万幸只是单表写花了,而不是哪位大神在DB ...

  7. 解决数据库 Table 'content_tags' is marked as crashed and should be repaired 表损坏问题

    今天突然网站TAG页面打不开了,打开debug,发现提示 Table 'content_tags' is marked as crashed and should be repaired 这样的错误 ...

  8. object-c语言的nonatomic,assign,copy,retain的区别

    nonatomic: 非原子性访问,不加同步,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问.                    (atomic是Objc使用的一 ...

  9. Constant-on-time buck-boost regulator converts a positive input to a negative output

    Buck regulators find wide application as step-down regulators for converting large positive input vo ...

  10. Mysql配置文件my.ini详解

    以下是Mysql数据库服务器配置文件my.ini的详细配置.应用场合是InnoDB引擎,2核CPU, 32位SUSE. [client] #password = your_password port  ...