【问题标题】:When generated an Apache CXF client, why is the WSDL still needed when instantiating the client?生成 Apache CXF 客户端时,为什么在实例化客户端时仍然需要 WSDL?
【发布时间】:2025-11-27 07:05:03
【问题描述】:

我想使用 SOAP 服务,但 WSDL 是离线提供给我的,因此生成的客户端带有 WSDL 的本地路径。

public class SoSo extends Service {
    public final static URL WSDL_LOCATION;
    public final static QName SERVICE = new QName("http://tempuri.org/", "SoSo");
    public final static QName SoSoSoap12 = new QName("http://tempuri.org/", "SoSoSoap12");
    public final static QName SoSoSoap = new QName("http://tempuri.org/", "SoSoSoap");
    static {
        URL url = null;
        try {
            url = new URL("file:/c:/Dev/Java/workspace/service-individualreport/src/main/resources/wsdl/SoSo.wsdl");
        } catch (MalformedURLException e) {
            java.util.logging.Logger.getLogger(SoSo.class.getName())
                .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "file:/c:/Dev/Java/workspace/service-individualreport/src/main/resources/wsdl/SoSo.wsdl");
    }
    WSDL_LOCATION = url;
}

从我的角度来看,我只想构建一次 WSDL,然后指定服务的位置。

【问题讨论】:

    标签: java apache wsdl cxf


    【解决方案1】:

    这个问题的几个部分:

    1) 根据 JAX-WS 规范,生成的代码没有 ALL 请求所需的信息。因此,在技术上需要 wsdl。使用 CXF,您可以为 wsdl URL 传递“null”,然后使用 ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost/....") 设置地址和许多用例,它会工作。

    2) wsdl2java 工具确实有一个 -wsdlLocation 标志,可用于生成具有特定位置的服务对象。 -wsdlLocation "" 应该不会导致代码被烧毁。但是,代码实际上并不能移植。 (JAXWS ri/metro 需要 wsdl)

    【讨论】:

      最近更新 更多