Как преобразовать поток (XML-строку) в XML в Ballerina 0.990? - PullRequest
0 голосов
/ 28 декабря 2018

Поддержка преобразования строки в XML удалена в Ballerina 0.990.Существует ли безопасный метод преобразования строк XML в тип xml в 0.990 и выше?

До версии Ballerina 0.990 строку XML можно было преобразовать в тип xml следующим образом:

string myXMLStream = "<root><foo/></root>";
xml myXML = <xml>myXMLStream;

С версией 0.990 (и 0.990.1) это приводит к ошибке:

'строка' не может быть явно введена как 'xml'

Хотя я использовал следующеев 0.990.1:

string myXMLStream = "<root><foo/></root>";
xml myXML = <xml>`{{myXMLStream}}`;

без ошибок во время компиляции результирующее содержимое myXML не может быть успешно отправлено как XMLPayloads в конечную точку:

http:Request reqProcessXML = new;
reqProcessXML.setXMLPayload(untaint myXML);
var respProcessXML = myEndpoint->post("/myResource",reqProcessXML);

Это приводит кошибка:

{ballerina / http} HTTPError {message: «Не удалось отправить outboundRequestMsg в бэкэнд»}

Если содержимое XML явно создано:

xml myXML = <xml>`<root><foo/></root>`;

остальная часть последующей обработки выполнена успешно.

Пожалуйста, предоставьте руководство по наилучшей / безопасной практике преобразования строки в XML с текущей версией Ballerina.

1 Ответ

0 голосов
/ 30 декабря 2018

Вы можете сделать следующее.

import ballerina/io;

public function main() {
    string myXMLStream = "<root><foo/></root>";
    io:StringReader reader = new io:StringReader(myXMLStream);
    xml|error? myXML = reader.readXml();
    if (myXML is xml) {
        io:println(myXML);
    } else {
        io:println("Something else");
    }
}
...