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

本文介绍了一种通过WebService向远程数据库写入数据的方法,并详细记录了实现过程中的难点及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值