当前位置: 首页 > 面试题库 >

在运行时为使用wsimport生成的代码重写或设置Web服务端点

孟德曜
2023-03-14
问题内容

使用使用生成的代码,是否wsimport可以在不重新生成代码的情况下覆盖服务端点?

我已经编写了一个简单的Java Web服务,步骤如下:

  1. 我编译java类并生成war文件
  2. 将war文件部署到我的应用程序服务器(tomcat)
  3. 通过URL访问WSDL,例如localhost:8080 / service / helloservice?wsdl
  4. 将URL与wsimport.bat一起使用以生成客户端类,例如: wsimport http://localhost:8080/service/helloservice?Wsdl
  5. 我在客户应用程序中使用这些类来调用服务

问题在于该服务部署在运行于8080以外的端口的应用服务器上,客户端与服务之间的通信永远不会发生。我试图知道什么是创建在客户端使用的存根中没有服务器和端口硬编码的存根的最佳方法。


问题答案:

您的客户端可以在运行时通过BindingProvider接口在服务“端口”中设置端点。

在本JAX-
WS教程中
考虑JAX-
WS客户端。编写此代码的另一种方法是:

HelloService service = new HelloService();
Hello port = service.getHelloPort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(
      BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
      "http://foo:8086/HelloWhatever");
String response = port.sayHello(name);

警告:我尚未下载教程代码并针对该代码进行了测试。



 类似资料:
  • 我有一个wsdl url http://www.webservicex.net/geoipservice.asmx?wsdl 因此,假设如果我想在soap web服务(用java编写)中进行更改,生成的文件中的更改将无法达到目的。 可能我的问题对你来说很基本,但我在看一个应用程序代码时遇到了这个困惑,所以请回答我的问题。

  • 问题内容: 当我在Eclipse中转到 文件- >新建->其他-> Web服务-> Web服务客户端并选择“ Web服务运行时”时,我看到“ Apache CFX 2.x”,但是完成按钮被禁用,我得到了对话框中的以下内容: “从运行时和部署服务器列表中选择,或使用默认设置。” 我是否真的必须设置服务器才能在Eclipse中使用CXF生成Web服务客户端? 提前致谢。 问题答案: 是的,看起来确实如

  • 问题内容: 我正在尝试为访问WSDL描述的Web服务的Java应用程序编写模块。WSDL源代码直接从我认为是ASP.NET Web服务的地方下载;服务URL以.asmx扩展名结尾,在浏览器中查看服务URL会显示一个链接,该链接可用于下载WSDL。 对我来说,一个关键要求是能够切换服务URL而无需重新编译。给我的URL显然是一个测试服务器,而且我知道在生产环境中,我将获得要使用的生产URL。我还希望

  • 我正在尝试使用Axis2构建的web服务,因此我遵循以下示例创建客户机代码。 这个错误的原因是什么?

  • 问题内容: 在纯Java中,是否有可能在运行时以编程方式重写类的方法(甚至创建新方法)? 即使我在编译时 不 知道类,我 也 希望能够做到这一点。 我的意思是在运行时重写: 现在,这个调用… …将调用 Injector.myMethod() 而不是 Overrider.myMethod() 。 Injector.myMethod()是 静态的 ,因为在执行“魔术”之后,它是从不同的类实例(这是Ov

  • 我有一个关于用wsimport工具生成Java工件的问题(by Maven Jax-WS) 当我从WSDL生成Java工件时,我希望将web服务项目打包为WAR文件,将其客户机打包为JAR文件。 在哪里放置生成的工件,在哪里放置WSDL?关于组织Web服务项目的最佳实践是什么? 提前谢谢你! 向你问好,尤里卡·克里扎尼克