Java 如何在JAX-WS调用中指定url并避免初始网络连接?
我将JAX-WS标准的东西与Java 如何在JAX-WS调用中指定url并避免初始网络连接?,java,jax-ws,Java,Jax Ws,我将JAX-WS标准的东西与wsimport一起使用http://localhost/Order.wsdl生成客户端存根类 live web服务位于不同的主机上,因此我需要在调用服务时提供url。到目前为止,我的方法是这样的(下面的类是从wsimport生成的): 第一:这是指定url的正确方法吗 第二:似乎第1行中的构造函数实际上对新URL进行了网络调用!这导致了一个异常(由于未配置https),因此我永远无法进入下一行 背景:我正在实现中概述的双向ssl身份验证。这意味着我需要在服务调用之前
wsimport一起使用http://localhost/Order.wsdl
生成客户端存根类
live web服务位于不同的主机上,因此我需要在调用服务时提供url。到目前为止,我的方法是这样的(下面的类是从wsimport生成的):
第一:这是指定url的正确方法吗
第二:似乎第1行中的构造函数实际上对新URL进行了网络调用!这导致了一个异常(由于未配置https),因此我永远无法进入下一行
背景:我正在实现中概述的双向ssl身份验证。这意味着我需要在服务调用之前在端口
中配置ssl内容。在正确配置ssl层之前,我无法让构造函数进行任何连接,原因很明显
更新:
显然,在使用jax ws标准时,url指向WSDL,而不是端点。这把我绊倒了。直接从文件加载WSDL解决了这个问题
设置端点url的方式如下:
BindingProvider b = (BindingProvider) port;
b.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointUrl);
一种解决方案是让构建过程安排由
wsimport
处理的WSDL文件成为应用程序的类路径资源。有很多种方法可以做到这一点,但是让我们假设您采用一种JAR-per-service方法。因此,您可以通过wsimport
运行Order.wsdl
,并获取结果类,如OrderService
和OrderServicePort
,然后将它们填充到OrderService.jar
中。您可以做的另一件事是将Order.wsdl
的副本填充到位于META-INF/wsdl/Order.wsdl
的同一个JAR中。假设JAR文件是应用程序类路径的一部分,您可以通过以下操作获取WSDL的URL:
URL wsdlLocation = Thread.currentThread().getContextClassLoader().getResource("META-INF/wsdl/Order.wsdl");
URL wsdlLocation = Thread.currentThread().getContextClassLoader().getResource("META-INF/wsdl/Order.wsdl");