обработка ответов xml от httpclient в политике javascript

У меня есть серверная веб-служба SOAP, которая имеет два метода: getCustomerByPhoneNumber и getOrderByCustomerId. У меня есть требование создать конечную точку apigee json для получения последнего заказа клиента, который должен принимать номер телефона в качестве входных данных.

Это означает, что мне придется создать конечную точку API и ресурс, указывающий на метод SOAP getOrderByCustomerId. Создайте внутренний прокси-вызов (предпочтительно политику javascript и используйте прокси-объект httpClient) для вызова метода SOAP getCustomerByPhoneNumber, чтобы получить идентификатор клиента и передать его в метод конечной точки getOrderByCustomerId. Меня беспокоит то, как обрабатывать ответ SOAP от метода getCustomerByPhoneNumber!? если это JSON, очень легко написать логику для чтения значений из кода javascript.

Как я могу легко разобрать ответ xml/soap в javascript или преобразовать xml в JSON в javascript, чтобы прочитать ответ как объект?

Или, в качестве другой альтернативы, я должен преобразовать весь мой метод SOAP в методы REST, а кумулятивный метод оболочки должен вызывать преобразованный метод REST (в прокси-сервере вызова) вместо прямого вызова метода SOAP.

Любые идеи?


person user3267925    schedule 08.07.2014    source источник


Ответы (1)


Apigee использует E4X, который добавляет поддержку XML (см.: http://apigee.com/docs/api-services/content/javascript-object-model). В приведенном ниже примере показано, как можно работать с ответом SOAP. Это то, что я быстро собрал, используя пример мыльного сообщения из w3schools.

Пример ответного сообщения SOAP:

<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  <soap:Body xmlns:m="http://www.example.org/stock">
    <m:m:GetStockPriceResponse>
      <m:Price>34.5</m:Price>
    </m:m:GetStockPriceResponse>
  </soap:Body>
</soap:Envelope>

Пример JavaScript в Apigee:

var mockResponse ='<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"><soap:Body xmlns:m="http://www.example.org/stock"><m:GetStockPriceResponse><m:Price>34.5</m:Price></m:GetStockPriceResponse></soap:Body></soap:Envelope>';

var soap = new Namespace('http://www.w3.org/2001/12/soap-envelope');
var m = new Namespace('http://www.example.org/stock');
var xmlObj = new XML (mockResponse);

var stockPrice = xmlObj.soap::Body.m::GetStockPriceResponse.m::Price;


response.content.status = 200;
response.content.status.message = 'OK';
response.headers['content-type'] = 'text/plain';
response.content = 'stockPrice: ' + stockPrice;

Оставляет вам ответ типа:

HTTP/1.1 200 OK
content-type: text/plain
Content-Length: 16

stockPrice: 34.5
person Michael Russo    schedule 09.07.2014