An alternative to the other answers is to use xml2js for serializing a typescript class to XML instead of working with the raw XML syntax. Here is an example.
import { Builder } from 'xml2js';
...
postBundleAssets():Observable<AxiosResponse> {
const httpsAgent = new https.Agent({ rejectUnauthorized: false });
let data = this.buildSampleMessage()
let requestUrl:string = this.baseUrl + "/bundles/assets";
return this.httpService.post(requestUrl,data,
{
withCredentials: true,
maxRedirects: 0,
httpsAgent: httpsAgent,
headers: {
cookie: this.cookieJar.myCookies,
'Content-Type': 'application/xml'
},
}
)
}
buildSampleMessage() {
let message: string;
let assetDoc: AssetDoc = new AssetDoc()
assetDoc.doc = new AssetDocRoot()
let asset1: Asset = new Asset();
asset1.$.ID="a5"
asset1.$.class="$XxxAtlas-HiveDb"
asset1.$.repr="HiveDb3"
let qualifiedNameAttribute:Attribute = new Attribute()
let nameAttribute:Attribute = new Attribute()
let clusterNameAttribute:Attribute = new Attribute()
qualifiedNameAttribute.$.name="$qualifiedName"
qualifiedNameAttribute.$.value="host1.HiveDb3"
nameAttribute.$.name="name"
nameAttribute.$.value="HiveDb3"
clusterNameAttribute.$.name="$clusterName"
clusterNameAttribute.$.value="Cluster1"
asset1.attribute = []
asset1.attribute.push(qualifiedNameAttribute)
asset1.attribute.push(nameAttribute)
asset1.attribute.push(clusterNameAttribute)
assetDoc.doc.assets = new AssetList()
assetDoc.doc.assets.asset = []
assetDoc.doc.assets.asset.push(asset1)
assetDoc.doc.importAction = new ImportAction()
assetDoc.doc.importAction.$.completeAssetIDs = "a5"
let builder:Builder = new Builder()
message = builder.buildObject(assetDoc)
console.log(message)
return message;
}
Here is an example of a typescript dto class:
import { Attribute } from "./attribute";
import { Reference } from "./reference";
export class Asset {
$: AssetAttributes = new AssetAttributes()
attribute: Attribute[];
reference: Reference[];
}
class AssetAttributes {
class:string;
repr:string;
ID:string;
}
The generated XML looks like this:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<doc xmlns="http://www.ibm.com/iis/flow-doc">
<assets>
<asset ID="a5" class="$XxxAtlas-HiveDb" repr="HiveDb3">
<attribute name="$qualifiedName" value="host1.HiveDb3"/>
<attribute name="name" value="HiveDb3"/>
<attribute name="$clusterName" value="Cluster1"/>
</asset>
</assets>
<importAction completeAssetIDs="a5"/>
</doc>