MuleSoft DataWeave - вызов службы .NET SOAP через пользователя веб-службы

У меня есть веб-служба .NET, у которой есть метод, принимающий строку. В студии Mulesoft Anypoint я успешно построил поток, который принимает POST, передает строку POSTed в службу и возвращает обработанный результат.

Теперь я пытаюсь создать поток для аналогичной службы, за исключением того, что эта служба принимает настраиваемый объект, а не строку. Когда я использую пользовательский интерфейс SOAP для непосредственного тестирования своей службы, я передаю следующий XML-код, и он успешно создает объект в моей службе, и для службы доступны значения MyFirstString и MySecondString.

SOAP UI XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:pra="http://schemas.datacontract.org/2004/07/Pra.Lib.Transformation">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Transform>         
         <tem:transformationData>            
            <pra:MyFirstString>test1</pra:MyFirstString>
            <pra:MySecondString>test2</pra:MySecondString>
         </tem:transformationData>
      </tem:Transform>
   </soapenv:Body>
</soapenv:Envelope>

Однако, когда я использую свой поток Mule и отбрасываю DataWeave перед потребителем веб-службы, он автоматически создает строку XML, которая не работает со службой. Когда я подключаю отладчик к службе, он показывает, что объект не был успешно построен / сопоставлен ... MyFirstString и MySecondString имеют значение null после вызова потребителя веб-службы.

Код DataWeave:

%dw 1.0
%output application/xml
%namespace ns0 http://tempuri.org/
---
//Some output fields where skipped as the structure is too deep (more than 2 levels).
//To add missing fields click on the scaffold icon (second on the toolbar).
{
    ns0#Transform: {
        ns0#transformationData: {
            Xml: "test1",
            Xslt: "test2"
        }
    }
}

Вывод DataWeave:

<?xml version='1.0' encoding='windows-1252'?>
<ns0:Transform xmlns:ns0="http://tempuri.org/">
  <ns0:transformationData>
    <Xml>test1</Xml>
    <Xslt>test2</Xslt>
  </ns0:transformationData>
</ns0:Transform>

Возвращенное сообщение об ошибке: «Ошибка десериализации тела сообщения запроса для операции« Преобразование ». OperationFormatter обнаружил недопустимое тело сообщения. Ожидается, что будет найден тип узла« Элемент »с именем« Преобразование »и пространством имен« '. Найден тип узла' Element 'с именем' EXTRACT_DETAIL 'и пространством имен' '. Полезные данные сообщения имеют тип: ElementNSImpl"

Итак, если я понимаю эту ошибку ... мой вопрос в том, как мне закодировать DataWeave для вывода в формате мыльного конверта, который использует интерфейс SOAP ... потому что кажется, что структура элементов, которую генерирует DataWeave, вызывает у меня проблемы? Большое спасибо.


person Josh Calhoun    schedule 08.10.2015    source источник


Ответы (2)


Другой разработчик смог указать мне правильное направление. В AnyPoint Studio на вкладке свойств компонента DataWeave / TransformMessage мне пришлось нажать кнопку для перехода к структуре вывода Scaffold. В результате был получен следующий результат (изменения синтаксиса выделены жирным шрифтом ниже). Изначально у меня создалось впечатление, что все строительные леса выполняются автоматически, когда я впервые перетаскиваю компонент в поток.

Измененный синтаксис:

                ns1#Xml: "test1",
                ns1#Xslt: "test2"

Строительные леса целиком:

%dw 1.0
%output application/xml
%namespace ns0 http://tempuri.org/
---
//Some output fields where skipped as the structure is too deep (more than 2 levels).
//To add missing fields click on the scaffold icon (second on the toolbar).
{
    ns0#Transform: {
        ns0#transformationData: {
            ns1#Xml: "test1",
            ns1#Xslt: "test2"
        }
    }
}

Нажмите здесь, чтобы получить кнопку Scaffold снимок экрана

person Josh Calhoun    schedule 14.10.2015

Да, после настройки WSDL вы можете перетащить Data Weave, а затем щелкнуть по каркасу, он сгенерирует для вас подходящую структуру.

введите здесь описание изображения

person Utsav    schedule 25.10.2015