我有一个后端SOAP webservice,它有两个方法 - getCustomerByPhoneNumber和getOrderByCustomerId。我需要建立一个apigee json端点来获取客户的最新订单,该订单应该将电话号码作为输入。
这意味着,我将不得不创建一个API端点和一个指向SOAP方法getOrderByCustomerId的资源。构建内部调用代理(最好是javascript策略并使用httpClient代理对象)来调用SOAP方法getCustomerByPhoneNumber以获取客户ID并将customerId传递给端点方法getOrderByCustomerId。 我担心的是 - 如何处理方法getCustomerByPhoneNumber的SOAP响应!?如果它是JSON,它很容易编写逻辑来从javascript代码中读取值。
如何在javascript中轻松解析xml / soap响应或在javascript中将xml转换为JSON以像对象一样读取响应?
或者,作为另一种选择,我应该将所有SOAP方法转换为REST方法,而包装器累积方法应该调用转换后的REST方法(在callout代理中),而不是直接调用SOAP方法。
任何见解?
答案 0 :(得分:0)
Apigee使用E4X,它增加了对XML的支持(参见:http://apigee.com/docs/api-services/content/javascript-object-model)。下面的示例演示了如何使用SOAP响应。这是我使用来自w3schools的示例soap消息快速整理的内容。
示例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>
Apigee中的javascript示例:
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