最近碰到要通过对方提供的webService向对方数据库写入数据,挺头疼的,花费了一定时间,记录踩到过的坑。
package com.steward.controller.position;
public class WebServiceUtil {
public static Object submit(Object[] obj) throws Exception{
String URL="http://ip:port/EHL_TIRCP_WS_JR/services/tircpService?wsdl";
//new 一个服务
Service sv = new Service();
//创建一个call对象
Call call = (Call) sv.createCall();
//设置要调用的接口地址
// call.setTargetEndpointAddress(URL);
call.setTargetEndpointAddress(new URL(URL));
//设置要调用的接口方法
call.setOperationName(new QName("http://service.global.tircp.ehl.com/","writeObjectOut"));
//设置参数 第二个参数表示String类型,第三个参数表示入参
call.addParameter("xtlb", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
call.addParameter("jkxlh", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
call.addParameter("jkid", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
call.addParameter("WriteXmlDoc", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
//返回参数类型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
//开始调用方法并返回相应数据信息,以xml格式的字符串返回,也可以json格式主要看对方用什么方式返回
Object result = call.invoke(obj);
System.out.println(result);//打印字符串
return result;
}
public static void main(String[] args) throws Exception {
Object[] object=new Object[] {
"16",
"7F1C090B030710047804010101020902000609040238575840746D72692E636E",
"16C01",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" +
"<root>\r\n" +
"<pgps>\r\n" +
" <version>1.0</version>\r\n" +
" <DEVICEID>353062081138334</DEVICEID>\r\n" +
" <GPSTIME>2018-06-26 10:35:25</GPSTIME>\r\n" +
" <LONGX>120.45456546</LONGX>\r\n" +
" <LATY>45.5445</LATY>\r\n" +
" <ALTITUDE>0</ALTITUDE>\r\n" +
" <VELOCITY>120.12</VELOCITY>\r\n" +
" <DIRECTION>3</DIRECTION>\r\n" +
"</pgps>\r\n" +
"</root>"};
System.out.println("object \n\t"+object[3]);
Object ob=WebServiceUtil.submit(object);
System.out.println(ob);
}
}
在设置方法这里踩了好几个坑;
设置webservice调用的方法:
call.setOperationName("writeObjectOut");
报 原因是因为你项目的结构和对方不一样,要指定路径
//call.setOperationName(new QName("http://service.global.tircp.ehl.com/","writeObjectOut")); 还有更坑的更具文档指定的方法和对方代码调用的方法不一样,大小写不同,对方提供的文档方法 WriteObjectout
然后报
对了参数很重要,要用object[]数组接收,即使没有参数也要用object[]{}空数据接收。