Groovy wslite客户端不适用于基于SOAP的Java Web服务

时间:2013-10-04 14:27:21

标签: grails groovy groovyws

我正在使用Grails 2.2.3。     我无法使用Grails中的参数调用基于SOAP的JAVA Web服务。我正在使用wslite。我们可以调用基于SOAP的Web服务,但是当我们传递参数时,在服务器端总是接收为NULL。

My Groovy Code snippet is as follows:

package poc.service
@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='0.8.0')
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import wslite.soap.SOAPClient
import wslite.http.HTTPRequest
import wslite.http.HTTPResponse

class LoginService {
    static def checkUserData(def _userName12) {

       def client = new SOAPClient('http://192.168.14.147:9090/SOAPServiceDemo/authenticate')
        def userNameValue = _userName12   

        def response = client.send(SOAPAction:'\"http://example.service.com/checkUser\"'){
            header{
            }
            body {
                 checkUser(xmlns:'http://example.service.com/') { 
                     userName12(_userName12)
                 }
            }
        }
        println "User Name = " + response.checkUserResponse.return
    }

    static main(args){
       def status =  checkUserData('123') 
       println status
    }
}


Below is another example which is working fine. It is copied from google.

package poc.service

import wslite.soap.SOAPClient
import wslite.http.HTTPRequest
import wslite.http.HTTPResponse

class MothersDay {
    static def checkMotherData(String _userName12) {

       def client = new SOAPClient('http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx')
       def response = client.send(SOAPAction:'http://www.27seconds.com/Holidays/US/Dates/GetMothersDay') {
           body {
               GetMothersDay('xmlns':'http://www.27seconds.com/Holidays/US/Dates/') {
                   year(_userName12)
               }
           }
       }
       println "Result = " + response.GetMothersDayResponse.GetMothersDayResult.toString()
    }

    static main(args){
       def status =  checkMotherData("2018")
    }
}

Please let me know if you have any idea where I am lacking.

Thanks
Ravi

2 个答案:

答案 0 :(得分:2)

使用SOAPAction作为

client.send(SOAPAction:'http://example.service.com/checkUser')

不试图逃避",而{{1}}不应该是网址的一部分。

答案 1 :(得分:1)

对你来说这可能有点晚了,但对于遇到此问题的其他人来说,似乎是围绕WSLite如何设置方法调用的命名空间。您可以通过查看SOAPClient如何使用SOAPMessageBuilder对象生成包络来查看传入的实际soap消息(OpenSource是您的朋友)。无论如何,要切入点,你需要添加你的命名空间作为信封属性的一部分,然后手动强制你的方法使用该命名空间而不是传递它是你的方法的参数(这似乎只适用于.NET web服务)。所以看起来应该是这样的:

def response = client.send(SOAPAction:'http://example.service.com/checkUser') {         
    envelopeAttributes "xmlns:ex":"http://example.service.com/"
    body {
         'ex:checkUser'() { 
             userName12(_userName12)
         }
    }
}

希望这对有这个问题的人有所帮助。