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

问题描述 投票:12回答:2

我试图写一个访问WSDL描述Web服务的Java应用程序的模块。源WSDL是直接从什么,我相信是一个ASP.NET web服务下载;服务URL中的.asmx扩展名结尾,和观看在浏览器中的服务URL示出了可以用于下载WSDL的链接。

对我来说一个关键要求是要能够切换出服务URL而无需重新编译。给我的网址显然是一个测试服务器,我知道,在生产,我会得到一个生产URL中使用。我也想能够创建一个模拟服务器自己进行测试,并保留指定在未来一个新的URL,而不该服务是否移动重新编译的能力。其实,我想为我们的应用程序的安装能够在不同的URL来实例化web服务的多个实例。

但我的概念似乎没有什么wsimport工具正在为我匹配。继f1sh的回答here,我生成的Java代码从我用这个命令下载WSDL:

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

我发现的是,生成的代码有一个硬编码引用我的下载wsdlFile.wsdl,其中包含服务的URL。我们的应用程序是不会以这样的方式,它精读在运行时编辑WSDL文件被配置为运行。我需要有被编译成我在构建时应用,并且可以将服务URL设置在实例化时的代码。

我不完全知道为什么WSDL甚至需要在运行时进行解析;这是我的理解是WSDL提供足够的信息来生成代码可以访问web服务,所以我不知道它是什么,提供比服务URL等生成的代码,我不知道为什么没有提供的服务URL通过对所生成的web服务类中的方法构造或配置。我肯定错过了什么。

什么是这种情况下一般的做法?大部分人都重新生成代码,他们将要使用的每个网址?在运行时生成的代码?难道还有其他的WSDL工具,我可以使用,将建立客户代码与配置的网址是什么?

java web-services wsdl wsimport
2个回答
6
投票

这种方法要求我也提供一个javax.xml.namespace.QName中的对象,我还不知道,作为第二个参数。

复制从产生源之一。一个QName是一个XML qualified name - “唯一”的身份。

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

我不能说我知道肯定,但WSDL基本上是一个模式。通过提供它,我猜你给JAX-WS的机制来验证SOAP响应。我不认为JAXB绑定足以做到这一点。

我总是用两个参数的构造函数生成的服务通过ClassLoader.getResource方法嵌入WSDL在我的罐子里提供的URL。如同任何架构,使用远程或文件系统的URL,这是 笨 达不到最佳。

this question for how to set the end-point at runtime

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

10
投票

这个答案一直躲避我几天,但不知何故,书写问题的行为始终专注于我找到答案,和一对夫妇更websearches已经指出了它:

http://www.fransvanbuul.net/?p=98

看来,wsimport的创建了一个类,com.example.WebService,延伸javax.xml.ws.Service。这WebService类有两个构造函数。无参数的构造函数被硬编码文件里:// URL使用我从生成的原始WSDL。 (我想,如果我提供的https://开头的URL上的wsimport命令行,那会是硬编码的URL)。或者我可以用两个参数的构造函数,并在实例化时提供一个WSDL URL!这种方法要求我也提供一个javax.xml.namespace.QName中的对象,我还不知道,作为第二个参数。

使用该双参数的构造可能会解决我的问题。

看来wsimport的,我从JDK 1.6使用它,是JAX-WS包装的一部分。 JDK 1.6,在最新版本,包含JAX-WS 2.1和JAX-WS 2.2将解决我提出的这个问题的困难。

我会很乐意接受,解释了一些或全部的这种情况,其余的任何答复。我仍然为什么需要在运行时,WSDL不明白。更实际地,这将有助于我有人告诉我如何使用这两个参数的构造函数,或者如何与JDK 1.6和JAX-WS 2.2,产生我的代码。

© www.soinside.com 2019 - 2024. All rights reserved.