Thrift服务不显示任何调用方法

时间:2013-06-30 15:28:14

标签: java web-services apache thrift

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

Thrift为我创建了两个课程:

  • Entry.class
  • Guestbook.class

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

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

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

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

  1. 我有什么遗失的东西吗?
  2. 我是否将正确的类添加到端点?我意识到有一个Guestbook.Processor内部类。
  3. 访问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>
    

1 个答案:

答案 0 :(得分:0)

我有点困惑,因为一方面是SOAP / WSDL而另一方面Thrift没有那么多共同点,除非它们都是可以用来创建Web服务的技术。通常,您希望使用Thrift自己的http服务器。我不确定如何在你的场景中做到这一点,但SOAP / WSDL肯定是使用Thrift的错误方式。

但是,如果您绝对不得不提供SOAP服务,则根本不能使用Thrift,或者您必须实现支持这两个选项的双接口以及客户端可以选择其首选接口的位置。

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