一、什么是web Service
准确的来说,webservice不是一种技术,而是一种规范。是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互。比如在Windows Server服务器上有个C#.Net开发的应用A,在Linux上有个Java语言开发的应用B,现在B应用要调用A应用,或者是互相调用,用于查看对方的业务数据,就需要webservice的规范。
我们一般就是在具体平台开发webservice接口,以及调用webservice接口,每种开发语言都有自己的webservice实现框架。比如Java 就有 Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF、Apache Wink、Jboss RESTEasyd等等。其中Apache CXF用的比较多,它也可以和Spring整合。
二、JAVA中如何调用别人发布的WebService
一、获取WebService的wsdl文档
什么是wsdl文档
wsdl跟java一样,也是一种语言,是通过xml的形式说明该webservice如何调用。
如何获取wsdl文档
通过在webservice的url后面加?wsdl的方式
WSDL解析
Wsdl文档从下往上读
Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。(入参和出参的数据类型)
Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构(入参和出参)。
Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对(方法)。
PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持(服务类)。
Binding - 特定服务访问点与具体服务类的绑定(不看内容,看关系)。
Port - 定义为webservice单个服务访问点。
Service- 相关服务访问点的集合。
二、通过wsdl文档生成客户端调用代码
使用jdk自带的命令生成
配置java环境变量后在命令窗口中输入wsimport –s . http://xxxx.xx.xx/xxx?wsdl即可生成java代码
注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。.class代码,可以经过打包以后使用。.java代码可以直接Copy到我们的项目中运行
注意:可能会报错解析组件 ‘s:schema’ 时出错。在该组件中检测到 's:schem’之类的。
用wsdl生成客户端代码时候,报错如下:
[WARNING] src-resolve.4.2: 解析组件 ‘s:schema’ 时出错。在该组件中检测到 ‘s:schema’ 位于名称空间 ‘http://www.w3.org/2001/XMLSchema’ 中, 但无法从方案文档 ‘http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl#types?schema1’ 引用此名称空间的组件。如果这是不正确的名称空间, 则很可能需要更改 ‘s:schema’ 的前缀。如果这是正确的名称空间, 则应将适当的 ‘import’ 标记添加到
解决方案
1、首先用浏览器解析wsdl文件,并在项目中新建一个wsdl文件,将浏览器wsdl中内容拷贝到项目的wsdl文件中。
2、将<s:element ref=“s:schema” /> <s:any />全部替换为<s:any minOccurs=“2” maxOccurs=“2” />
3、在cmd中用wsimport命令生成客户端代码,这时候的wsdl路径为项目文件中的路径
4、刷新项目,即可看见生成的代码
生成代码后如何调用
先把生成的代码复制到项目中,然后通过读wsdl文档来调用,整体的调用代码类似于下面这样:
//wsdl文档中service的name
SayHelloIntefaceService ss = new SayHelloIntefaceService();
//wsdl文档中portType的name
SayHelloInteface shf = ss.getSayHelloIntefacePort();
//wdl文档中complexType的name
String str = shf.sayhellow("lisi");
//str即为webservice的服务端返回的信息
System.out.println(str);
三、根据wsdl文件使用cxf生成代码
1、下载apache-cxf-2.6.2包,配置环境变量;
2、在环境变量中配置,CXF_HOME 值为apache-cxf-2.6.2地址。例如我的地址为E:\maxm\cxf\apache-cxf-2.6.2;
3、在PATH中加入%CXF_HOME%\bin。
4、需要生成客户端代码的.wsdl文件
5、打开cmd命令行,进入apache-cxf-2.6.2的bin目录下
6、执行命令:wsdl2java -p com -d xxxx -client xxxxx.wsdl,执行完毕后,会在目标位置生成webservice的客户端代码。
wsdl2java用法:
(1)-p 指定其wsdl的命名空间,也就是要生成代码的包名;
(2)-d 指定要产生代码所在目录;
(3)-client 生成客户端测试web service的代码;
(4)-server 生成服务器启动web service的代码。
本文详细介绍了Java中如何调用已发布的WebService,包括获取WSDL文档、通过WSDL生成客户端代码的方法,以及解决生成代码时可能遇到的问题。还提到了使用Apache CXF生成代码的步骤。
5万+

被折叠的 条评论
为什么被折叠?



