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

时间:2013-12-30 18:51:48

标签: soap wsdl jax-ws cxf wsdl2java

我们从客户端获得了一个WSDL,要求我们在我们这边实施该服务。

WSDL包含3个端口绑定,具有不同的名称和绑定,但是相同的<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>

是否可以使用CXF实现此类WSDL?

当我运行 wsdl2java 时,CXF会生成3个java接口。

我首先尝试了一个实现类,比如

class MyServiceClass implements Interface1, Interface2, Interface3 {...}

但是当我部署它并使用SoapUI检查时,出于某种原因, 它只会公开Interface1的端口绑定, 似乎忽略了其他两个。的为什么吗

然后我试着实现3个不同的ServiceClasses(每个实现一个接口), 然后在 cxf-config.xml中添加具有相同<jaxws:endpoint>属性的多个address

但是我得到了部署错误:

RuntimeException: Soap 1.1 endpoint already registered on address /Address

任何提示,如何在CXF中实现此类WSDL? 有可能吗?

1 个答案:

答案 0 :(得分:3)

      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。这就是为什么在部署它时忽略了rest 2接口实现。

所以,你必须在不同的实现类中分别实现这3个接口,就像你的解释一样。因为每个实现类中只允许一个endpointInterface。

Is such WSDL possible to implement with CXF?

是的,这是可能的。

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

我仍然不清楚该怎么做,以后更新答案。

很少有用的链接:这是相同的要求,但很少混淆。

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

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