java调用webservice 第三方接口

时间: 2023-08-15 admin 互联网

java调用webservice 第三方接口

java调用webservice 第三方接口

         Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。

WebService平台技术
  XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。

1、XML+XSD

       XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的。WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准, 所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。


2、SOAP

         WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。
        SOAP协议 = HTTP协议 + XML数据格式
        SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。
打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
3、WSDL

   好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方 法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
  WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。 WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

WebService的相关概念可以参考:.html。

了解概念之后,到底怎么调用一个WebService服务接口呢?

 

下面是调用中国电视节目预告(电视节目表) WEB 服务的代码示例!

 Endpoint: .asmx

 Disco: .asmx?disco 

 WSDL: .asmx?wsdl 

 调用的是下面的方法:

代码示例

package com.demo;

import java.net.URL;
import java.util.Vector;

import javax.xml.namespace.QName;

import org.apache.axis.AxisEngine;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.constants.Style;
import org.apache.axis.constants.Use;
import org.apache.axis.description.OperationDesc;
import org.apache.axis.description.ParameterDesc;
import org.apache.axis.soap.SOAPConstants;


public class TestWebService {
	
	
    //定义一个数组
	public static OperationDesc[] _operations =new OperationDesc[1];
	
	
  public static String getMessage(int id,String theDate,String userId,String url) throws Exception {
	  
	  OperationDesc oper=new OperationDesc();
	  ParameterDesc param;
	  oper.setName("getTVprogramString");
	  
	  //标识Web Service的具体路径	  
	  url=".asmx";
	  
	  //创建service 实例
	  Service service=new Service();
	  
	  //通过service 创建Call 实例
	  Call call=(Call) service.createCall();
	  
	  //将Web Service的服务路径加入到call实例之中	  
	  call.setTargetEndpointAddress(new URL(url));
	  
	  QName qname=new QName("/","getTVprogramString");  //(targetNamespace, element name)
	  call.setOperationName(qname);//设置调用远程方法的路径     同 :call.setOperationName(new QName("/","getTVprogramString"))
      
	  //添加参数
	  
	       //new QName("","int")    --- 为int类型对应的url 
	  param = new ParameterDesc(new QName("/","theTVchannelID"),ParameterDesc.IN,new QName("","int"),int.class,false,false);
	  param.setOmittable(true);
	  oper.addParameter(param);
	  param = new ParameterDesc(new QName("/","theDate"),ParameterDesc.IN,new QName("","String"),String.class,false,false);
	  param.setOmittable(true);
	  oper.addParameter(param);
	  param = new ParameterDesc(new QName("/","userID"),ParameterDesc.IN,new QName("","String"),String.class,false,false);
	  param.setOmittable(true);
	  oper.addParameter(param);
	  
	  //设置返回类型
	  oper.setReturnType(new QName("","Vector"));
	  
	  //设置Document wrapped + Literal
	  oper.setStyle(Style.WRAPPED);   
	  oper.setUse(Use.LITERAL);
	  //_operations[0]=oper;  //数组形式
	  
	  
	  call.setOperation(oper);
	  //call.setOperation(_operations[0]); // 数组形式
	  call.setSOAPActionURI("");
	  call.setUseSOAPAction(true);
	  
	  call.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
	  call.setProperty(AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
      call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);
      
      //调用方法,返回一维数组
      
      Vector<String> Msg =(Vector<String>) call.invoke(new Object[] {id,theDate, userId});
      System.out.println(Msg);
      
	  
	  
	  
	  
	  
	  
	return null;
	  
  }
  
  public static void main(String[] args) throws Exception {
	
	  getMessage(2,"2018-10-10","",".asmx");
}

}

 

返回结果:

[06:00(AM)@@@重播:电视剧@@@北京市 | 北京电视台 | BTV-2 文艺频道, 06:55(AM)@@@重播:百姓文化录@@@北京市 | 北京电视台 | BTV-2 文艺频道, 07:00(AM)@@@重播:每日文娱播报@@@北京市 | 北京电视台 | BTV-2 文艺频道, 08:25(AM)@@@重播:笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 09:00(AM)@@@笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 10:05(AM)@@@笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 11:00(AM)@@@电视剧@@@北京市 | 北京电视台 | BTV-2 文艺频道, 11:55(AM)@@@百姓文化录@@@北京市 | 北京电视台 | BTV-2 文艺频道, 12:00(AM)@@@每日文娱播报@@@北京市 | 北京电视台 | BTV-2 文艺频道, 13:05(AM)@@@重播:笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 13:55(AM)@@@喜剧合伙人@@@北京市 | 北京电视台 | BTV-2 文艺频道, 14:45(AM)@@@重播:百姓文化录@@@北京市 | 北京电视台 | BTV-2 文艺频道, 14:50(AM)@@@我看行@@@北京市 | 北京电视台 | BTV-2 文艺频道, 15:20(AM)@@@笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 16:25(AM)@@@笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 17:00(AM)@@@电视剧@@@北京市 | 北京电视台 | BTV-2 文艺频道, 18:00(PM)@@@我看行@@@北京市 | 北京电视台 | BTV-2 文艺频道, 18:30(PM)@@@每日文娱播报@@@北京市 | 北京电视台 | BTV-2 文艺频道, 19:35(PM)@@@影视风云@@@北京市 | 北京电视台 | BTV-2 文艺频道, 20:30(PM)@@@电视剧@@@北京市 | 北京电视台 | BTV-2 文艺频道, 21:20(PM)@@@电视剧@@@北京市 | 北京电视台 | BTV-2 文艺频道, 22:10(PM)@@@电视剧@@@北京市 | 北京电视台 | BTV-2 文艺频道, 23:00(PM)@@@重播:每日文娱播报@@@北京市 | 北京电视台 | BTV-2 文艺频道, 00:03(PM)@@@重播:我看行@@@北京市 | 北京电视台 | BTV-2 文艺频道, 00:30(PM)@@@重播:百姓文化录@@@北京市 | 北京电视台 | BTV-2 文艺频道, 00:33(PM)@@@重播:影视风云@@@北京市 | 北京电视台 | BTV-2 文艺频道, 01:23(PM)@@@重播:笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 02:13(PM)@@@重播:笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 03:43(PM)@@@重播:电视剧@@@北京市 | 北京电视台 | BTV-2 文艺频道, 04:38(PM)@@@重播:笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道, 05:08(PM)@@@重播:笑动欢乐秀@@@北京市 | 北京电视台 | BTV-2 文艺频道]