Soaapui الحصول على طلب المعلمات في نصوص خدمة وهمية

StackOverflow https://stackoverflow.com/questions/945403

سؤال

ربما هذا سهل للغاية لجميع النظاميين Soapui.

في نصي استجابة خدمة Soapui وهمية، كيف يمكنني استخراج القيمة داخل الطلب، أرد على ذلك؟

دعنا نقول الطلب الوارد لديه

<ns1:foo>
  <ns3:data>
    <ns3:CustomerNumber>1234</ns3:CustomerNumber>
  </ns3:data>
</ns1:foo>

كيف أحصل على "1234" في متغير رائع؟ حاولت مع حامل Xmlder ولكن يبدو أن لدي XPath الخطأ.

(أعرف كيفية تعيين خاصية ودمج قيمتها في الاستجابة بالفعل.)

هل كانت مفيدة؟

المحلول

إذا كنت ترغب في الوصول إلى طلب الصابون وقم ببعض معالجة XPath، فهناك طريقة أسهل للقيام بذلك في Soaapui بفضل قوة غموض و xmlslurper..

إليك كيفية الوصول إلى رقم العميل:

def req = new XmlSlurper().parseText(mockRequest.requestContent)
log.info "Customer #${req.foo.data.CustomerNumber}"

اعتبارا من Groovy 1.6.3 (المستخدمة في Soaapui 2.5 وما بعده)، يعمل XMLSlurper في وضع الاسم وعدم التحقق من الصحة بشكل افتراضي لذلك لا يوجد شيء آخر عليك القيام به.

هتافات!
شونزيلا

نصائح أخرى

مثال آخر آخر:

def request = new XmlSlurper().parseText(mockRequest.requestContent)
def a = request.Body.Add.x.toDouble()
def b = request.Body.Add.y.toDouble()
context.result = a + b

في هذا المثال، نحصل على معلمين من الطلب وتحويلها إلى الزوجي. بهذه الطريقة يمكننا إجراء الحسابات على المعلمات. نموذج استجابة SOAPUI لهذا المثال هو:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://example.org/math/types/">
   <soapenv:Header/>
   <soapenv:Body>
      <typ:AddResponse>
         <result>${result}</result>
      </typ:AddResponse>
   </soapenv:Body>
</soapenv:Envelope>

يمكنك معرفة كيفية تجاوز نتيجة الحسابات مرة أخرى إلى الاستجابة.

في جافا نقية (لا تستخدم Soaapui)، يمكنك فقط إنشاء سياق تسمية مخصص مثل هذا واحد:

import java.util.Iterator;
import java.util.List;

import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;

class WSNamespaceContext implements NamespaceContext
{
    public String getNamespaceURI(String prefix)
    {
        if ( prefix.equals("ns3") )
            return "http://www.mysite.com/services/taxservice";
       else if (prefix.equals("soapenv"))
            return "http://schemas.xmlsoap.org/soap/envelope/";
        else
            return XMLConstants.NULL_NS_URI;
    }

    public String getPrefix(String namespace)
    {
        if ( namespace.equals("http://www.mysite.com/services/taxservice") )
            return "ns3";
        else if (namespace.equals("http://schemas.xmlsoap.org/soap/envelope/"))
            return "soapenv";
        else
            return null;
    }

    public Iterator<List<String>> getPrefixes(String namespace)
    {
        return null;
    }
}

ثم تحليلها مثل ذلك:

XPathFactory factory = XPathFactory.newInstance(); 
XPath xp = factory.newXPath(); 
xp.setNamespaceContext( nsc ); 
XPathExpression xpexpr = xp.compile("//ns3:CustomerNumber/text()");
NodeList nodes = (NodeList)xpexpr.evaluate(doc, XPathConstants.NODESET); 
for ( int i = 0; i < nodes.getLength(); i++ )  { 
    String val = nodes.item(i).getNodeValue();
    System.out.println( "Value: " + val  ); 
}

تمتد http://www.soapui.org/soap-mocking/creating-dynamic-mockservices.html. ومقرها http://www.soapui.org/apidocs/com/eviware/soapui/support/xmlolder.html. خطرت لي هذه:

// Create XmlHolder for request content
def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
holder.namespaces["ns3"] = "ns3"

// Get arguments
def custNo = holder.getNodeValue("//ns3:CustomerNumber")
context.setProperty("custNo", custNo)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top