java 调用wsdl的webservice接口 两种调用方式
关于wsdl接口对于我来说是比较头疼的 基本没搞过。一脸懵 就在网上搜 看着写的都很好到我这就不好使了,非常蓝瘦、谨以此随笔纪念我这半个月踩过的坑、、、
背景:短短两周除了普通开发外我就接到了两个webservice接口,很少搞这样的接口 就很懵;
开发工具:eclipse、idea
方法一:
第一种就是个人觉得很容易懂得方法,作为wsdl接口,我们可以用开发工具将wsdl接口转为本地文件,这样就可以看他们的调用方法以及参数了。
·以eclipse为例,在你的项目里右键选择other

·然后搜索web,选择web service client

·之后将你的wsdl路径输入,点击finish 就可以看到了

·这个时候写个main方法像调本地方法一样去调用就好了

·idea的这里将生成路径说一下:


·一般wsdl调用比较正规的话 具体调用就会写在XXXservicePort.java里 然后写个调用方法去调用就好了
·另外附上我的测试:
ps:因为我这边开发有代理需要加上代理就加上代理访问的(这也是个坑啊!!!)
//给java进程强制加代理
System.getProperties().put("proxySet", "true");
System.getProperties().put("proxyHost", "172.30.87.202");
System.getProperties().put("proxyPort", "9999");
System.out.println("Hello World!");
TaskService service = new TaskService();
TaskServicePort port = service.getTaskServicePort();
B2BParameter para1 = new B2BParameter();
B2BParameter para2 = new B2BParameter();
B2BParameter para3 = new B2BParameter();
B2BParameter para4 = new B2BParameter();
B2BParameter para5 = new B2BParameter();
B2BParameter para6 = new B2BParameter();
para1.setName("loginId");
para1.setValue("AWP_B2B_CN");
para2.setName("password");
para2.setValue("audatex");
para3.setName("maxCount");
para3.setValue("100");
para4.setName("startAtIndex");
para4.setValue("1");
para5.setName("fieldsToReturn");
para5.setValue("ResponsibleUserLoginId,CreatorLoginId,CreationDate,CaseId,TaskId,ClaimNumber,ManufacturerName,ModelName,PlateNumber,VIN,BusinessStatusKind");
para6.setName("returnPayloadAsXML");
para6.setXsltParameter(true);
B2BRequest request = new B2BRequest();
request.getParameter().add(para1);
request.getParameter().add(para2);
request.getParameter().add(para3);
request.getParameter().add(para4);
request.getParameter().add(para5);
request.getParameter().add(para6);
request.setPayload("CreationDate >\"2019-07-01T11:00:00\" and CreationDate < \"2019-08-08T12:00:00\" "); B2BResponse response = port.findTasks(request);
System.out.println(response.getHostName());
System.out.println(response.getLoginId());
System.out.println(response.getPayload());
System.out.println(response.getReturnCode());
方法二:
另外就是用httpClient的方式去调用。下面我将附上我的代码,希望能帮到(pps:有加代理)
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
// 这里引得依赖 包的话需要自己找了
public static InputStream postXmlRequestInputStream(String requestUrl, String xmlData) throws IOException{
PostMethod postMethod = new PostMethod(requestUrl);
byte[] b = xmlData.getBytes("utf-8");
InputStream is = new ByteArrayInputStream(b, 0, b.length);
RequestEntity re = new InputStreamRequestEntity(is, b.length, "text/xml;charset=utf-8");
postMethod.setRequestEntity(re);
HttpClient httpClient = new HttpClient();
httpClient.getParams().setAuthenticationPreemptive(true);
httpClient.getHostConfiguration().setProxy(CommonPptsUtil.get("PROXY_HOST"), Integer.valueOf(CommonPptsUtil.get("PROXY_PORT")));
int statusCode = httpClient.executeMethod(postMethod);
logger.debug("responseCode:"+statusCode);
if (statusCode != 200) {
return null;
}
return postMethod.getResponseBodyAsStream();
}
public static void main(String[] args) {
String reqJsonStr = "{\"workId\":\"20171018161622\",\"status\":\"201\",\"startTime\":\"2017-10-18 16:16:22\"}";
String xmlData = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.interfacemodule.cic.com/\"><soapenv:Header/><soapenv:Body><ser:statusWriteBack><jsonString>"
+ "{\"workId\":\"314\",\"orderId\":\"5207675\",\"longitude\":\"104.068310\",\"latitude\":\"30.539503\",\"sendTime\":\"2019-08-13 08:38:45\",\"servicePerName\":\"于学飞\",\"servicePerPhone\":\"18410187680\"}"
+ "</jsonString></ser:statusWriteBack></soapenv:Body></soapenv:Envelope>";
String url = "http://61.138.246.88:7103/avs/services/CCService?wsdl";
SAXReader reader = new SAXReader();
String result = "";
try {
InputStream in = postXmlRequestInputStream(url,xmlData);
if(in!=null){
Document doc = reader.read(in);
result = doc.getRootElement().element("Body").element("statusWriteBackResponse").element("return").getText();
logger.debug("result:"+result);
}
} catch (Exception e) {
logger.error("error:",e);
e.printStackTrace();
}
}
java 调用wsdl的webservice接口 两种调用方式的更多相关文章
- java调用wsdl xfire和cxf两种方式
xfire 如下: String spID = ""; String password = ""; String accessCode = "&quo ...
- java 序列化 serialVersionUID 的作用 和 两种添加方式
serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的 ...
- java多线程总结:线程的两种创建方式及优劣比较
1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...
- webservice的两种调用方式
如下 using ConsoleApplication1.TestWebService; using System; using System.Collections; using System.Co ...
- http接口 两种调用http接口的方法
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; ...
- Java设计模式之工厂模式的两种实现方式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 1. 为什么要有工厂模式? "Talk i ...
- java调用.net的webservice接口
要调用webservice,首先得有接口,用已经写好的接口地址在myEclipse的目标project中,右键->new web service client-> 选择JAX-WS方式,点 ...
- Java WebService接口生成和调用 图文详解>【转】【待调整】
webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
随机推荐
- centos 6.5 关闭防火墙
关闭防火墙分为临时关闭和永久关闭.临时关闭重启系统后恢复正常,永久关闭重启系统后仍然是关闭状态 临时关闭与开启 service iptables stop service iptables start ...
- DB事务隔离级别
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11393417.html 事务隔离级别 Note: Oracle默认的隔离级别是 READ COMMIT ...
- 直击KubeCon 2018 |云原生正在改变你的衣食住行
云计算从不被看好到成长为势不可挡的技术潮流,仅仅用了十年的时间.如今“云原生”又被企业以及开发者奉为圭臬,并被认为是云计算的未来. 阿里云容器技术负责人易立认为云计算有三个阶段:云搬迁.云就绪和云原生 ...
- temp = yield i 这句话的意思?
def test(): i = 0 while i < 5: temp = yield i # print(temp) i+=1 t = test() print(t.__next__()) p ...
- Git 中的一些其他常用命令
1.查看提交的历史版本(git log) 我们可以使用 git log 命令来查看提交的历史版本. 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面.每个版本都有 ...
- 【Linux】grep显示匹配行的上下几行的用法
打印匹配行的前后5行 grep -5 ‘something’ file 打印匹配行的前后5行 grep -C 5 ‘something’ file 打印匹配行的后5行 grep -A 5 ‘somet ...
- nIce 不看会后悔的o!
今天小编来跟大家探讨关于“控件”.控件非常好玩,可以构建出不同的场景和不同风格的Windows画面.相信大家绝对狠感兴趣是吧~~~ 好了,下面小编就为大家来展示风采喽 下面先为大家展示一些比较基础 ...
- 杂项:JFB-权限设置
ylbtech-杂项:JFB-权限设置 1. 家政经理返回顶部 1. if (UserContext.GetTeamId() == (int)UserType.Manager) { condition ...
- vue搭建项目之设置axios
首先要下载axios: npm install axios -S 要注意的是,axios不支持Vue.use();这种方式,可以改写原型链. 第二步就是新建axios存放位置: 在项目中src中单独建 ...
- USACO 5.4 章节
Canada Tour 题目大意 双向连通图,点从左向右排列, 你需要先从最左的点到最右的点,(过程中只能从左向右走) 然后再从最右的点返回最左的点,(过程中只能从右向左走) 过程中除了最左的点,其它 ...