通过客户端编程方式调用webService及踩过的坑

   最近碰到要通过对方提供的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[]{}空数据接收。                                                        

猜你喜欢

转载自blog.csdn.net/nvfuy/article/details/80828058