根据 WSDL 文件开发 JAX-WS 客户机
Java™ API for XML-Based Web Services (JAX-WS) 工具支持生成从 Web 服务描述语言 (WSDL) 文件着手时,开发静态 JAX-WS Web Service 客户机所需的 Java 工件。
开始之前
如果 WSDL
文件是本地文件,那么 URL 应该类似以下示例:file:drive:\path\file_name.wsdl。
如果 WSDL
文件是本地文件,那么 URL 应该类似以下示例:file:/path/file_name.wsdl。
还可以使用绝对或相对文件系统路径来指定本地文件。
关于此任务
- 服务端点接口 (SEI)
- 服务类
- 异常类(从 wsdl:fault 类映射)
- Java XML 绑定体系结构 (JAXB) 生成的类型值,它们是从 XML 模式类型映射的 Java 类


除了从命令行使用这些工具外,还可以从 Ant 构建环境中调用这些 JAX-WS 工具。从 Ant 构建环境中使用 com.sun.tools.ws.ant.WsImport Ant 任务可以调用 wsimport 工具。为了使功能正常,此 Ant 任务需要您使用 ws_ant 脚本来调用 Ant。
过程
![[Windows]](../images/windows.gif)
app_server_root\bin\wsimport.bat wsdl_URL
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
app_server_root/bin/wsimport.sh wsdl_URL
![[IBM i]](../images/iseries.gif)
app_server_root/bin/wsimport wsdl_URL
- 运行命令时使用 -verbose 选项来查看生成文件的列表。
- 使用 -keep 选项来保留生成的 Java 文件。
- 使用 -wsdlLocation 选项来指定 WSDL 文件的位置。
最佳实践: 确保您生成了可移植到其他系统的 JAX-WS Web Service 客户机企业归档 (EAR) 文件的最佳实践是将 WSDL 文档打包到应用程序模块中,例如 Web Service 客户机 Java 归档 (JAR) 文件或 Web 应用程序归档 (WAR) 文件。可通过使用 -wsdllocation 注释属性为 WSDL 文件的位置指定一个相对 URI。例如,如果 MyService.wsdl 文件位于 META-INF/wsdl/ 目录中,那么请运行 wsimport 工具并使用 -wsdllocation 选项来指定用作 WSDL 文件位置的值。这确保生成的工件包含将应用程序装入到管理控制台中时所需的正确 -wsdllocation 信息;例如:
bpracwsimport -keep -wsdllocation /META-INF/wsdl/MyService.wsdl
- 如果要使用 WSDL 或模式定制指定包含定制的外部绑定文件,请使用 -b 选项。
可以在 WSDL 文件中定制绑定以启用异步映射或连接文件。要生成异步接口,请仅将客户机端定制 enableAsyncMapping 绑定声明添加至 wsdl:definitions 元素或者在 WSDL 文件中定义的外部绑定文件。在定制客户机或服务器绑定文件中使用 enableMIMEContent 绑定声明来启用或禁用缺省 mime:content 映射规则。有关定制绑定声明的更多信息,请参阅 JAX-WS 规范第 8 章。
阅读 wsimport 命令以了解有关此命令的更多信息以及可指定的其他选项。
结果
示例
- 将以下 ping.wsdl 文件复制到临时目录。
<?xml version="1.0" encoding="UTF-8"?> <!-- * This program can be used, run, copied, modified and distributed * without royalty for the purpose of developing, using, marketing, or distributing. --> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="PingService" targetNamespace="http://com/ibm/was/wssample/sei/ping/"> <wsdl:types> <xsd:schema targetNamespace="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="pingStringInput"> <xsd:complexType> <xsd:sequence> <xsd:element name="pingInput" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="pingOperationRequest"> <wsdl:part element="tns:pingStringInput" name="parameter" /> </wsdl:message> <wsdl:portType name="PingServicePortType"> <wsdl:operation name="pingOperation"> <wsdl:input message="tns:pingOperationRequest" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="PingSOAP" type="tns:PingServicePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="pingOperation"> <soap:operation soapAction="pingOperation" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="PingService"> <wsdl:port binding="tns:PingSOAP" name="PingServicePort"> <soap:address location="http://localhost:9080/WSSampleSei/PingService" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
- 从 app_server_root\bin\ 目录运行 wsimport 命令。
app_server_root\bin\wsimport.bat -keep -verbose ping.wsdl
诸如 AIX® 或 Linux 之类的操作系统通过运行以下命令将父 shell 的脚本作为源以继承导出的变量:
从 . /app_server_root>/bin 目录。 运行以下 wsimport 命令:. ./setupCmdLine.sh (Notice the space between the periods.)
app_server_root/bin/wsimport.sh -keep -verbose ping.wsdl
app_server_root/bin/wsimport -keep -verbose ping.wsdl
com\ibm\was\wssample\sei\ping\ObjectFactory.java
com\ibm\was\wssample\sei\ping\package-info.java
com\ibm\was\wssample\sei\ping\PingServicePortType.java
com\ibm\was\wssample\sei\ping\PingService.java
com\ibm\was\wssample\sei\ping\PingStringInput.java
将 Java 工件与客户机实现一起封装在 Java 归档 (JAR) 或 Web 应用程序归档 (WAR) 文件中时,ObjectFactory.java、PingService.java 和 PingServicePortType.java 文件是要使用的已生成的 Java 类文件。