Выделение JSON в XML с помощью jsonix дает недействительный XML - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно отправить XML-запрос в API для моего проекта.Но по соображениям безопасности я не могу кодировать прямой xml в моей программе.Поэтому я решил использовать jsonix для маршалинга JSON в xml и разархивировать ответ на запрос.Но у меня есть некоторые проблемы.

Вот мой xml:

<?xml version = '1.0' encoding='UTF-8'?>
<api>
    <authentication>
        <login>MyLogin</login>
        <password>MyPassword</password>
    </authentication>
    <command>
        <myfunction>
            <name>test</name>
        </myfunction>
     </command>
</api>

С этим я сгенерировал сопоставления с модулем компилятора схемы jsonix:

var Search_Module_Factory = function () {
	var Search = {
		name: "Search",
		typeInfos: [{
			localName: "Api.Command",
			typeName: null,
			propertyInfos: [{
				name: "myFunction",
				required: true,
				elementName: {
					localPart: "myfunction"
				},
				typeInfo: ".Api.Command.MyFunction"
			}]
		}, {
			localName: "Api.Authentication",
			typeName: null,
			propertyInfos: [{
				name: "login",
				required: true,
				elementName: {
					localPart: "login"
				}
			}, {
				name: "password",
				required: true,
				elementName: {
					localPart: "password"
				}
			}]
		}, {
			localName: "Api.Command.MyFunction",
			typeName: null,
			propertyInfos: [{
				name: "name",
				required: true,
				elementName: {
					localPart: "name"
				}
			}]
		}, {
			localName: "Api",
			typeName: null,
			propertyInfos: [{
				name: "authentication",
				required: true,
				elementName: {
					localPart: "authentication"
				},
				typeInfo: ".Api.Authentication"
			}, {
				name: "command",
				required: true,
				elementName: {
					localPart: "command"
				},
				typeInfo: ".Api.Command"
			}]
		}],
		elementInfos: [{
			typeInfo: ".Api",
			elementName: {
				localPart: "api"
			}
		}]
	};
	return {
		Search: Search
	};
};
if (typeof define === "function" && define.amd) {
	define([], Search_Module_Factory);
}
else {
	var Search_Module = Search_Module_Factory();
	if (typeof module !== "undefined" && module.exports) {
		module.exports.Search = Search_Module.Search;
	}
	else {
		var Search = Search_Module.Search;
	}
}

В моем основном коде я выполняю запрос xml следующим образом:

var Search = require("./mappings/Search").Search;
var context = new Jsonix.Context([ Search]);
var marshaller = context.createMarshaller();

var originalJS = {
			"api": {
				"authentication": {
					"login" :"mylogin",
					"password": "mypassword",
				},
				"command":{
					"myfunction":{
						"name": "test"
					}
				},
			}
		};
var marshalledXML = marshaller.marshalString(originalJS);
console.log(marshalledXML);

И в console.log () вместо того, чтобы показать мне что-то вроде этого, вот результат, который я хочу:

<api><authentication><login>mylogin</login><password>mypassword</password></authentication><command><myfunction><name>test</name></myfunction></command></api>

Возвращаетсячто-то вроде этого:

<api><authentication><login>mylogin</login><password>mypassword</password></authentication><command/></api>

Команда tag всегда пуста, и я не понимаю, что я делаю неправильно.Спасибо за вашу помощь

...