返回

手把手教你使用 WSDL 文件创建 Java Web 服务代理

java

如何使用 WSDL 文件实例化 javax.xml.rpc.Service

简介

在使用 Web 服务时,你需要创建 javax.xml.rpc.Service 来与远程 Web 服务交互。本文将指导你如何使用 WSDL(Web 服务语言)文件来实例化 Service。

创建 ServiceFactory

首先,创建一个 ServiceFactory,它将用于创建 Service 对象:

ServiceFactory serviceFactory = ServiceFactory.newInstance();

创建 WSDL URL

下一步,将 WSDL 文件路径转换为 URL:

URL wsdlURL = new URL("file:/path/to/your/wsdl.wsdl");

创建 Service

使用 ServiceFactory 和 WSDL URL 来创建 Service 对象:

Service service = serviceFactory.createService(wsdlURL, new QName("namespace", "service_name"));

这里,namespaceservice_name 是从 WSDL 文件中获取的命名空间和服务名称。

创建服务存根

最后,使用 Service 对象创建服务存根,它将允许你访问远程 Web 服务的方法:

ScheduleWSFacadeBindingStub scheduleFacadeBindingStub = (ScheduleWSFacadeBindingStub) service.getPort(new QName("namespace", "port_name"), ScheduleWSFacadeBindingStub.class);

namespaceport_name 也应从 WSDL 文件中获取。

示例

假设你的 WSDL 文件名为 my-wsdl.wsdl,命名空间为 com.example.myservice,服务名称为 ScheduleService,端口名称为 ScheduleWSFacadePort。那么你的代码将如下所示:

URL wsdlURL = new URL("file:/path/to/my-wsdl.wsdl");
Service service = ServiceFactory.newInstance().createService(wsdlURL, new QName("com.example.myservice", "ScheduleService"));
ScheduleWSFacadeBindingStub scheduleFacadeBindingStub = (ScheduleWSFacadeBindingStub) service.getPort(new QName("com.example.myservice", "ScheduleWSFacadePort"), ScheduleWSFacadeBindingStub.class);

常见问题解答

  • 问:我应该将 WSDL 文件放在哪里?
    答:将 WSDL 文件放置在项目根目录或类路径中。

  • 问:我如何获取命名空间和服务名称?
    答:打开 WSDL 文件并查找 <service><definitions> 元素。命名空间通常在 <definitions> 元素中指定,而服务名称在 <service> 元素中指定。

  • 问:我如何获取端口名称?
    答:在 WSDL 文件中查找 <port> 元素,它应该指定端口名称。

  • 问:我收到 ClassNotFoundException 错误。该怎么办?
    答:确保你已将服务存根的类添加到类路径中。

  • 问:我的应用程序无法连接到 Web 服务。该怎么办?
    答:检查你的防火墙设置并确保 Web 服务正在运行。

结论

使用 WSDL 文件实例化 javax.xml.rpc.Service 是一个简单的过程,它可以让你轻松访问远程 Web 服务。通过遵循本文中的步骤,你将能够快速高效地创建 Service 对象并开始使用 Web 服务。