diff --git a/src/main/modules/xmlProcessing/XmlProcessingService.ts b/src/main/modules/xmlProcessing/XmlProcessingService.ts index 8007cc7..01af488 100644 --- a/src/main/modules/xmlProcessing/XmlProcessingService.ts +++ b/src/main/modules/xmlProcessing/XmlProcessingService.ts @@ -4,6 +4,7 @@ import { ConnectorData, ChannelData, DestinationConnectorData, + SourceConnectorData, ServerConfiguration } from '../../../models/' import xml2js from 'xml2js' @@ -21,8 +22,14 @@ export async function processXmlFile( ): Promise<{ extractedData: ExtractedData; metadata: MetaData }> { try { const result = await parseXmlData(xmlData) - const extractedData = extractProperties(result.serverConfiguration.channels[0].channel) - const metadata = { + // Add runtime check for expected structure + const channelsArray = + Array.isArray(result.serverConfiguration.channels) && + result.serverConfiguration.channels[0]?.channel + ? result.serverConfiguration.channels[0].channel + : [] + const extractedData = extractProperties(channelsArray) + const metadata: MetaData = { date: result.serverConfiguration.date[0], version: result.serverConfiguration.$.version } @@ -57,11 +64,11 @@ function parseXmlData(xmlData: string): Promise { /** * Extract properties from parsed data. - * @param data - The parsed XML data. + * @param data - The parsed XML data (array of channel data). * @returns Extracted data with typed structure. */ -function extractProperties(data): ExtractedData { - const channels: ChannelData[] = data.map((channelData) => { +function extractProperties(data: any[]): ExtractedData { + const channels: ChannelData[] = data.map((channelData: any) => { const sourceConnectorData = channelData.sourceConnector[0] const destinationConnectorsData = channelData.destinationConnectors[0].connector @@ -69,6 +76,7 @@ function extractProperties(data): ExtractedData { name: channelData.name[0], id: channelData.id[0], sourceConnector: { + type: ConnectorType.Source, // Required by ChannelData model id: channelData.id[0], connectorName: sourceConnectorData.name[0], transportName: sourceConnectorData.transportName[0], @@ -76,8 +84,9 @@ function extractProperties(data): ExtractedData { ...extractConnectorProperties(sourceConnectorData, ConnectorType.Source) }, destinationConnectors: destinationConnectorsData.map( - (destinationConnectorData: DestinationConnectorData) => { + (destinationConnectorData: any) => { return { + type: ConnectorType.Destination, // Required by ChannelData model connectorName: destinationConnectorData.name[0], id: channelData.id[0], enabled: destinationConnectorData.enabled[0], @@ -98,7 +107,7 @@ function extractProperties(data): ExtractedData { * @param type - The connector type. * @returns Extracted connector properties with typed structure. */ -function extractConnectorProperties(data, type: ConnectorType): ConnectorData { +function extractConnectorProperties(data: any, type: ConnectorType): ConnectorData { const connectorProperties: ConnectorData = { inboundDataType: data.transformer?.[0]?.inboundDataType?.[0] ?? '', outboundDataType: data.transformer?.[0]?.outboundDataType?.[0] ?? '', @@ -122,4 +131,4 @@ function extractConnectorProperties(data, type: ConnectorType): ConnectorData { smbHost: data.properties?.[0]?.host?.[0] ?? '' } return connectorProperties -} +} \ No newline at end of file