SOAPUI では、null
json データが適切な場合でも JsonSlurper が返されます。以下jsonObj
は を与えnull
ます。長いデータまたはその他の理由によるものですか。データ形式とその適切性を確認しました。
import groovy.json.JsonSlurper
def jsonObj = new JsonSlurper().parseText( messageExchange.response.contentAsString )
わかりましたので、行きません。これは、Java 6 で SoapUI を実行していることが原因である可能性があります (Java 7 では動作しません)。
したがって、回避策。
インターネットで見つけた例は、次の理由で必ずしも役に立ちません。
これらは言った、ここに行く。JSON 文字列で表されることがわかっている、応答に含まれる "InquiryId" の値を取得します。
// Get projet associated to current "testRunner" by walking up the tree of objects
// "testRunner" is probably a http://www.soapui.org/apidocs/com/eviware/soapui/impl/wsdl/support/AbstractTestCaseRunner.html
def myProject = testRunner.testCase.testSuite.project
// "myProject" is probably a http://www.soapui.org/apidocs/com/eviware/soapui/impl/wsdl/WsdlProject.html
// Let's verify this! If we have guessed wrongly, the script will fail
assert myProject instanceof com.eviware.soapui.impl.wsdl.WsdlProject
// Get the appropriate TestStep by walking down the tree of objects
// It is recommended to use getXByName() throughout unless you want to
// confuse yourself by using mixed accessor styles working only on some
// classes that may appear in this expression:
def myStep = myProject.getTestSuiteByName("Global test suite").getTestCaseByName("Test Case Foo").getTestStepByName("Create Inquiry")
// The result is probably a http://www.soapui.org/apidocs/com/eviware/soapui/impl/wsdl/teststeps/WsdlTestStep.html
// Let's verify this! If we have guessed wrongly, the script will fail
assert myStep instanceof com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStep
// Getting JSON string can be done like this. One can also do
// 'otherStep.getPropertyValue("reponse") as String'
def jsonString = otherStep.testRequest.response.contentAsString
// Let's log what we got here:
log.info "Returned JSON string is '${jsonString}'"
// What we cannot do with the 'jsonString' is:
// Give it to SoapUI's "XMLHolder" for parsing, because, in spite of people
// saying so, it does not seem to understand JSON.
// Give it to JsonSlurper because JsonSlurper returns null
// So we extract the value by scanning the String directly using a regular
// expression. See http://groovy.codehaus.org/Regular+Expressions
// The pattern say: Look for something that starts with
// {"InquiryId":"
// and ends with
// "}
// and grab the characters between these endings.
// We then look for "anywhere in the passed String" for the above using "find()"
// rather than "match()" which would demand precise matching of the whole String.
def pattern = ~/\{"InquiryId":"(.+?)"\}/
def matcher = pattern.matcher(jsonString)
if (matcher.find()) {
def inqId = matcher.group(1)
log.info "Returned string is '${inqId}'"
// We are done here
return inqId
}
else {
throw new IllegalArgumentException("Could not extract InquiryId from '$jsonString'")
}