wsimport根据服务端的webservice生成客户端代码

本文介绍JDK中的wsimport工具,该工具可以根据wsdl文件生成Java客户端所需的类文件。通过示例展示如何使用wsimport从远程WebService获取代码并本地化,以便在Java项目中调用。同时提供了注意事项确保正确使用。

原文地址http://blog.youkuaiyun.com/woshixuye/article/details/13309287

一、wsimport简介
在JDK的bin文件夹中,有一个wsimport.exe工具,可依据wsdl文件生成相应的类文件,将生存在本地这些类文件拷贝到需要使用的项目中,就可以像调用本地的类一样调用webService提供的方法。该工具可以用于非Java的服务器,如用C#编写的WebService,通过wsimport则生成Java的客户端实现。


二、例子
以提供的查询号码归属地的wsdl为例,wsimport命令可把该wsdl生成java代码到本地:
wsimport -d d:/webserivce -keep -verbose http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

-d指定生成的目录,-keep生成.java文件,-verbose显示生成详细过程,网址即网络中的wsdl文件的位置。执行完后就可以在d:/webserivce发现生成的.java和.class文件。生成的文件夹已经具有包的机构了,将整个文件加拷贝到需要应用的项目中即可以调用。在本地写一个测试程序,即可显示该号码归属地等信息了。


public class Test
{
public static void main(String[] args)
{
MobileCodeWS ws = new MobileCodeWS();
MobileCodeWSSoap soap = ws.getMobileCodeWSSoap();
System.out.println(soap.getMobileCodeInfo("xxxxxxxx", ""));
}
}

三、注意点
1 因为是互联网提供的接口,所以使用时要保持外网的畅通
2 不理解上面代码意思的话到本地的.java文件里看一下注释和方法名就可理解

使用 Eclipse 生成 Web Service 客户端代码并调用远程服务接口是一个标准的开发流程,适用于多种 Web Service 技术栈,例如基于 Apache Axis 或 JAX-WS 的服务。以下是完整的步骤说明: ### 三、使用 Eclipse 生成 Web Service 客户端代码 1. **创建 Java 项目** 打开 Eclipse,新建一个普通的 Java Project。右键项目 -> `New` -> `Other` -> 选择 `Web Services` 类别下的 `Web Service Client`,然后按照向导操作[^2]。 2. **输入 WSDL 地址** 在向导中输入目标 Web Service 提供的 WSDL 地址。Eclipse 会根据 WSDL 自动生成客户端代理类、数据类型类以及服务接口类。 3. **选择运行时环境** 在向导中选择 Web Service 运行时(例如 Apache Axis 或 JAX-WS RI)。如果使用的是 Axis,需要提前下载并配置 Axis 环境;如果是 JAX-WS,则可使用 Eclipse 自带的工具或 GlassFish 提供的运行时[^4]。 4. **完成生成** 完成向导后,Eclipse 会在项目中生成客户端代码。通常包括服务接口、代理类、数据传输对象(DTO)等。 ### 四、调用远程 Web Service 接口 生成客户端代码后,可以通过调用代理类来访问远程服务。以下是一个调用示例: ```java import java.rmi.RemoteException; public class WebServiceClientTest { public static void main(String[] args) { try { // 实例化代理类 QueryValidatorServicesProxy proxy = new QueryValidatorServicesProxy(); // 设置服务端点地址 proxy.setEndpoint("http://example.com/your-webservice-endpoint"); // 获取服务接口实例 QueryValidatorServices service = proxy.getQueryValidatorServices(); // 调用远程方法 String result = service.querySingle("id5", "******", "XXXX", "XX,XXXXXX"); System.out.println("调用结果: " + result); } catch (RemoteException e) { e.printStackTrace(); } } } ``` ### 五、常见问题与解决方法 1. **无法连接到 WSDL 地址** 确保网络可达,并检查 WSDL 地址是否正确。某些服务可能需要通过代理访问。 2. **生成代码缺失或报错** 检查 WSDL 是否符合规范,尝试使用 `wsimport` 命令手动生成客户端代码,确保 JDK 和运行时版本兼容。 3. **调用时抛出 RemoteException** 检查服务端是否正常运行,端点地址是否正确,以及参数格式是否符合要求。 4. **类冲突或版本不一致** 确保项目中没有多个版本的 Axis 或 JAX-WS 库冲突,建议使用统一的运行时库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值