【问题标题】:JAX-WS: Two or more endpoints as ports of one Service and WSDLJAX-WS:两个或多个端点作为一个服务和 WSDL 的端口
【发布时间】:2023-09-26 13:48:01
【问题描述】:

是否可以在单个 WSDL:Service 下将两个或多个 JAX-WS Endpoint 发布为 WSDL:Port 以获得具有以下内容的单个 wsdl?

<definitions ...>
    ...
    <service name="Airport">
        <port name="Cargo" binding="tns:CargoBinding">
            <soap:address location="http://localhost:9999/"/>
        </port>
        <port name="Civil" binding="tns:CivilBinding">
            <soap:address location="http://localhost:9999/"/>
        </port>        
    </service>
</definitions>

这个想法是将两个逻辑上相似的服务合并到一个之下。我想知道如何使用 Endpoint.publish 实现这一目标?

【问题讨论】:

    标签: web-services binding wsdl jax-ws endpoint


    【解决方案1】:

    是的。在 WSDL 定义中,服务是相关端点的集合,端点必须有一个由 URI 标识的唯一地址。在您的代码中,两个端点的地址是相同的。

    对于不同的端口端点,您必须多次调用Endpoint.publish。 作为您的 WSDL 定义,

    Cargo cargo = new CargoImpl(); // Cargo is endpoint interface
    Endpoint.publish("http://hostname/service/cargo", cargo);
    Civil civil = new CivilImpl();
    Endpoint.publish("http://hostname/service/civil", civil);
    

    【讨论】:

    • 好的,也许您知道 JAX-WS Endpoint 将两个或多个实例组合在一个 WSDL 下的解决方案是什么?
    • 不幸的是,这会产生两个单独的 WSDL,但不会产生信号
    • @chaplean 'http://.../cargo?wsdl 和 http://.../civil?wsdl' 这两个 WSDL 是由 jax-ws 生成的?有关系吗?