Я новичок в Groovy, и я пытаюсь сериализовать определенную часть XML-кода, как этот (который также является ответом SalesOrderInfo от веб-службы Magento)
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:salesOrderInfoResponse>
<result xsi:type="ns1:salesOrderEntity">
<increment_id xsi:type="xsd:string">REDACTED</increment_id>
<store_id xsi:type="xsd:string">1</store_id>
<created_at xsi:type="xsd:string">2018-11-21 14:26:08</created_at>
<updated_at xsi:type="xsd:string">2018-11-24 17:40:18</updated_at>
<customer_id xsi:type="xsd:string">111111</customer_id>
<tax_amount xsi:type="xsd:string">37.9830</tax_amount>
<shipping_amount xsi:type="xsd:string">0.0000</shipping_amount>
<discount_amount xsi:type="xsd:string">0.0000</discount_amount>
<subtotal xsi:type="xsd:string">211.0170</subtotal>
<grand_total xsi:type="xsd:string">249.0000</grand_total>
<total_paid xsi:type="xsd:string">249.0000</total_paid>
<total_qty_ordered xsi:type="xsd:string">2.0000</total_qty_ordered>
<total_invoiced xsi:type="xsd:string">249.0000</total_invoiced>
<base_tax_amount xsi:type="xsd:string">37.9830</base_tax_amount>
<base_shipping_amount xsi:type="xsd:string">0.0000</base_shipping_amount>
<base_discount_amount xsi:type="xsd:string">0.0000</base_discount_amount>
<base_subtotal xsi:type="xsd:string">211.0170</base_subtotal>
<base_grand_total xsi:type="xsd:string">249.0000</base_grand_total>
<base_total_paid xsi:type="xsd:string">249.0000</base_total_paid>
<base_total_invoiced xsi:type="xsd:string">249.0000</base_total_invoiced>
<billing_address_id xsi:type="xsd:string">126249</billing_address_id>
<shipping_address_id xsi:type="xsd:string">126250</shipping_address_id>
<store_to_base_rate xsi:type="xsd:string">1.0000</store_to_base_rate>
<store_to_order_rate xsi:type="xsd:string">1.0000</store_to_order_rate>
<base_to_global_rate xsi:type="xsd:string">1.0000</base_to_global_rate>
<base_to_order_rate xsi:type="xsd:string">1.0000</base_to_order_rate>
<weight xsi:type="xsd:string">0.0000</weight>
<store_name xsi:type="xsd:string">Main Website
Main Website Store
Default Store View</store_name>
<remote_ip xsi:type="xsd:string">REDACTED</remote_ip>
<status xsi:type="xsd:string">complete_delivered</status>
<state xsi:type="xsd:string">complete</state>
<applied_rule_ids xsi:type="xsd:string">6</applied_rule_ids>
<global_currency_code xsi:type="xsd:string">TRY</global_currency_code>
<base_currency_code xsi:type="xsd:string">TRY</base_currency_code>
<store_currency_code xsi:type="xsd:string">TRY</store_currency_code>
<order_currency_code xsi:type="xsd:string">TRY</order_currency_code>
<shipping_method xsi:type="xsd:string">REDACTED</shipping_method>
<shipping_description xsi:type="xsd:string">Standart Kargo</shipping_description>
<customer_email xsi:type="xsd:string">REDACTED</customer_email>
<customer_firstname xsi:type="xsd:string">REDACTED</customer_firstname>
<customer_lastname xsi:type="xsd:string">REDACTED</customer_lastname>
<quote_id xsi:type="xsd:string">263510</quote_id>
<is_virtual xsi:type="xsd:string">0</is_virtual>
<customer_group_id xsi:type="xsd:string">1</customer_group_id>
<customer_note_notify xsi:type="xsd:string">1</customer_note_notify>
<customer_is_guest xsi:type="xsd:string">0</customer_is_guest>
<email_sent xsi:type="xsd:string">1</email_sent>
<order_id xsi:type="xsd:string">111111</order_id>
<status_history SOAP-ENC:arrayType="ns1:salesOrderStatusHistoryEntity[7]" xsi:type="ns1:salesOrderStatusHistoryEntityArray">
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-24 17:40:18</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">complete_delivered</status>
<comment xsi:type="xsd:string">2018-11-24 20:40:18</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-23 12:40:34</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">complete_shipped</status>
<comment xsi:type="xsd:string">REDACTED</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-23 11:50:37</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">complete</status>
<comment xsi:type="xsd:string">2018-11-23 14:50:37</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-23 11:50:37</created_at>
<is_customer_notified xsi:type="xsd:string">1</is_customer_notified>
<status xsi:type="xsd:string">complete</status>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-21 17:31:38</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">processing_started</status>
<comment xsi:type="xsd:string">2018-11-21 20:31:38</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-21 14:26:11</created_at>
<is_customer_notified xsi:type="xsd:string">1</is_customer_notified>
<status xsi:type="xsd:string">waiting_shipment</status>
<comment xsi:type="xsd:string">REDACTED</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-21 14:26:08</created_at>
<is_customer_notified xsi:type="xsd:string">1</is_customer_notified>
<status xsi:type="xsd:string">pending</status>
</item>
</status_history>
</result>
</ns1:salesOrderInfoResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Чего я хочу добиться, так этоя просто хочу извлечь список "status_history" из XML и сериализовать его.Поэтому вывод, который я ожидаю, должен выглядеть следующим образом.
<status_history SOAP-ENC:arrayType="ns1:salesOrderStatusHistoryEntity[7]" xsi:type="ns1:salesOrderStatusHistoryEntityArray">
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-24 17:40:18</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">complete_delivered</status>
<comment xsi:type="xsd:string">2018-11-24 20:40:18</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-23 12:40:34</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">complete_shipped</status>
<comment xsi:type="xsd:string">REDACTED</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-23 11:50:37</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">complete</status>
<comment xsi:type="xsd:string">2018-11-23 14:50:37</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-23 11:50:37</created_at>
<is_customer_notified xsi:type="xsd:string">1</is_customer_notified>
<status xsi:type="xsd:string">complete</status>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-21 17:31:38</created_at>
<is_customer_notified xsi:type="xsd:string">0</is_customer_notified>
<status xsi:type="xsd:string">processing_started</status>
<comment xsi:type="xsd:string">2018-11-21 20:31:38</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-21 14:26:11</created_at>
<is_customer_notified xsi:type="xsd:string">1</is_customer_notified>
<status xsi:type="xsd:string">waiting_shipment</status>
<comment xsi:type="xsd:string">REDACTED</comment>
</item>
<item xsi:type="ns1:salesOrderStatusHistoryEntity">
<parent_id xsi:type="xsd:string">63128</parent_id>
<created_at xsi:type="xsd:string">2018-11-21 14:26:08</created_at>
<is_customer_notified xsi:type="xsd:string">1</is_customer_notified>
<status xsi:type="xsd:string">pending</status>
</item>
</status_history>
Итак, скрипт, который я пытаюсь выполнить, выглядит примерно так
for( int i = 0; i < dataContext.getDataCount(); i++ ) {
InputStream is = dataContext.getStream(i);
Properties props = dataContext.getProperties(i);
Logger logger = ExecutionUtil.getBaseLogger();
def baseMessage = ExecutionUtil.getDynamicProcessProperty("p_crmLogMessage");
def baseXML = new XmlSlurper(false, false).parseText(baseMessage);
def statusXML = baseXML.salesOrderInfoResponse.result.status_history;
logger.info("Found Status History " + statusXML.toString());
String sDummyXML = '''<magentoHistoryResponse></magentoHistoryResponse>''';
def dummyXML = new XmlSlurper().parseText(sDummyXML);
dummyXML.appendNode(statusXML.childNodes().next());
logger.info("Parsed Status Text");
logger.info("Status : " + XmlUtil.serialize(dummyXML));
ExecutionUtil.setDynamicProcessProperty("p_crmLogMessage", XmlUtil.serialize(dummyXML), false);
dataContext.storeStream(is, props);
}
Я обнаружил, что тег status_history имеет типNodeChildren и я пытались получить одного ребенка для целей тестирования, но я не смог сериализовать NodeChildren / NodeChild.Как этого достичь?Я использую Groovy 2.4.Я получаю необработанный базовый объемный XML в виде строки из этой строки
def baseMessage = ExecutionUtil.getDynamicProcessProperty("p_crmLogMessage");