我们从客户端获得了一个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? 有可能吗?
答案 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端点实现的内容,我认为在这种情况下,它会比这更容易。