Grails使用WSDL + pojo / pogo消费SOAP?

时间:2015-07-22 16:00:12

标签: grails soap groovy wsdl cxf

我必须在我的grails应用程序中调用一些SOAP webservices (grails 2.4.5 + groovy 2.3),理想情况下,我希望使用WSDL描述< / strong>的服务,因为一切似乎都在其中设置(动作,参数,返回......)。 1个月用手拿着圣杯,3年用JAVA,没有用于网络服务。

首先,似乎我必须忘记&#34;如此简单且已经打包的#34;使用 GroovyWS 的方式,因为项目似乎被放弃了,并且链接变得庞大。太糟糕了。

然后我去看了 grails CXF插件Grails CXF Plugin)。经过几个小时的挖掘CXF插件项目和插件演示项目后,我成功地从我的WSDL中生成了大约30个java类,但是使用这种语法无法在我的控制器中注入任何东西:

class DemoController {
SimpleServicePortType simpleServiceClient
ComplexServicePortType complexServiceClient

def simpleServiceDemo = {
    SimpleRequest request = new SimpleRequest(age: 100, name: "Bob")
    SimpleResponse response = simpleServiceClient.simpleMethod(request)

    render(view: '/index', model: [simpleRequest: request, simpleResponse: response])
}

我生成了一个看起来很完美的WSSessionSOAP类(每个操作,参数......)但是这是一个接口......在项目示例中,我看到开发人员定义了服务的行为,所以我猜他更多&#34;暴露&#34;一个WS而不是消耗它。 是否真的可以从WSDL生成类并使用它们来调用SOAP服务?看起来很自然!

最后,我看了Grails WSlite Plugin并成功用这种方式调用了WS(yay!):

withSoap(serviceURL: 'https://XXX/webservices/session.asmx') {
  def response = send(SOAPAction: 'http://XXX/Session/CheckSession') {
    body {
      CheckSession(xmlns : 'http://XXX/Session') { guid(chaine) }
    }
  }
  render response.CheckSessionResponse.CheckSessionResult.text()
}

这是第一步,对于简单的服务(暂时)可以,但我想重新发明轮子而不是利用WSDL的OO方面。

它是使用SOAP服务的好/最佳/唯一方式(当然,使用干净的grails服务)? CXF插件是否有机会满足我的需求?我错过了什么?我读了这么多页面,但大多数时候这些例子都是过于通用或过时的。

我知道还有其他一些解决方案:

  • 使用完整的Java API生成&#34; WebServices&#34;部分并在我的grails服务/控制器中使用它,但同样,它是最好的方法吗?
  • 使用旧的HTTP GET请求调用我的WS。这不是冒犯吗?

对不起,如果我可以考虑荒谬的选择,但这让我发疯,我觉得我花了太多时间在这上面,因为只有结果a&#34; 0&#34;回应一点WS。

随便问我什么,我会忘记。 谢谢你的帮助!

0 个答案:

没有答案