Groovy Script
import groovy.xml.XmlSlurper
import groovy.xml.XmlUtil
import groovy.xml.StreamingMarkupBuilder
try {
def namespacePrefix = 'sch'
def namespaceUri = 'http://kurum.com/ws/some-func-ws/schemas'
def userName = request_usernameOrKey
// XmlSlurper kullanarak XML'i parse et ve namespace'leri tanımla
def rootNode = new XmlSlurper(false, true).parseText(requestBodyTextFromClient).declareNamespace(
'soapenv': 'http://schemas.xmlsoap.org/soap/envelope/',
'sch': 'http://kurum.com/ws/some-func-ws/schemas'
)
// Header kısmı mevcut mu kontrol et, değilse oluştur
def headerNode = rootNode.'soapenv:Header'
if (!headerNode) {
headerNode = rootNode.appendNode { 'soapenv:Header' {} }
}
// userId öğesini oluştur ve ekle
def userIdNode = new XmlSlurper(false, true).parseText("<${namespacePrefix}:userId xmlns:${namespacePrefix}='${namespaceUri}'>${userName}</${namespacePrefix}:userId>")
headerNode.appendNode { mkp.yield userIdNode }
// Güncellenmiş XML'i dize olarak serileştir
def outputXml = XmlUtil.serialize(new StreamingMarkupBuilder().bind {
mkp.declareNamespace('soapenv': 'http://schemas.xmlsoap.org/soap/envelope/', 'sch': 'http://kurum.com/ws/some-func-ws/schemas')
mkp.yield rootNode
})
requestBodyTextToTargetAPI = outputXml
} catch (Exception e) {
e.printStackTrace()
}
Açıklama
Bu script şu işlemleri gerçekleştirir:
- XML Parse: Request body’den gelen XML verisi parse edilir
- Header Kontrolü: SOAP Header alanı mevcut mu kontrol edilir, değilse oluşturulur
- Username Alma: Authentication’dan gelen username bilgisi alınır
- Header’a Ekleme: Username bilgisi Header alanına eklenir
- Backend’e Gönderme: Güncellenmiş XML backend’e gönderilir
Bu script, request hattında (Request Policy) çalıştırılmalıdır çünkü requestBodyTextFromClient ve requestBodyTextToTargetAPI değişkenlerini kullanmaktadır.