SOAPUI:Modify请求:Groovy:appendNode适用参数

SOAPUI:Modify请求:Groovy:appendNode适用参数,groovy,request,soapui,xmlslurper,Groovy,Request,Soapui,Xmlslurper,我试图通过添加具有不同值的重复子节点来修改SOAP请求 这就是我到目前为止所做的: 请求: <soapenv:Envelope xlmns:ns1 = "..." xlmns:ns2 = "..." xlmns:ns3 = "..." xlmns:ns4 = "..."> <soapenv:Body> <ns2:OperationName> <ns3:CuteN>77777</ns3:CuteN>

我试图通过添加具有不同值的重复子节点来修改SOAP请求

这就是我到目前为止所做的:

请求:

<soapenv:Envelope xlmns:ns1 = "..." xlmns:ns2 = "..." xlmns:ns3 = "..." xlmns:ns4 = "...">
   <soapenv:Body>
       <ns2:OperationName>
          <ns3:CuteN>77777</ns3:CuteN>
          <ns3:RaveN>666</ns3:RaveN>
       </ns2:OperationName>
   </soapenv:Body>
</soapenv:Envelope>

我知道我错过了一些东西,这是我第三天的常规潜水。任何帮助都将不胜感激,提前感谢

我认为您的代码中有两个问题,第一个问题是您必须使用
appendChild
方法,因为您试图在
节点中添加一个子节点(不是对象中不存在的
appendNode
方法),第二个问题是您将
XmlSlurper
类与
XmlBeans
混合使用,由于无法将“节点”从一个引擎添加到另一个引擎

您必须更改
if
语句中的代码,以适应这些更正,因此您可以使用以下方法:

if(reqRaveNumTwo != null && reqRaveNumTwo != "")
{
    /* create new node */   
    def nodeHolder  = groovyUtils.getXmlHolder("<ns3:RaveNum xmlns:ns3=\"...\">${reqRaveNumTwo}</ns3:RaveNum>")
    def itemNode = nodeHolder.getDomNode( "//ns3:RaveNum" )
    // import the node
    def secondRaveNumNode = parentNode.getOwnerDocument().importNode(itemNode,false)
    // and finally append it
    parentNode.appendChild(secondRaveNumNode)
}
if(reqRaveNumTwo!=null&&reqRaveNumTwo!=“”)
{
/*创建新节点*/
def nodeHolder=groovyUtils.getXmlHolder(“${reqRaveNumTwo}”)
def itemNode=nodeHolder.getDomNode(“//ns3:RaveNum”)
//导入节点
def secondRaveNumNode=parentNode.getOwnerDocument().importNode(itemNode,false)
//最后附加它
parentNode.appendChild(secondRaveNumNode)
}
而不是:

if(reqRaveNumTwo != null && reqRaveNumTwo != "")
{
    /* create new node */   
    def secondRaveNumNode = new XmlSlurper(false,false).parseText("""<ns3:RaveNum>${reqRaveNumTwo}</ns3:RaveNum>""")
    parentNode.appendNode(secondRaveNumNode)
}
if(reqRaveNumTwo!=null&&reqRaveNumTwo!=“”)
{
/*创建新节点*/
def secondRaveNumNode=new-XmlSlurper(false,false).parseText(“${reqRaveNumTwo}”)
parentNode.appendNode(secondRaveNumNode)
}
使用
XmlBeans
创建新节点的代码看起来不那么直观,但是它的工作方式是
:)

此外,我在您的代码中看到了这一点:
def groovyUtils=new ns4.eviware.soapui.support.groovyUtils(context)
,我想这只是一个
打字错误,但它必须是
def groovyUtils=new com.eviware.soapui.support.groovyUtils(context)


希望这有帮助,

代码更新如下,以使其实际工作:

/* Groovy Utilities Declaration */
def groovyUtils = new ns4.eviware.soapui.support.GroovyUtils(context)

/* Request Holder Setup */
def request      = context.expand('${RequestStepName#Request}')
def requestHolder    = groovyUtils.getXmlHolder("request")

/* Declaring Namespaces */
requestHolder.namespaces["soapenv"] = "http://schemas.xmlsoap.org/soap/envelope/"
requestHolder.namespaces["ns2"]     = "..."
requestHolder.namespaces["ns3"]     = "..."
requestHolder.namespaces["ns4"]     = "..."

/* Set few string names */
def operXString          = "//ns2:OperationName"
def raveNumXString       = "//ns3:RaveNum"

/* create object of Request nodes */
def parentNode = requestHolder.getDomNode(operXString)

def reqRaveNumTwo = "888"

if(reqRaveNumTwo != null && reqRaveNumTwo != "")
{
    /* create new node */   
    def nodeHolder  = groovyUtils.getXmlHolder("<ns3:RaveNum xmlns:ns3=\"ns3\">${reqRaveNumTwo}</ns3:RaveNum>")
    def itemNode = nodeHolder.getDomNode(raveNumXString)
    // import the node
    def secondRaveNumNode = parentNode.getOwnerDocument().importNode(itemNode,false)
    // and finally append it
    parentNode.appendChild(secondRaveNumNode)
}

/* Update the request holder properties */
requestHolder.updateProperty(true)
context.requestContent = requestHolder.xml
/*Groovy实用程序声明*/
def groovyUtils=new ns4.eviware.soapui.support.groovyUtils(上下文)
/*请求持有者设置*/
def request=context.expand(“${RequestStepName#request}”)
def requestHolder=groovyUtils.getXmlHolder(“请求”)
/*声明名称空间*/
requestHolder.namespaces[“soapenv”]=”http://schemas.xmlsoap.org/soap/envelope/"
requestHolder.namespaces[“ns2”]=“…”
requestHolder.namespaces[“ns3”]=“…”
requestHolder.namespaces[“ns4”]=“…”
/*设置几个字符串名*/
def operXString=“//ns2:OperationName”
def raveNumXString=“//ns3:RaveNum”
/*创建请求节点的对象*/
def parentNode=requestHolder.getDomNode(operXString)
def reqRaveNumTwo=“888”
if(reqRaveNumTwo!=null&&reqRaveNumTwo!=“”)
{
/*创建新节点*/
def nodeHolder=groovyUtils.getXmlHolder(“${reqRaveNumTwo}”)
def itemNode=nodeHolder.getDomNode(raveNumXString)
//导入节点
def secondRaveNumNode=parentNode.getOwnerDocument().importNode(itemNode,false)
//最后附加它
parentNode.appendChild(secondRaveNumNode)
}
/*更新请求持有者属性*/
requestHolder.updateProperty(true)
context.requestContent=requestHolder.xml

非常感谢您为我指明了正确的方向!现在有道理了。@ssc很高兴帮助您:)下面的@Albciff已经回答了这个问题。我对上面的代码做了一些更改,以使其实际工作。更新的代码如下。
if(reqRaveNumTwo != null && reqRaveNumTwo != "")
{
    /* create new node */   
    def nodeHolder  = groovyUtils.getXmlHolder("<ns3:RaveNum xmlns:ns3=\"...\">${reqRaveNumTwo}</ns3:RaveNum>")
    def itemNode = nodeHolder.getDomNode( "//ns3:RaveNum" )
    // import the node
    def secondRaveNumNode = parentNode.getOwnerDocument().importNode(itemNode,false)
    // and finally append it
    parentNode.appendChild(secondRaveNumNode)
}
if(reqRaveNumTwo != null && reqRaveNumTwo != "")
{
    /* create new node */   
    def secondRaveNumNode = new XmlSlurper(false,false).parseText("""<ns3:RaveNum>${reqRaveNumTwo}</ns3:RaveNum>""")
    parentNode.appendNode(secondRaveNumNode)
}
/* Groovy Utilities Declaration */
def groovyUtils = new ns4.eviware.soapui.support.GroovyUtils(context)

/* Request Holder Setup */
def request      = context.expand('${RequestStepName#Request}')
def requestHolder    = groovyUtils.getXmlHolder("request")

/* Declaring Namespaces */
requestHolder.namespaces["soapenv"] = "http://schemas.xmlsoap.org/soap/envelope/"
requestHolder.namespaces["ns2"]     = "..."
requestHolder.namespaces["ns3"]     = "..."
requestHolder.namespaces["ns4"]     = "..."

/* Set few string names */
def operXString          = "//ns2:OperationName"
def raveNumXString       = "//ns3:RaveNum"

/* create object of Request nodes */
def parentNode = requestHolder.getDomNode(operXString)

def reqRaveNumTwo = "888"

if(reqRaveNumTwo != null && reqRaveNumTwo != "")
{
    /* create new node */   
    def nodeHolder  = groovyUtils.getXmlHolder("<ns3:RaveNum xmlns:ns3=\"ns3\">${reqRaveNumTwo}</ns3:RaveNum>")
    def itemNode = nodeHolder.getDomNode(raveNumXString)
    // import the node
    def secondRaveNumNode = parentNode.getOwnerDocument().importNode(itemNode,false)
    // and finally append it
    parentNode.appendChild(secondRaveNumNode)
}

/* Update the request holder properties */
requestHolder.updateProperty(true)
context.requestContent = requestHolder.xml