gpt4 book ai didi

soap - CXF:在同一个soap上实现多个端口:地址?

转载 作者:行者123 更新时间:2023-12-04 08:44:27 26 4
gpt4 key购买 nike

我们从客户那里得到了一个 WSDL,要求我们在我们这边实现服务。

WSDL 包含 3 个端口绑定(bind),具有不同的名称和绑定(bind),但相同 <soap:adress> - - 像这样:

<port name="Name1" binding="tns:Binding1">
<soap:address location="http://localhost/Service/ServicePort" />
</port>
<port name="Name2" binding="tns:Binding2">
<soap:address location="http://localhost/Service/ServicePort" />
</port>
<port name="Name3" binding="tns:Binding3">
<soap:address location="http://localhost/Service/ServicePort" />
</port>

这样的 WSDL 可以用 CXF 实现吗?

当我运行 wsdl2java , CXF 生成 3 个 java 接口(interface)。

我首先尝试了一个实现类,比如
class MyServiceClass implements Interface1, Interface2, Interface3 {...}

但是当我部署它并使用 SoapUI 检查时,出于某种原因,
它只会暴露 Interface1 的端口绑定(bind),
并且似乎忽略了另外两个。 为什么?

然后我尝试实现 3 个不同的 ServiceClass(每个都实现一个接口(interface)),
然后放多个 <jaxws:endpoint>address 相同 中的属性cxf-config.xml

但我得到部署错误:
RuntimeException: Soap 1.1 endpoint already registered on address /Address

任何提示,如何在 CXF 中实现这样的 WSDL?
是否可以?

最佳答案

      But when I deployed it and checked with SoapUI, for some reason, it would only expose Port-binding for Interface1, and seemed to ignore the 2 other ones. Why?

如果你会看到你的实现类,你会发现这个注解,
@WebService(endpointInterface = "yourPackageName.Interface1")

这仅指您的 interface1 。这就是为什么在部署它时忽略其余 2 接口(interface)实现。

因此,您必须按照您的解释在不同的实现类中分别实现这 3 个接口(interface)。因为每个实现类中只允许有一个endpointInterface。
Is such WSDL possible to implement with CXF?

是的,有可能。

在您的端点发布者类中部署期间,您需要将这 3 个接口(interface)实现类对象包装在一个对象中并为单个端点发布。

我仍然不清楚如何做到这一点,稍后会更新答案。

几个有用的链接:这是相同的要求,但有点困惑。

http://cxf.547215.n5.nabble.com/Deploying-multiple-endpoints-ports-for-a-service-td569470.html

还阅读有关 JavaBeans 端点实现的信息,我认为在这种情况下,它会比这更容易。

关于soap - CXF:在同一个soap上实现多个端口:地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com