相关疑难解决方法(0)

如何避免在CXF或JAX-WS生成的Web服务客户端中指定WSDL位置?

当我使用来自CXF的wsdl2java(生成类似于wsimport的东西)生成一个webservice客户端时,通过maven,我的服务从这样的代码开始:

@WebServiceClient(name = "StatusManagement", 
                  wsdlLocation = "c:/some_absolute_path_to_a_wsdl_file.wsdl",
                  targetNamespace = "http://tempuri.org/") 
public class StatusManagement extends Service {

    public final static URL WSDL_LOCATION;
    public final static QName SERVICE = new QName("http://tempuri.org/", "StatusManagement");
    public final static QName WSHttpBindingIStatus = new QName("http://tempuri.org/", "WSHttpBinding_IStatus");
    static {
        URL url = null;
        try {
            url = new URL("c:/some_absolute_path_to_a_wsdl_file.wsdl");
        } catch (MalformedURLException e) {
            System.err.println("Can not initialize the default wsdl from c:/some_absolute_path_to_a_wsdl_file.wsdl");
            // e.printStackTrace();
        }
        WSDL_LOCATION = url;
    }
Run Code Online (Sandbox Code Playgroud)

硬编码的绝对路径真的很糟糕.生成的类不能在除我之外的任何其他计算机上工作.

第一个想法是将WSDL文件(以及它导入的所有内容,其他WSDL和XSD)放在jar文件和类路径中.但我们想避免这种情况.由于所有这些都是由基于WSDL和XSD的CXF和JAXB生成的,因此我们认为在运行时需要知道WSDL没有意义.

wsdlLocation属性旨在覆盖WSDL位置(至少这是我在某处获得的),默认值为"".由于我们使用maven,我们尝试<wsdlLocation></wsdlLocation>在CXF的配置中包含以尝试强制源生成器将wsdlLocation留空.但是,这只是使它忽略XML标记,因为它是空的.我们做了一个非常难看的可耻黑客,使用<wsdlLocation>" + "</wsdlLocation>. …

java wsdl cxf wsdl2java

157
推荐指数
7
解决办法
15万
查看次数

JAXWS - 如何更改端点地址

如何动态更改JAXWS客户端使用的地址?该客户端由wsimport生成.

java jax-ws webservice-client

48
推荐指数
2
解决办法
8万
查看次数

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

我正在尝试为访问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
Run Code Online (Sandbox Code Playgroud)

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

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

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

java wsdl web-services wsimport

12
推荐指数
2
解决办法
8929
查看次数