Как извлечь классы из SOAP XML через PHP?

Я новичок в пользовательском интерфейсе SOAP, поэтому есть какой-либо метод для извлечения пар ключ-> значение из пользовательского интерфейса SOAP. То есть чтение «индекса» того, что может предложить интерфейс SOAP? Как читать MIB из SNMP?

Например я могу запросить:

<SOAP:Body>
<find xmlns="xmlapi">
<fullClassName>Persons</fullClassName>
<resultFilter class="Persons.Data">
<attribute>Name</attribute>
</resultFilter>
</find>
</SOAP:Body>

Имя класса «Persons» — это то, что я знаю, но есть ли способ получить список «классов», который может предложить SOAP UI?

0

Решение

Если вы хотите получить все <fullClassName> элементы внутри <find> для конкретного запроса, возможный способ, например, с использованием XmlSlurper внутри Groovy TestStep:

// get your response
def response = context.expand( '${TestRequest#Response}' )
// parse it
def xml = new XmlSlurper().parseText(response)
// find all `<fullClassName>` in your xml
def classNames = xml.'**'.findAll { it.name() == 'fullClassName' }
// print all values
classNames.each{
log.info "fullClassName: $it"}

Как вы новичок в SoapUI (может также Groovy) вот несколько подсказок:

context.expand( '${TestRequestName#Property}' ) получить содержимое определенного свойства из некоторого элемента области видимости. В вашем случае вы должны указать имя запроса и в качестве свойства ответ. Для получения дополнительной информации см. документация по расширению недвижимости

Groovy автоматически использовать it в качестве переменной для замыканий. Вот почему я использую it в each И в findAll,

ОБНОВИТЬ

Если вы хотите знать все возможные значения, поддерживаемые <fullClassName> у вас есть следующие варианты:

  1. Проверьте, если тип для <fullClassName> определены в схема имеет <xs:restiction> с <xs:enumeration> с возможными значениями.
  2. Если в схема тип это просто <xs:string> или другой тип, который не дает никакой подсказки о допустимом значении, обратитесь к провайдеру, чтобы увидеть альтернативу, например, если есть другой сервис SOAP, который возвращает значения …

Для первого случая, если у вас есть .xsd попробуйте добавить Groovy TestStep разобрать .xsd и получить <xs:enumeration> значения, см. следующий пример:

def xsd = '''<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<simpleType name="fullClassNameType">
<restriction base="string">
<enumeration value="Persons"/>
<enumeration value="AnotherClassName"/>
<enumeration value="AnotherOne"/>
</restriction>
</simpleType>
</schema>'''

// parse the xsd
def xml = new XmlSlurper().parseText( xsd )
// find your type by name attribute
def fullClassNameType = xml.depthFirst().find { it.@name == 'fullClassNameType' }
// get an array with value attribute of enumeration elements
def allowedValues = fullClassNameType.restriction.enumeration*.@value
log.info allowedValues // [Persons, AnotherClassName, AnotherOne]

Надеюсь, поможет,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]