当前位置: 首页 > 知识库问答 >
问题:

如何在JAX-WS调用中指定url并避免初始网络连接?

欧阳嘉年
2023-03-14

我将JAX-WS标准的东西与wsimport一起使用http://localhost/Order.wsdl生成客户端存根类。

live web服务位于不同的主机上,因此我需要在调用服务时提供url。到目前为止,我的方法是这样的(下面的类是从wsimport生成的):

 1. OrderService s = new OrderService (
                                       new URL("https://live/WS/Order"), 
                                       new QName(...));
 2. OrderServicePort port = s.getOrderServicePort();

 3. configureHttpCertificatesStuff(port) // Set up ssl stuff with the port

 4. port.placeOrder(args); // The actual ws call

第一:这是指定url的正确方法吗?

第二:似乎第1行中的构造函数实际上对新URL进行了网络调用!这会导致一个异常(由于未配置https),因此我永远无法进入下一行。

背景:我正在实现这个问题中概述的双向ssl auth。这意味着我需要在服务调用之前在port中配置ssl内容。由于显而易见的原因,在我正确配置ssl层之前,我不能让构造函数进行任何连接...

更新:

显然,使用jax ws标准时,url指向WSDL,而不是endpoint。这把我绊倒了。直接从文件加载WSDL解决了这个问题。

设置endpointurl是这样完成的:

BindingProvider b = (BindingProvider) port;        
b.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointUrl);

共有1个答案

高弘光
2023-03-14

一种解决方案是让您的构建过程安排由wsimport处理的WSDL文件成为您的应用程序的类路径资源。有许多方法可以做到这一点,但是让我们假设您采用了每个服务JAR-per-service方法。因此,您可以通过wsimport运行Order.wsdl,并获取生成的类,如OrderServiceOrderServicePort,并将它们填充到order-service.jar中。您可以做的另一件事是在META-INF/wsdl/Order.wsdl处将Order.wsdl的副本塞进同一个JAR中。假设JAR文件是应用程序的类路径的一部分,您可以通过以下操作获得WSDL的URL:

URL wsdlLocation = Thread.currentThread().getContextClassLoader().getResource("META-INF/wsdl/Order.wsdl");
 类似资料:
  • 我创建了一个带有和的Android应用程序。我想在 TextView 中显示微调器下拉列表中的选定项。我在 方法中实现了微调器,因此当我运行该程序时,它会在 中显示一个值(在从下拉列表中选择一个项目之前)。 我只想在从下拉列表中选择一个项目后在TextView中显示该值。我该怎么做? 以下是我的代码:

  • 问题内容: 我正在使用SLSB和JAX-WS批注创建一个简单的SOAP Web服务。我要传递的对象是从OGC模式生成的JAXB,这要感谢java.net上的OGC项目。我遇到的一种特定方法(导致部署失败)是一种情况,其中请求对象(GetResult)的字段(eventTime)与请求对象位于不同的包中。此类型的ObjectFactory不同,在编组/解组时存在问题。 我收到的部分错误: 在标准SE

  • 我试图通过客户端访问SOAP请求和响应,以便计算每个调用的执行时间。我实现了一个来实现这一点,但是没有调用方法(断点没有命中或者没有记录日志)。我正在使用wsimport创建客户端类/存根,并将一个绑定文件作为参数传递给wsimport命令。 这就是我到目前为止所做的工作: 下面是我的: 调用webservice时,根本不会调用handleMessage方法。有什么想法吗? 我正在使用JAX-WS

  • 问题内容: 我正在使用以下代码通过AJAX提交表单: 背景 我的PHP处理程序执行各种任务,然后发回响应。然后,我可以在成功或错误函数中执行某些操作。 我的问题 当用户双击表单的“提交”按钮时,将发生两次AJAX调用,这将导致我的PHP处理程序中的代码执行两次。 我的问题 如果用户双击提交,如何避免我的代码执行两次? 问题答案: 当AJAX调用再次出现时,请先禁用首次单击的“提交”按钮,然后重新启

  • 大佬们好,我现在想通过账号密码登录抖店. 获取对应的cookie保存到数据库,下次登录直接从数据库获取cookie进行登录(electron+vue作为前端,通过webview标签加载网页). 现在的问题是cookie在数据库获取成功,应用时提示网络错误需要重新登录,我应该使用全部的cookie还是部分cookie呢 以下是cookie列表 我也单独使用过其中的PHPSESSID进行设置,能够绕开

  • Selenium [移动 JSON 协议规范](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md) 支持一个获取和设置网络连接的[API](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#104)。这个 API 会设置一个掩码