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

更改由wsimport生成的Web服务客户端上的URL

倪培
2023-03-14
问题内容

我正在尝试为访问WSDL描述的Web服务的Java应用程序编写模块。WSDL源代码直接从我认为是ASP.NET
Web服务的地方下载;服务URL以.asmx扩展名结尾,在浏览器中查看服务URL会显示一个链接,该链接可用于下载WSDL。

对我来说,一个关键要求是能够切换服务URL而无需重新编译。给我的URL显然是一个测试服务器,而且我知道在生产环境中,我将获得要使用的生产URL。我还希望能够自己创建一个用于测试的模拟服务器,并保留将来指定新URL的能力,而无需在服务移动后重新编译。实际上,我希望安装我们的应用程序能够在不同的URL
实例化Web服务的 多个 实例。

但是我的构想似乎与wsimport工具为我所做的不匹配。继f1sh的答案在这里,我生成的Java代码从我用这个命令下载WSDL:

wsimport -Xnocompile -keep -b binding.xml wsdlFile.wsdl

我发现生成的代码具有对下载的wsdlFile.wsdl的硬编码引用,其中包含服务URL。我们的应用程序不会以通过在运行时编辑WSDL文件进行配置的方式运行。我需要在构建时将代码编译到我的应用程序中,并且可以在实例化时设置服务URL。

我不确定为什么在运行时甚至需要解析WSDL。据我了解,WSDL提供了足够的信息来生成可以访问Web服务的代码,因此我不确定它向服务代码以外的生成代码提供了什么,而且我不确定为什么未在其中提供服务URL构造函数或可通过生成的Webservice类上的方法进行配置。我肯定错过了什么。

这种情况下的一般做法是什么?大多数人是否为他们将要使用的每个单独的URL重新生成代码?代码是在运行时生成的吗?我是否可以使用另一个WSDL工具来构建带有可配置URL的客户端代码?


问题答案:

这种方法还需要我提供一个我还不了解的javax.xml.namespace.QName对象作为第二个参数。

从您生成的源中复制一个。A QName是XML 限定名称 -“唯一”身份。

我仍然不明白为什么在运行时需要WSDL。

我不能肯定地说,但是WSDL本质上是一种模式。通过提供它,我猜您为JAX-WS提供了一种验证SOAP响应的机制。我认为JAXB绑定不足以做到这一点。

我总是在生成的服务中使用二元构造函数,通过ClassLoader.getResource方法提供URL,以将WSDL嵌入我的jar中。与任何模式一样,为此使用远程或文件系统URL
愚蠢, 并非最佳选择。

有关如何在运行时设置终点的信息,请参见以下问题:

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);


 类似资料:
  • 问题内容: Axis2和Eclipse是否可以生成Web Service客户端,并使其使用包中已经具有的Java类型,而不是创建自己的类型。原因当然是如果我已经创建了类型A,并且它创建了它自己的类型AI,则不能仅将类型A的变量分配给类型B的变量。 wsdl是从部署到应用程序服务器的Web服务生成的。如果无法从中生成它,则可以从已经存在的Java文件中生成一个客户端。 问题答案: 如果您确实想重用现

  • 问题内容: 首先,我希望您知道我已经可以连接到Web服务服务器。我问这个问题是因为我想对wsimport生成的客户端如何工作有更深入的了解。根据我的研究,wsimport使用JAXWS。请注意,我对JAXWS不了解。 我使用wsimport生成了客户端。我使用的WSDL来自Axis2 Web服务,并由Axis2自动生成。下面的类是wsimport的结果: 下 下 通过上面的类,我可以确定其中包含W

  • 在做其他事情之前,我想让你知道我已经可以连接到web服务服务器了。我问这个问题是因为我想更深入地了解wsimport生成的客户端是如何工作的。根据我的研究,wsimport使用JAXWS。请注意,我不了解JAXWS。 我使用wsimport生成了我的客户机。我使用的WSDL来自Axis2 web服务,由Axis2自动生成。下面的类是wsimport的结果: 在下 在下 通过上面的类,我可以看出包含

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

  • 我是web服务编程新手,我想使用netbeans 6在Grizzly服务器上使用Jersey创建一个restful web服务,然后创建一个客户端javascript,以便通过浏览器使用该web服务。因此,我开始了解更多关于restful web服务的知识,并在网上阅读了大量指南,然后通过阅读jersey用户指南http://jersey . Java . net/nonav/documentat

  • 问题内容: 我有stfw,但是找不到在Java中创建Web服务客户端的简单/独立方法。 有人在此链接/示例吗? 问题答案: 使用Axis2怎么样? 只需按照快速入门指南进行操作,就可以轻松应对。 这是另一个更具描述性的指南