You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails 2.6基于本地WSDL构建带认证的SOAP请求求助

Grails 2.6 对接SOAP服务(带认证+本地WSDL)入门

依赖配置

groovy-wslite 依赖(推荐)

修改 grails-app/conf/BuildConfig.groovy,添加依赖:

dependencies {
    compile 'com.github.groovy-wslite:groovy-wslite:1.1.3'
}

核心实现

1. 初始化SOAP客户端(基于本地WSDL)

利用本地WSDL生成动态客户端,同时指定远程服务地址:

import wslite.soap.SOAPClient
import wslite.http.HTTPBasicAuthorization

// 本地WSDL文件路径,根据实际位置调整
def wsdlPath = "web-app/WEB-INF/wsdl/AXLAPI.wsdl"
def wsdlFile = new File(grailsApplication.mainContext.getResource(wsdlPath).file.path)

def soapClient = new SOAPClient(wsdlFile)
// 覆盖WSDL中的服务地址,指向远程服务器
soapClient.url = "https://your-cucm-server/axl/"

2. 配置Basic认证

Cisco AXL服务通常用HTTP Basic认证,直接在客户端设置:

soapClient.authorization = new HTTPBasicAuthorization("your-username", "your-password")

3. 调用接口并解析响应

方式一:动态调用(基于WSDL,更简洁)

import wslite.soap.SOAPResponse

try {
    SOAPResponse response = soapClient.send {
        // SOAPAction需与SOAPUI请求中的一致,Cisco AXL格式为 CUCM:DB ver=版本号 方法名
        soapAction = "CUCM:DB ver=14.0 getCCMVersion"
        body {
            getCCMVersion('xmlns':'http://www.cisco.com/AXL/API/14.0')
        }
    }

    // 解析响应获取版本号
    def ccmVersion = response.Body.getCCMVersionResponse.return.componentVersion.version.text()
    println "CUCM版本:${ccmVersion}"
} catch (Exception e) {
    log.error("SOAP调用失败", e)
}

方式二:手动构造XML(与SOAPUI请求完全一致)

如果不想依赖WSDL动态生成,直接构造XML请求:

try {
    def response = soapClient.send {
        soapNamespace = "http://schemas.xmlsoap.org/soap/envelope/"
        envelopeAttributes = ['xmlns:ns':"http://www.cisco.com/AXL/API/14.0"]
        body {
            'ns:getCCMVersion'()
        }
    }

    def ccmVersion = response.Body['ns:getCCMVersionResponse'].return.componentVersion.version.text()
    println "CUCM版本:${ccmVersion}"
} catch (Exception e) {
    log.error("SOAP调用失败", e)
}

常见问题处理

  • HTTPS证书问题:如果远程服务器证书不被信任,可临时禁用校验(生产环境不建议):
    soapClient.httpClient.sslTrustAllCerts = true
    
  • SOAPAction错误:务必从SOAPUI的请求头中复制准确的SOAPAction值,否则服务会返回错误
  • WSDL路径问题:确保WSDL文件在Grails项目的可访问路径下,可使用grailsApplication.mainContext.getResource()获取绝对路径

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 09:47:42