0

我通过 Apache Thrift 创建了我的第一个 Web 服务。我正在使用 Maven 和 Apache CXF 将它部署在 Tomcat 上。

Thrift 为我创建了两个类:

  • 入口类
  • 留言簿.class

我正在Guestbook.Iface自己实施GuestbookService.class.

在我的 beans.xml 上,我将类添加为端点:

<jaxws:endpoint 
  id="guestbook" 
  implementor="guestbook.GuestbookService" 
  address="/guestbook" />

当我访问 Tomcat 上的 URL 时,WSDL 不包含任何要调用的方法。它应该getGuestbookEntries()已经。

  1. 有什么我想念的吗?
  2. 我是否将正确的类添加到端点?我意识到有一个Guestbook.Processor内部类。

我在访问时收到以下回复http://localhost:8080/thriftGuestbook/guestbook

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>
No binding operation info while invoking unknown method with params unknown.
</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
4

1 回答 1

0

我有点困惑,因为一方面 SOAP/WSDL 和另一方面 Thrift 没有那么多共同点,除了它们都是可用于创建 Web 服务的技术。通常你想使用 Thrift 自己的 http 服务器。我不确定如何在您的场景中执行此操作,但 SOAP/WSDL 肯定是使用 Thrift 的错误方式。

但是,如果您绝对被迫提供 SOAP 服务,您要么根本无法使用 Thrift,要么您必须实现支持这两种选项的双重接口,并且客户端可以选择他们喜欢的接口类型。

但请注意,如果您至少不知道自己在做什么,我不会推荐后者。双接口将需要一些有趣的架构决策和更多的工作,尤其是当更复杂的数据结构发挥作用时。如果您怀疑它是否有助于解决您的实际问题,那么它很可能是错误的解决方案。但这是可能的(去过那里,做过)。

于 2013-09-19T01:08:43.073 回答