我有一个BPM Bonita项目,我通过SOAP调用调用web服务,显示的输出类似于:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getBusinessDetailsResponse xmlns:ns2="http://bpm11.cs.unibo.it">
<return>
<name>Clinic Name</name>
<type>clinic</type>
<serviceLocation>http://localhost:8888/WebServices/Clinic1</serviceLocation>
<serviceName>ClinicService</serviceName>
<bankCode>IT02L1534555346128858689014</bankCode>
<operatingAreaCodes>1</operatingAreaCodes>
<operatingAreaCodes>2</operatingAreaCodes>
<operatingAreaCodes>3</operatingAreaCodes>
</return>
</ns2:getBusinessDetailsResponse>
</S:Body>
</S:Envelope>
以Groovy代码中的唯一String传递给Bonita任务,这样:
import javax.xml.transform.dom.DOMSource;
def output = (DOMSource) response;
String currentTime = output.getNode().childNodes.item(0).textContent;
基本上变量currentTime返回完整的输出,但是没有任何分隔符......
例如:
Clinic Namecliniclocalhost:8888 ...etc.etc... IT02L1534555346128858689014123
而不是
Clinic Name, clinic, localhost:8888 ...etc.
是否可以拆分SOAP输出或添加分隔符?
非常感谢
答案 0 :(得分:1)
好的,假设您正在获取DOMSource(来自某个地方),您可以这样做:
Map values = use( groovy.xml.dom.DOMCategory ) {
output.node.childNodes.'**'.find { it.name() == 'return' }
.findAll { !it.name().startsWith( '#' ) }
.collectEntries { [ it.name(), it.text() ] }
}
为你提供地图:
['name':'Clinic Name',
'type':'clinic',
'serviceLocation':'http://localhost:8888/WebServices/Clinic1',
'serviceName':'ClinicService',
'bankCode':'IT02L1534555346128858689014',
'operatingAreaCodes':'3']
但是,如果您可以以字符串形式访问XML,那么使用XmlSlurper
这样就更好了:
Map slurpedValues = new XmlSlurper().parseText( xml ).with { x ->
x.Body.getBusinessDetailsResponse.return
.children()
.collectEntries { [ it.name(), it.text() ] }
}
哪个结果相同