<?xml version="1.0" encoding="UTF-8"?>
<root>
<shipment id="shipment1">
<truck id="11-aa-11">
<pallet>
<content>banana</content>
<count>22</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
</truck>
</shipment>
</root>
import com.sap.it.api.ITApi
import com.sap.it.api.ITApiFactory
import com.sap.it.api.securestore.*;
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.xml.*;
def Message processData(Message message) {
String body = message.getBody(java.lang.String);
def properties = message.getProperties();
String nodeName = properties.get("groupingNode");
int numberGroups = properties.get("numberGroups").toInteger();
def xml = new XmlParser().parseText(body);
def targetNodes = xml.'**'.findAll { node -> node.name() == nodeName };
int groupSize = targetNodes.size().intdiv(numberGroups);
int rest = targetNodes.size() % numberGroups;
def groupSizeList = createGroupList(numberGroups, groupSize, rest);
def outputXML = creatGroupingXML(groupSizeList, targetNodes);
def serialized = XmlUtil.serialize(outputXML);
message.setBody(serialized);
return message;
}
def createGroupList(int numberGroups, int groupSize,int rest){
def groupSizeList = [];
for(int i=0; i < numberGroups; i++){
int size = groupSize;
if(rest > 0 ){
size++;
rest--;
}
groupSizeList.push(size);
}
return groupSizeList;
}
def creatGroupingXML(def groupSizeList, def targetNodes){
def parser = new XmlParser();
def outputXML = parser.parseText("<root></root>");
def nodeCounter = 0;
groupSizeList.each{group ->
int copySize = group.toInteger();
def splitNode = parser.parseText("<group></group>");
for(int i = 0; i < copySize; i++){
def copyNode = xclone(targetNodes[nodeCounter]);
splitNode.append(copyNode);
nodeCounter ++;
}
outputXML.append( splitNode );
}
return outputXML;
}
def xclone(Node n){
return new XmlParser().parseText(XmlUtil.serialize(n))
}
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:fru="http://www.example.org/fruitshipment/">
<soapenv:Header/>
<soapenv:Body>
<fru:processFruitShipment>
<shipment id="shipment1">
<truck id="11-aa-11">
<pallet>
<content>banana</content>
<count>22</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
</truck>
<truck id="22-aa-22">
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
</truck>
<truck id="33-aa-33">
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
</truck>
<truck id="44-aa-44">
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
</truck>
</shipment>
</fru:processFruitShipment>
</soapenv:Body>
</soapenv:Envelope>
<?xml version="1.0" encoding="UTF-8"?><root>
<group>
<pallet>
<content>banana</content>
<count>22</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
</group>
<group>
<pallet>
<content>banana</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
</group>
<group>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>pear</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
</group>
<group>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>orange</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
</group>
<group>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
<pallet>
<content>apple</content>
<count>220</count>
</pallet>
</group>
</root>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
8 | |
5 | |
5 | |
4 | |
4 | |
4 | |
4 | |
4 | |
3 | |
3 |