最近给安排到上海出差,第一个任务很简单,天天摸鱼,不要太爽,好景不长,第二个需求来了,需要接入第三方接口,当看到https://xxx.xxx.com:8088/invoke.asmx这串url时是懵逼的,这啥玩意。深思五分钟,作为一个面向度娘编程的程序猿,不多想,遇事不决,问度娘。
但找到的方案大多如下:
Service service = new Service();
......
Call call = (Call) service.createCall();
......
String res = String.valueOf(call.invoke(new Object[]{xsXml}));
看样子是能调用,但是我这调用的接口出入参都是XML格式,咋传咋返回,也没做过类似需求大佬可问,第一天,卒。
第二天,满血复活的我又开始了一天的度娘。嗯,通过wsdl2java生成本地webService,看起来可行,试了几次,不好操作,再看,通过eclipse生成webservice客户端代码,就你了。
过程如下:
打开eclipse–>随便新建一个项目–>然后点击File–>New–>other…–>搜索Web Service Client
一顿操作下来生成了五个文件如上图,跟例子里对比东西是少了点,没事,把代码拷到idea,继续莽。
InvokeLocator invokeLocator = new InvokeLocator();
InvokeSoapStub invokeSoapStub = (InvokeSoapStub) invokeLocator.getPort(InvokeSoapStub.class);
SectionOfficeBO sectionOfficeBO = new SectionOfficeBO();
sectionOfficeBO.setTodayClass("1");
RequestBO requestBO = new SectionOfficeRequest();
requestBO.setApiName("Entity.GetNodeTree");
requestBO.setClientIP("172.**.**.245");
requestBO.setT(sectionOfficeBO);
XmlBO xmlBO = new XmlBO<>();
xmlBO.setHeadBO(getHeadBO(requestBO));
xmlBO.setRequestBO(requestBO);
String xmlStr = invokeSoapStub.processor(XmlUtil.objToXml(xmlBO, false));
入参结构:
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
Head部分保持不变,Request中ApiName传需要调用的接口名称,Parameters传接口需要的参数。
出参结构:
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx
Head部分不会变化,主要数据包在R标签里面,能正常返回了,收工。
其涉及的XML解析见下一博客,待续…



