diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml b/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml
index a153e7fb0c6..ae28efad6db 100755
--- a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml
+++ b/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml
@@ -28,13 +28,7 @@
>
-
-
-
-
-
+
backends;
+ private Map backends = new HashMap<>();
private class RackPair {
BaremetalRct.Rack rack;
BaremetalRct.HostEntry host;
}
- public void setBackends(Map backends) {
- this.backends = backends;
- }
-
@Override
public BaremetalRctResponse addRct(AddBaremetalRctCmd cmd) {
try {
@@ -164,11 +161,6 @@ public class BaremetalVlanManagerImpl extends ManagerBase implements BaremetalVl
backend.removePortFromVlan(struct);
}
- @Override
- public void registerSwitchBackend(BaremetalSwitchBackend backend) {
- backends.put(backend.getSwitchBackendType(), backend);
- }
-
private BaremetalSwitchBackend getSwitchBackend(String type) {
BaremetalSwitchBackend backend = backends.get(type);
if (backend == null) {
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
index 26f42bee823..6a54527a860 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
@@ -403,7 +403,7 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
VMInstanceVO vm = vms.get(0);
SecurityGroupHttpClient client = new SecurityGroupHttpClient();
HashMap> nwGrpStates = client.sync(vm.getInstanceName(), vm.getId(), vm.getPrivateIpAddress());
- return new PingRoutingWithNwGroupsCommand(getType(), id, null, nwGrpStates);
+ return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(), nwGrpStates);
}
} else {
return new PingRoutingCommand(getType(), id, getHostVmStateReport());
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
index 3b88ca63f0c..58a05088f25 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
@@ -225,18 +225,19 @@ public class BaremetalKickStartServiceImpl extends BareMetalPxeServiceBase imple
}
List tuple = parseKickstartUrl(profile);
- String cmd = String.format("/usr/bin/prepare_pxe.sh %s %s %s %s %s %s", tuple.get(1), tuple.get(2), profile.getTemplate().getUuid(),
- String.format("01-%s", nic.getMacAddress().replaceAll(":", "-")).toLowerCase(), tuple.get(0), nic.getMacAddress().toLowerCase());
- s_logger.debug(String.format("prepare pxe on virtual router[ip:%s], cmd: %s", mgmtNic.getIp4Address(), cmd));
- Pair ret = SshHelper.sshExecute(mgmtNic.getIp4Address(), 3922, "root", getSystemVMKeyFile(), null, cmd);
+ Pair ret = SshHelper.sshExecute(mgmtNic.getIp4Address(), 3922, "root", getSystemVMKeyFile(), null,
+ String.format("/usr/bin/prepare_pxe.sh %s %s %s %s %s", tuple.get(1), tuple.get(2), profile.getTemplate().getUuid(),
+ String.format("01-%s", nic.getMacAddress().replaceAll(":", "-")), tuple.get(0))
+ );
if (!ret.first()) {
throw new CloudRuntimeException(String.format("failed preparing PXE in virtual router[id:%s], because %s", vr.getId(), ret.second()));
}
- //String internalServerIp = "10.223.110.231";
- cmd = String.format("/usr/bin/baremetal_snat.sh %s %s %s", mgmtNic.getIp4Address(), internalServerIp, mgmtNic.getGateway());
- s_logger.debug(String.format("prepare SNAT on virtual router[ip:%s], cmd: %s", mgmtNic.getIp4Address(), cmd));
- ret = SshHelper.sshExecute(mgmtNic.getIp4Address(), 3922, "root", getSystemVMKeyFile(), null, cmd);
+ //String internalServerIp = _configDao.getValue(Config.BaremetalInternalStorageServer.key());
+ String internalServerIp = "10.223.110.231";
+ ret = SshHelper.sshExecute(mgmtNic.getIp4Address(), 3922, "root", getSystemVMKeyFile(), null,
+ String.format("/usr/bin/baremetal_snat.sh %s %s", mgmtNic.getIp4Address(), internalServerIp)
+ );
if (!ret.first()) {
throw new CloudRuntimeException(String.format("failed preparing PXE in virtual router[id:%s], because %s", vr.getId(), ret.second()));
}
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java
index 10b81c2b3d7..5d20d3130f5 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java
@@ -21,7 +21,6 @@ package com.cloud.baremetal.networkservice;
import com.cloud.baremetal.database.BaremetalPxeVO;
import com.cloud.baremetal.manager.BaremetalVlanManager;
import com.cloud.dc.DataCenter;
-import com.cloud.dc.DataCenterVO;
import com.cloud.dc.Pod;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.deploy.DeployDestination;
@@ -140,9 +139,11 @@ public class BaremetalPxeElement extends AdapterBase implements NetworkElement {
}
}
+ /*
if (dest.getDataCenter().getNetworkType() == DataCenter.NetworkType.Advanced){
prepareVlan(network, dest);
}
+ */
return true;
}
@@ -158,10 +159,12 @@ public class BaremetalPxeElement extends AdapterBase implements NetworkElement {
return false;
}
+ /*
DataCenterVO dc = zoneDao.findById(vm.getVirtualMachine().getDataCenterId());
if (dc.getNetworkType() == DataCenter.NetworkType.Advanced) {
releaseVlan(network, vm);
}
+ */
return true;
}
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java
old mode 100755
new mode 100644
index ceaf25cb57b..9009b02d3fb
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java
@@ -32,16 +32,11 @@ import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
-import org.springframework.http.client.ClientHttpResponse;
-import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
-import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/**
@@ -51,38 +46,17 @@ public class Force10BaremetalSwitchBackend implements BaremetalSwitchBackend {
private Logger logger = Logger.getLogger(Force10BaremetalSwitchBackend.class);
public static final String TYPE = "Force10";
- private static List successHttpStatusCode = new ArrayList<>();
- {
- successHttpStatusCode.add(HttpStatus.OK);
- successHttpStatusCode.add(HttpStatus.ACCEPTED);
- successHttpStatusCode.add(HttpStatus.CREATED);
- successHttpStatusCode.add(HttpStatus.NO_CONTENT);
- successHttpStatusCode.add(HttpStatus.PARTIAL_CONTENT);
- successHttpStatusCode.add(HttpStatus.RESET_CONTENT);
- successHttpStatusCode.add(HttpStatus.ALREADY_REPORTED);
- }
-
RestTemplate rest = new RestTemplate();
- {
- // fake error handler, we handle error in business logic code
- rest.setErrorHandler(new ResponseErrorHandler() {
- @Override
- public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
- return false;
- }
- @Override
- public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {
- }
- });
- }
-
- private String buildLink(String switchIp, String path) {
+ private String buildLink(String switchIp, Integer vlan) {
UriComponentsBuilder builder = UriComponentsBuilder.newInstance();
builder.scheme("http");
builder.host(switchIp);
builder.port(8008);
- builder.path(path);
+ builder.path("/api/running/ftos/interface/vlan");
+ if (vlan != null) {
+ builder.path(vlan.toString());
+ }
return builder.build().toUriString();
}
@@ -93,36 +67,29 @@ public class Force10BaremetalSwitchBackend implements BaremetalSwitchBackend {
@Override
public void prepareVlan(BaremetalVlanStruct struct) {
- String link = buildLink(struct.getSwitchIp(), String.format("/api/running/ftos/interface/vlan/%s", struct.getVlan()));
+ String link = buildLink(struct.getSwitchIp(), struct.getVlan());
HttpHeaders headers = createBasicAuthenticationHeader(struct);
HttpEntity request = new HttpEntity<>(headers);
ResponseEntity rsp = rest.exchange(link, HttpMethod.GET, request, String.class);
- logger.debug(String.format("http get: %s", link));
if (rsp.getStatusCode() == HttpStatus.NOT_FOUND) {
PortInfo port = new PortInfo(struct);
- XmlObject xml = new XmlObject("vlan").putElement("vlan-id",
- new XmlObject("vlan-id").setText(String.valueOf(struct.getVlan()))).putElement("untagged",
- new XmlObject("untagged").putElement(port.interfaceType, new XmlObject(port.interfaceType)
- .putElement("name", new XmlObject("name").setText(port.port)))
- ).putElement("shutdown", new XmlObject("shutdown").setText("false"));
- request = new HttpEntity<>(xml.dump(), headers);
- link = buildLink(struct.getSwitchIp(), String.format("/api/running/ftos/interface/"));
- logger.debug(String.format("http get: %s, body: %s", link, request));
- rsp = rest.exchange(link, HttpMethod.POST, request, String.class);
- if (!successHttpStatusCode.contains(rsp.getStatusCode())) {
+ XmlObject xml = new XmlObject("vlan").putElement("vlan-id", String.valueOf(struct.getVlan())).putElement("tagged",
+ new XmlObject(port.interfaceType).putElement("name", port.port)
+ ).putElement("shutdown", "false");
+ request = new HttpEntity<>(xml.toString(), headers);
+ link = buildLink(struct.getSwitchIp(), null);
+ rsp = rest.exchange(link, HttpMethod.GET, request, String.class);
+ if (rsp.getStatusCode() != HttpStatus.OK) {
throw new CloudRuntimeException(String.format("unable to create vlan[%s] on force10 switch[ip:%s]. HTTP status code:%s, body dump:%s",
- struct.getVlan(), struct.getSwitchIp(),rsp.getStatusCode(), rsp.getBody()));
- } else {
- logger.debug(String.format("successfully programmed vlan[%s] on Force10[ip:%s, port:%s]. http response[status code:%s, body:%s]",
- struct.getVlan(), struct.getSwitchIp(), struct.getPort(), rsp.getStatusCode(), rsp.getBody()));
+ struct.getVlan(), rsp.getStatusCode(), struct.getSwitchIp(), rsp.getBody()));
}
- } else if (successHttpStatusCode.contains(rsp.getStatusCode())) {
+ } else if (rsp.getStatusCode() == HttpStatus.OK) {
PortInfo port = new PortInfo(struct);
XmlObject xml = XmlObjectParser.parseFromString((String)rsp.getBody());
- List ports = xml.getAsList("untagged.tengigabitethernet");
- ports.addAll(xml.getAsList("untagged.gigabitethernet"));
- ports.addAll(xml.getAsList("untagged.fortyGigE"));
+ List ports = xml.getAsList("tagged.tengigabitethernet");
+ ports.addAll(xml.getAsList("tagged.gigabitethernet"));
+ ports.addAll(xml.getAsList("tagged.fortyGigE"));
for (XmlObject pxml : ports) {
XmlObject name = pxml.get("name");
if (port.port.equals(name.getText())) {
@@ -131,26 +98,14 @@ public class Force10BaremetalSwitchBackend implements BaremetalSwitchBackend {
}
}
- xml.removeElement("mtu");
- xml.setText(null);
- XmlObject tag = xml.get("untagged");
- if (tag == null) {
- tag = new XmlObject("untagged");
- xml.putElement("untagged", tag);
- }
-
- tag.putElement(port.interfaceType, new XmlObject(port.interfaceType)
- .putElement("name", new XmlObject("name").setText(port.port)));
- request = new HttpEntity<>(xml.dump(), headers);
- link = buildLink(struct.getSwitchIp(), String.format("/api/running/ftos/interface/vlan/%s", struct.getVlan()));
- logger.debug(String.format("http get: %s, body: %s", link, request));
+ XmlObject tag = xml.get("tagged");
+ tag.putElement(port.interfaceType, new XmlObject("name").setText(port.port));
+ request = new HttpEntity<>(xml.toString(), headers);
+ link = buildLink(struct.getSwitchIp(), struct.getVlan());
rsp = rest.exchange(link, HttpMethod.PUT, request, String.class);
- if (!successHttpStatusCode.contains(rsp.getStatusCode())) {
+ if (rsp.getStatusCode() != HttpStatus.NO_CONTENT) {
throw new CloudRuntimeException(String.format("failed to program vlan[%s] for port[%s] on force10[ip:%s]. http status:%s, body dump:%s",
struct.getVlan(), struct.getPort(), struct.getSwitchIp(), rsp.getStatusCode(), rsp.getBody()));
- } else {
- logger.debug(String.format("successfully join port[%s] into vlan[%s] on Force10[ip:%s]. http response[status code:%s, body:%s]",
- struct.getPort(), struct.getVlan(), struct.getSwitchIp(), rsp.getStatusCode(), rsp.getBody()));
}
} else {
throw new CloudRuntimeException(String.format("force10[ip:%s] returns unexpected error[%s] when http getting %s, body dump:%s",
@@ -160,19 +115,18 @@ public class Force10BaremetalSwitchBackend implements BaremetalSwitchBackend {
@Override
public void removePortFromVlan(BaremetalVlanStruct struct) {
- String link = buildLink(struct.getSwitchIp(), String.format("/api/running/ftos/interface/vlan/%s", struct.getVlan()));
+ String link = buildLink(struct.getSwitchIp(), struct.getVlan());
HttpHeaders headers = createBasicAuthenticationHeader(struct);
HttpEntity request = new HttpEntity<>(headers);
- logger.debug(String.format("http get: %s, body: %s", link, request));
ResponseEntity rsp = rest.exchange(link, HttpMethod.GET, request, String.class);
if (rsp.getStatusCode() == HttpStatus.NOT_FOUND) {
logger.debug(String.format("vlan[%s] has been deleted on force10[ip:%s], no need to remove the port[%s] anymore", struct.getVlan(), struct.getSwitchIp(), struct.getPort()));
} else if (rsp.getStatusCode() == HttpStatus.OK) {
PortInfo port = new PortInfo(struct);
XmlObject xml = XmlObjectParser.parseFromString((String)rsp.getBody());
- List ports = xml.getAsList("untagged.tengigabitethernet");
- ports.addAll(xml.getAsList("untagged.gigabitethernet"));
- ports.addAll(xml.getAsList("untagged.fortyGigE"));
+ List ports = xml.getAsList("tagged.tengigabitethernet");
+ ports.addAll(xml.getAsList("tagged.gigabitethernet"));
+ ports.addAll(xml.getAsList("tagged.fortyGigE"));
List newPorts = new ArrayList<>();
boolean needRemove = false;
for (XmlObject pxml : ports) {
@@ -189,19 +143,11 @@ public class Force10BaremetalSwitchBackend implements BaremetalSwitchBackend {
return;
}
- xml.setText(null);
- xml.removeElement("mtu");
- XmlObject tagged = xml.get("untagged");
- tagged.removeAllChildren();
- for (XmlObject p : newPorts) {
- tagged.putElement(p.getTag(), p);
- }
+ xml.putElement("tagged", newPorts);
-
- request = new HttpEntity<>(xml.dump(), headers);
- logger.debug(String.format("http get: %s, body: %s", link, request));
+ request = new HttpEntity<>(xml.toString(), headers);
rsp = rest.exchange(link, HttpMethod.PUT, request, String.class);
- if (!successHttpStatusCode.contains(rsp.getStatusCode())) {
+ if (rsp.getStatusCode() != HttpStatus.NO_CONTENT) {
throw new CloudRuntimeException(String.format("failed to program vlan[%s] for port[%s] on force10[ip:%s]. http status:%s, body dump:%s",
struct.getVlan(), struct.getPort(), struct.getSwitchIp(), rsp.getStatusCode(), rsp.getBody()));
} else {
@@ -220,8 +166,6 @@ public class Force10BaremetalSwitchBackend implements BaremetalSwitchBackend {
String base64Creds = new String(base64CredsBytes);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
- headers.setAccept(Arrays.asList(MediaType.ALL));
- headers.setContentType(MediaType.valueOf("application/vnd.yang.data+xml"));
return headers;
}
diff --git a/scripts/network/ping/baremetal_snat.sh b/scripts/network/ping/baremetal_snat.sh
index 22e56692d7d..f35a16f8e96 100755
--- a/scripts/network/ping/baremetal_snat.sh
+++ b/scripts/network/ping/baremetal_snat.sh
@@ -21,12 +21,11 @@ set +u
mgmt_nic_ip=$1
internal_server_ip=$2
-gateway_ip=$3
ip route | grep "$internal_server_ip" > /dev/null
if [ $? -ne 0 ]; then
- ip route add $internal_server_ip via $gateway_ip
+ ip route add $internal_server_ip via $mgmt_nic_ip
fi
iptables-save | grep -- "-A POSTROUTING -d $internal_server_ip" > /dev/null
@@ -34,21 +33,3 @@ iptables-save | grep -- "-A POSTROUTING -d $internal_server_ip" > /dev/null
if [ $? -ne 0 ]; then
iptables -t nat -A POSTROUTING -d $internal_server_ip -j SNAT --to-source $mgmt_nic_ip
fi
-
-
-iptables-save | grep -- "-A INPUT -i eth0 -p udp -m udp --dport 69 -j ACCEPT" > /dev/null
-if [ $? -ne 0 ]; then
- iptables -I INPUT -i eth0 -p udp -m udp --dport 69 -j ACCEPT
-fi
-
-iptables-save | grep -- "-A FORWARD -i eth1 -o eth0 -j ACCEPT" > /dev/null
-if [ $? -ne 0 ]; then
- iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
-fi
-
-rule="-A FORWARD -d $internal_server_ip/32 -i eth0 -o eth1 -j ACCEPT"
-iptables-save | grep -- "$rule" > /dev/null
-if [ $? -ne 0 ]; then
- iptables -I FORWARD -d $internal_server_ip/32 -i eth0 -o eth1 -j ACCEPT
-fi
-
diff --git a/scripts/network/ping/prepare_pxe.sh b/scripts/network/ping/prepare_pxe.sh
index 5bc1a9380dc..bd9ece69f7a 100755
--- a/scripts/network/ping/prepare_pxe.sh
+++ b/scripts/network/ping/prepare_pxe.sh
@@ -40,20 +40,6 @@ tmpt_uuid=$3
pxe_cfg_filename=$4
ks_file=$5
-kernel_path=$tmpt_uuid/$kernel_file_name
-initrd_path=$tmpt_uuid/$initrd_file_name
-
-cat > $PXELINUX_CFG_DIR/$pxe_cfg_filename < $PXELINUX_CFG_DIR/$pxe_cfg_filename < elements = new HashMap();
private String text;
private String tag;
@@ -40,10 +38,6 @@ public class XmlObject {
XmlObject() {
}
- public void removeAllChildren() {
- elements.clear();
- }
-
public XmlObject(String tag) {
this.tag = tag;
}
@@ -105,12 +99,8 @@ public class XmlObject {
if (e instanceof List) {
return (List)e;
}
-
List lst = new ArrayList(1);
- if (e != null) {
- lst.add(e);
- }
-
+ lst.add(e);
return lst;
}
@@ -152,8 +142,7 @@ public class XmlObject {
}
if (!children.isEmpty() && text != null) {
- logger.info(String.format("element %s cannot have both text[%s] and child elements, set text to null", tag, text));
- text = null;
+ throw new CloudRuntimeException(String.format("element %s cannot have both text[%s] and child elements", tag, text));
}
if (!children.isEmpty()) {
diff --git a/utils/src/com/cloud/utils/xmlobject/XmlObjectParser.java b/utils/src/com/cloud/utils/xmlobject/XmlObjectParser.java
old mode 100755
new mode 100644
index f0e8ce31261..321af0ce9c8
--- a/utils/src/com/cloud/utils/xmlobject/XmlObjectParser.java
+++ b/utils/src/com/cloud/utils/xmlobject/XmlObjectParser.java
@@ -19,13 +19,6 @@
package com.cloud.utils.xmlobject;
-import com.cloud.utils.exception.CloudRuntimeException;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -33,6 +26,15 @@ import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Stack;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.cloud.utils.exception.CloudRuntimeException;
+
public class XmlObjectParser {
final private InputStream is;
@@ -107,11 +109,7 @@ public class XmlObjectParser {
public static XmlObject parseFromString(String xmlString) {
InputStream stream = new ByteArrayInputStream(xmlString.getBytes());
XmlObjectParser p = new XmlObjectParser(stream);
- XmlObject obj = p.parse();
- if (obj.getText() != null && obj.getText().replaceAll("\\n", "").replaceAll("\\r", "").replaceAll(" ", "").isEmpty()) {
- obj.setText(null);
- }
- return obj;
+ return p.parse();
}
private XmlObject parse() {
diff --git a/utils/test/com/cloud/utils/xmlobject/TestXmlObject.java b/utils/test/com/cloud/utils/xmlobject/TestXmlObject.java
old mode 100755
new mode 100644
index faaf9803c14..cbd24b029c4
--- a/utils/test/com/cloud/utils/xmlobject/TestXmlObject.java
+++ b/utils/test/com/cloud/utils/xmlobject/TestXmlObject.java
@@ -43,11 +43,6 @@ public class TestXmlObject {
}
}
*/
-
- XmlObject xml = new XmlObject("vlan").putElement("vlan-id", String.valueOf(19)).putElement("tagged",
- new XmlObject("teng").putElement("name", "0/0")
- ).putElement("shutdown", "false");
- System.out.println(xml.toString());
}
}