pjs/extensions/webservices/uddi/UDDIDecode.js

1345 строки
48 KiB
JavaScript
Executable File

/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the UDDI Inquiry API
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2003
* the Initial Developer. All Rights Reserved.
*
* Contributor(s): Harish Dhurvasula <harishd@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
//
// This whole file is the UDDI Decoder class. It's purpose is to decode from a
// DOM document the different types returned by UDDI servers. It returns the
// proper types based on the API and the uddi.xsd file available at
// http://www.uddi.org. The types are defined in js in UDDITypes.js
//
function UDDIDecoder()
{
this.debug = true;
this.verbose = true;
}
UDDIDecoder.prototype =
{
debug : null,
verbose : null,
//-----------------------------------------------------------------------------
// Helper methods
//-----------------------------------------------------------------------------
getChildElementByName : function (aName, aParent)
{
var node = aParent.firstChild;
while (node) {
if (node.nodeType == Node.ELEMENT_NODE &&
node.nodeName === (aName))
return node;
node = node.nextSibling;
}
return null;
},
getChildElementsByName : function (aName, aParent)
{
var rv = null;
var node = aParent.firstChild;
while (node) {
if (node.nodeType == Node.ELEMENT_NODE &&
node.nodeName === (aName)) {
if (!rv)
rv = new Array();
rv.push(node);
}
node = node.nextSibling;
}
return rv;
},
//-----------------------------------------------------------------------------
// UDDI Inquiry API find_xx return type decoders
//-----------------------------------------------------------------------------
/* also called by get_xx method */
decodeBindingDetail : function (aDocument)
{
// the BindingDetail should be the first child of the SOAP Body
var bindingDetailElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!bindingDetailElement) {
if (this.verbose)
logUDDIError("No BindingDetail element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBindingDetail()");
return null;
}
var bindingDetail = new BindingDetail();
// set attributes - only truncated is *optional*
bindingDetail.generic = bindingDetailElement.getAttribute("generic");
bindingDetail.operator = bindingDetailElement.getAttribute("operator");
bindingDetail.truncated = bindingDetailElement.getAttribute("truncated");
// populate the *optional* BindingTemplate array
var bindTemplList = this.getChildElementsByName("bindingTemplate", bindingDetailElement);
if (bindTemplList)
bindingDetail.bindingTemplates = this.decodeBindingTemplateArray(bindTemplList);
// check for presence of required fields
if (!bindingDetail.generic ||
!bindingDetail.operator) {
logUDDIError("BindingDetail missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBindingDetail()");
return null;
}
return bindingDetail;
},
/* */
decodeBusinessList : function (aDocument)
{
// the BusinessList should be the first child of the SOAP Body
var busListElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!busListElement) {
logUDDIError("No BusinessList element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessList()");
return null;
}
var busList = new BusinessList();
// set attributes - only truncated is *optional*
busList.generic = busListElement.getAttribute("generic");
busList.operator = busListElement.getAttribute("operator");
busList.truncated = busListElement.getAttribute("truncated");
// populate *required* BusinessInfo array
var busInfosElement = this.getChildElementByName("businessInfos", busListElement);
var busInfoList = this.getChildElementsByName("businessInfo", busInfosElement);
var length = busInfoList ? busInfoList.length : 0;
if (length > 0) {
busList.businessInfos = new Array(length);
for (var i = 0; i < length; i++)
busList.businessInfos[i] = this.decodeBusinessInfo(busInfoList[i]);
}
// check for presence of required fields
if (!busList.generic ||
!busList.operator ||
!busList.businessInfos) {
logUDDIError("BusinessList missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessList()");
return null;
}
return busList;
},
/* */
decodeRelatedBusinessesList : function (aDocument)
{
// the RelatedBusinessList should be the first child of the SOAP Body
var relBusListElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!relBusListElement) {
logUDDIError("No RelatedBusinessesList element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeRelatedBusinessesList()");
return null;
}
var relBusList = new RelatedBusinessesList();
// set attributes - only truncated is *optional*
relBusList.generic = relBusListElement.getAttribute("generic");
relBusList.operator = relBusListElement.getAttribute("operator");
relBusList.truncated = relBusListElement.getAttribute("truncated");
// set *required* BusinessKey
relBusList.businessKey = this.getChildElementByName("businessKey", relBusListElement).firstChild.nodeValue;
// populate RelatedBusinessInfo Array - *optional*, but the RBInfos _tag_ is *required*
var relBusInfosElement = this.getChildElementsByName("relatedBusinessInfos", relBusListElement);
if (!relBusInfosElement) {
logUDDIWarning("RelatedBusinessesList missing required data member. Bad UDDI Response from server. Continuing.", "UDDIDecode.js", "decodeRelatedBusinessesList()");
}
var relBusInfoList = this.getChildElementsByName("relatedBusinessInfo", relBusInfosElement);
var length = relBusInfoList ? relBusInfoList.length : 0;
if (length > 0) {
relBusList.relatedBusinessInfos = new Array(length);
for (var i = 0; i < length; i++)
relBusList.relatedBusinessInfos[i] = this.decodeRelatedBusinessInfo(relBusInfoList[i]);
}
// check for presence of required fields
if (!relBusList.generic ||
!relBusList.operator ||
!relBusList.businessKey) {
logUDDIError("RelatedBusinessesList missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeRelatedBusinessesList()");
return null;
}
return relBusList;
},
/* */
decodeServiceList : function (aDocument)
{
// the ServiceList should be the first child of the SOAP Body
var serviceListElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!serviceListElement) {
logUDDIError("No ServiceList element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeServiceList()");
return null;
}
var serviceList = new ServiceList();
// set attributes - only truncated is *optional*
serviceList.generic = serviceListElement.getAttribute("generic");
serviceList.operator = serviceListElement.getAttribute("operator");
serviceList.truncated = serviceListElement.getAttribute("truncated");
// populate *required* ServiceInfo array
var serviceInfosElement= this.getChildElementByName("serviceInfos", serviceListElement);
var serviceInfoList = this.getChildElementsByName("serviceInfo", serviceInfosElement);
var length = serviceInfoList ? serviceInfoList.length : 0;
if (length > 0) {
serviceList.serviceInfos = new Array(length);
for (var i = 0; i < length; i++)
serviceList.serviceInfos[i] = this.decodeServiceInfo(serviceInfoList[i]);
}
// check for presence of required fields
if (!serviceList.generic ||
!serviceList.operator ||
!serviceList.serviceInfos) {
logUDDIError("ServiceList missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeServiceList()");
return null;
}
return serviceList;
},
/* */
decodeTModelList : function (aDocument)
{
// the tModelList should be the first child of the SOAP Body
var tModelListElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!tModelListElement) {
logUDDIError("No TModelList element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeTModelList()");
return null;
}
var tModelList = new TModelList();
// set attributes - only truncated is *optional*
tModelList.generic = tModelListElement.getAttribute("generic");
tModelList.operator = tModelListElement.getAttribute("operator");
tModelList.truncated = tModelListElement.getAttribute("truncated");
// populate *required* TModelInfo array
var tModelInfosElement = this.getChildElementByName("tModelInfos", tModelListElement);
var tModelInfoList = this.getChildElementsByName("tModelInfo", tModelInfosElement);
var length = tModelInfoList ? tModelInfoList.length : 0;
if (length > 0) {
tModelList.tModelInfos = new Array(length);
for (var i = 0; i < length; i++)
tModelList.tModelInfos[i] = this.decodeTModelInfo(tModelInfoList[i]);
}
// check for presence of required fields
if (!tModelList.generic ||
!tModelList.operator ||
!tModelList.tModelInfos) {
logUDDIError("TModelList missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeTModelList()");
return null;
}
return tModelList;
},
//-----------------------------------------------------------------------------
// UDDI Inquiry API get_xx return type decoders
//-----------------------------------------------------------------------------
/* */
decodeBusinessDetail : function (aDocument)
{
// the BusinessDetail should be the first child of the SOAP Body
var busDetailElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!busDetailElement) {
logUDDIError("No BusinessDetail element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessDetail()");
return null;
}
var busDetail = new BusinessDetail();
// set attributes - only truncated is *optional*
busDetail.generic = busDetailElement.getAttribute("generic");
busDetail.operator = busDetailElement.getAttribute("operator");
busDetail.truncated = busDetailElement.getAttribute("truncated");
// populate *optional* BusinessEntity array
var busEntityList = this.getChildElementsByName("businessEntity", busDetailElement);
var length = busEntityList ? busEntityList.length : 0;
if (length > 0) {
busDetail.businessEntities = new Array(length);
for (var i = 0; i < length; i++)
busDetail.businessEntities[i] = this.decodeBusinessEntity(busEntityList[i]);
}
// check for presence of required fields
if (!busDetail.generic ||
!busDetail.operator) {
logUDDIError("BusinessDetail missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessDetail()");
return null;
}
return busDetail;
},
/* */
decodeBusinessDetailExt : function (aDocument)
{
// the BusinessDetailExt should be the first child of the SOAP Body
var busDetailExtElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!busDetailExtElement) {
logUDDIError("No BusinessDetailExt element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessDetailExt()");
return null;
}
var busDetailExt = new BusinessDetailExt();
// set attributes - only truncated is *optional*
busDetailExt.generic = busDetailExtElement.getAttribute("generic");
busDetailExt.operator = busDetailExtElement.getAttribute("operator");
busDetailExt.truncated = busDetailExtElement.getAttribute("truncated");
// populate *required* BusinessEntity array
var busEntityExtList = this.getChildElementsByName("businessEntityExt", busDetailExtElement);
var length = busEntityExtList ? busEntityExtList.length : 0;
if (length > 0) {
busDetailExt.businessEntityExts = new Array(length);
for (var i = 0; i < length; i++)
busDetailExt.businessEntityExts[i] = this.decodeBusinessEntityExt(busEntityExtList[i]);
}
// check for presence of required fields
if (!busDetailExt.generic ||
!busDetailExt.operator ||
!busDetailExt.businessEntityExts) {
logUDDIError("BusinessDetailExt missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessDetailExt()");
return null;
}
return busDetailExt;
},
/* */
decodeServiceDetail : function (aDocument)
{
// the ServiceDetail should be the first child of the SOAP Body
var serviceDetailElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!serviceDetailElement) {
logUDDIError("No ServiceDetail element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeServiceDetail()");
return null;
}
var serviceDetail = new ServiceDetail();
// set attributes - only truncated is *optional*
serviceDetail.generic = serviceDetailElement.getAttribute("generic");
serviceDetail.operator = serviceDetailElement.getAttribute("operator");
serviceDetail.truncated = serviceDetailElement.getAttribute("truncated");
// populate *optional* BusinessService array
var busServiceList = this.getChildElementsByName("businessService", serviceDetailElement);
if (busServiceList)
serviceDetail.businessServices = this.decodeBusinessServiceArray(busServiceList);
// check for presence of required fields
if (!serviceDetail.generic ||
!serviceDetail.operator) {
logUDDIError("ServiceDetail missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeServiceDetail()");
return null;
}
return serviceDetail;
},
/* */
decodeTModelDetail : function (aDocument)
{
// the TModelDetail should be the first child of the SOAP Body
var tModelDetailElement = this.getChildElementByName("Body", aDocument.documentElement).firstChild;
if (!tModelDetailElement) {
logUDDIError("No TModelDetail element to decode. Bad UDDI Response from server.", "UDDIDecode.js", "decodeTModelDetail()");
return null;
}
var tModelDetail = new TModelDetail();
// set attributes - only truncated is *optional*
tModelDetail.generic = tModelDetailElement.getAttribute("generic");
tModelDetail.operator = tModelDetailElement.getAttribute("operator");
tModelDetail.truncated = tModelDetailElement.getAttribute("truncated");
// populate *required* TModel array
var tModelList = this.getChildElementsByName("tModel", tModelDetailElement);
var length = tModelList ? tModelList.length : 0;
if (length > 0) {
tModelDetail.tModels = new Array(length);
for (var i = 0; i < length; i++)
tModelDetail.tModels[i] = this.decodeTModel(tModelList[i]);
}
// check for presence of required fields
if (!tModelDetail.generic ||
!tModelDetail.operator ||
!tModelDetail.tModels) {
logUDDIError("TModelDetail missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeTModelDetail()");
return null;
}
return tModelDetail;
},
//-----------------------------------------------------------------------------
// Decoding of UDDI Spec types - alpha sort
//-----------------------------------------------------------------------------
/* */
decodeAccessPoint : function (aAccessPointElement)
{
if (!aAccessPointElement) {
logUDDIWarning("No AccessPoint element.", "UDDIDecode.js", "decodeAccessPoint()");
return null;
}
var accessPoint = new AccessPoint();
// set *required* attribute
accessPoint.urlType = aAccessPointElement.getAttribute("URLType");
// set *required* stringValue
accessPoint.stringValue = aAccessPointElement.firstChild.nodeValue;
// check for presence of required fields
if (!accessPoint.urlType || !accessPoint.stringValue) {
logUDDIError("AccessPoint missing a required field. Bad UDDI Response", "UDDIDecode.js", "decodeAccess()");
return null;
}
return accessPoint;
},
/* */
decodeAddress : function (aAddressElement)
{
if (!aAddressElement) {
logUDDIWarning("No Address element.", "UDDIDecode.js", "decodeAddress()");
return null;
}
var address = new Address();
// set attributes (all optional)
address.useType = aAddressElement.getAttribute("useType");
address.sortCode = aAddressElement.getAttribute("sortCode");
address.tModelKey = aAddressElement.getAttribute("tModelKey");
// populate the *optional* AddressLine array
var addLineList = this.getChildElementsByName("addressLine", aAddressElement);
var length = addLineList ? addLineList.length : 0;
if (length > 0) {
address.addressLines = new Array(length);
for (var i = 0; i < length; i++)
address.addressLines[i] = this.decodeAddressLine(addLineList[i]);
}
// no required fields, just return
return address;
},
/* */
decodeAddressLine : function (aAddLineElement)
{
if (!aAddLineElement) {
logUDDIWarning("No AddressLine element.", "UDDIDecode.js", "decodeAddressLine()");
return null;
}
var addLine = new AddressLine();
// set attributes (all optional)
addLine.keyName = aAddLineElement.getAttribute("keyName");
addLine.keyValue = aAddLineElement.getAttribute("keyValue");
// set *required* string value
addLine.stringValue = aAddLineElement.firstChild.nodeValue;
// check for presence of required fields
if (!addLine.stringValue) {
logUDDIError("AddressLine missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeAddressLine()");
return null;
}
return addLine;
},
/* will return an empty array */
decodeBindingTemplateArray : function (aBindTemplElList)
{
var length = aBindTemplElList ? aBindTemplElList.length : 0;
var bindTemplArray = new Array(length);
if (length > 0) {
for (var i = 0; i < length; i++)
bindTemplArray[i] = this.decodeBindingTemplate(aBindTemplElList[i]);
}
else
logUDDIWarning("BindingTemplate List is null or empty.", "UDDIDecode.js", "decodeBindingTemplateArray()");
return bindTemplArray;
},
/* */
decodeBindingTemplate : function (aBindingTemplateElement)
{
if (!aBindingTemplateElement) {
logUDDIWarning("No BindingTemplate element.", "UDDIDecode.js", "decodeBindingTemplate()");
return null;
}
var bindingTemplate = new BindingTemplate();
// set attributes - bindingKey is *required*
bindingTemplate.serviceKey = aBindingTemplateElement.getAttribute("serviceKey");
bindingTemplate.bindingKey = aBindingTemplateElement.getAttribute("bindingKey");
// set *optional* Description array
var descriptionList = this.getChildElementsByName("description", aBindingTemplateElement);
bindingTemplate.descriptions = this.decodeDescriptionArray(descriptionList);
// set *required* AccessPoint
var accessPointElement = this.getChildElementByName("accessPoint", aBindingTemplateElement);
bindingTemplate.accessPoint = this.decodeAccessPoint(accessPointElement);
// set *required* HostingRedirector
var hostingRedirectorElement = this.getChildElementByName("hostingRedirector", aBindingTemplateElement);
bindingTemplate.hostingRedirector = this.decodeHostingRedirector(hostingRedirectorElement);
// set *required* TModelInstanceDetails (array of TModelInstanceInfo objects) (can be empty)
var tModelInstanceDetailsElement = this.getChildElementByName("tModelInstanceDetails", aBindingTemplateElement);
if (tModelInstanceDetailsElement) {
var tModelInstanceInfoList = this.getChildElementsByName("tModelInstanceInfo", tModelInstanceDetailsElement);
var length = tModelInstanceInfoList ? tModelInstanceInfoList.length : 0;
bindingTemplate.tModelInstanceDetails = new Array(length);
if (length > 0) {
for (var i = 0; i < length; i++)
bindingTemplate.tModelInstanceDetails[i] = this.decodeTModelInstanceInfo(tModelInstanceInfoList[i]);
}
}
// check for presence of required fields
if (!bindingTemplate.bindingKey ||
(!bindingTemplate.accessPoint && !bindingTemplate.hostingRedirector) || // choice
!bindingTemplate.tModelInstanceDetails) {
logUDDIError("BindingTemplate missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBindingTemplate()");
return null;
}
return bindingTemplate;
},
/* */
decodeBusinessEntity : function (aBusEntityElement)
{
if (!aBusEntityElement) {
logUDDIWarning("No BusinessEntity element.", "UDDIDecode.js", "decodeBusinessEntity()");
return null;
}
var busEntity = new BusinessEntity();
// set attributes - businessKey is *required*
busEntity.businessKey = aBusEntityElement.getAttribute("businessKey");
busEntity.operator = aBusEntityElement.getAttribute("operator");
busEntity.authorizedName = aBusEntityElement.getAttribute("authorizedName");
// populate *optional* DiscoveryURL array (can NOT be empty)
var discURLsElement = this.getChildElementByName("discoveryURLs", aBusEntityElement);
if (discURLsElement) {
var discURLList = this.getChildElementsByName("discoveryURL", discURLsElement);
var length = discURLList ? discURLList.length : 0;
if (length > 0) {
busEntity.discoveryURLs = new Array(length);
for (var i = 0; i < length; i++)
busEntity.discoveryURLs[i] = this.decodeDiscoveryURL(discURLList[i]);
}
}
// populate *required* Name array
var nameList = this.getChildElementsByName("name", aBusEntityElement);
busEntity.names = this.decodeNameArray(nameList);
// populate *optional* Description array
var descriptionList = this.getChildElementsByName("description", aBusEntityElement);
busEntity.descriptions = this.decodeDescriptionArray(descriptionList);
// populate *optional* Contact array (can NOT be empty)
var contactsElement = this.getChildElementByName("contacts", aBusEntityElement);
if (contactsElement) {
var contactList = this.getChildElementsByName("contact", contactsElement);
length = contactList ? contactList.length : 0;
if (length > 0) {
busEntity.contacts = new Array(length);
for (var i = 0; i < length; i++)
busEntity.contacts[i] = this.decodeContact(contactList[i]);
}
}
// populate *optional* BusinessServices array (can be empty)
var businessServicesElement = this.getChildElementByName("businessServices", aBusEntityElement);
if (businessServicesElement) {
var businessServiceElementList = this.getChildElementsByName("businessService", businessServicesElement);
busEntity.businessServices = this.decodeBusinessServiceArray(businessServiceElementList);
}
// decode *optional* IdentifierBag
var identBagElement = this.getChildElementByName("identifierBag", aBusEntityElement);
busEntity.identifierBag = this.decodeIdentifierBag(identBagElement);
// decode *optional* CategoryBag
var catBagElement = this.getChildElementByName("categoryBag", aBusEntityElement);
busEntity.categoryBag = this.decodeCategoryBag(catBagElement);
// check for presence of required fields
if (!busEntity.names ||
!busEntity.businessKey) {
logUDDIError("BusinessEntity missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessEntity()");
return null;
}
return busEntity;
},
/* */
decodeBusinessEntityExt : function (aBusinessEntityExtElement)
{
if (!aBusinessEntityExtElement) {
logUDDIWarning("No BusinessEntityExt element.", "UDDIDecode.js", "decodeBusinessEntityExt()");
return null;
}
var busEntityExt = new BusinessEntityExt();
// set *required* BusinessEntity
var busEntityElement = this.getChildElementByName("businessEntity", aBusinessEntityExtElement);
busEntityExt.businessEntity = this.decodeBusinessEntity(busEntityElement);
// set *optional* extension array of XML elements
var sibling = busEntityElement.nextSibling;
if (sibling) {
busDetailExt.extensions = new Array();
while (sibling) {
busDetailExt.extensions.push(sibling);
sibling = sibling.nextSibling;
}
}
if (!busEntityExt.businessEntity) {
logUDDIError("BusinessEntityExt missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessEntityExt()");
return null;
}
return busEntityExt;
},
/* */
decodeBusinessInfo : function (aBusinessInfoElement)
{
if (!aBusinessInfoElement) {
logUDDIWarning("No BusinessInfo element.", "UDDIDecode.js", "decodeBusinessInfo()");
return null;
}
var busInfo = new BusinessInfo();
// set *required* attribute
busInfo.businessKey = aBusinessInfoElement.getAttribute("businessKey");
// set *required* Name array
var nameList = this.getChildElementsByName("name", aBusinessInfoElement);
busInfo.names = this.decodeNameArray(nameList);
// set *optional* Description array
var descriptionList = this.getChildElementsByName("description", aBusinessInfoElement);
busInfo.descriptions = this.decodeDescriptionArray(descriptionList);
// populate *required* ServiceInfo array (can be empty)
var serviceInfosElement = this.getChildElementByName("serviceInfos", aBusinessInfoElement);
if (serviceInfosElement) {
var serviceInfoList = this.getChildElementsByName("serviceInfo", serviceInfosElement);
var length = serviceInfoList ? serviceInfoList.length : 0;
busInfo.serviceInfos = new Array(length);
if (length > 0) {
for (var i = 0; i < length; i++)
busInfo.serviceInfos[i] = this.decodeServiceInfo(serviceInfoList[i]);
}
}
// check for presence of required fields
if (!busInfo.businessKey ||
!busInfo.names ||
!busInfo.serviceInfos) {
logUDDIError("BusinessInfo missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessInfo()");
return null;
}
return busInfo;
},
// will return an empty array if arg is null/empty
decodeBusinessServiceArray : function (aBusinessServiceElementList)
{
var length = aBusinessServiceElementList ? aBusinessServiceElementList.length : 0;
var businessServiceArray = new Array(length);
if (length > 0) {
for (var i = 0; i < length; i++)
businessServiceArray [i] = this.decodeBusinessService(aBusinessServiceElementList[i]);
}
else
logUDDIMessage("DescriptionArray is empty.");
return businessServiceArray;
},
/* */
decodeBusinessService : function (aBusServiceElement)
{
if (!aBusServiceElement) {
logUDDIWarning("No BusinessService element.", "UDDIDecode.js", "decodeBusinessService()");
return null;
}
var busService = new BusinessService();
// set attributes - only serviceKey is *required*
busService.serviceKey = aBusServiceElement.getAttribute("serviceKey");
busService.businessKey = aBusServiceElement.getAttribute("businessKey");
// populate *optional* Name array
var nameList = this.getChildElementsByName("name", aBusServiceElement);
busService.names = this.decodeNameArray(nameList);
// populate *optional* Description array
var descList = this.getChildElementsByName("description", aBusServiceElement);
busService.descriptions = this.decodeDescriptionArray(descList);
// populate *optional* BindingTemplate array (can be empty)
var bindTemplsElement = this.getChildElementByName("bindingTemplates", aBusServiceElement);
if (bindTemplsElement) {
var bindTemplList = this.getChildElementsByName("bindingTemplate", bindTemplsElement);
busService.bindingTemplates = this.decodeBindingTemplateArray(bindTemplList);
}
// set the *optional* CategoryBag
var catBagElement = this.getChildElementsByName("categoryBag", aBusServiceElement);
busService.categoryBag = this.decodeCategoryBag(catBagElement);
// check for presence of required fields
if (!busService.serviceKey) {
logUDDIError("BusinessService missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeBusinessService()");
return null;
}
return busService;
},
/* */
decodeCategoryBag : function (aCategoryBagElement)
{
if (!aCategoryBagElement) {
logUDDIWarning("No CategoryBag element.", "UDDIDecode.js", "decodeCategoryBag()");
return null;
}
var categoryBag = new CategoryBag();
// populate the *required* KeyedReference array
var keyedReferenceList = this.getChildElementsByName("keyedReference", aCategoryBagElement);
categoryBag.keyedReferences = this.decodeKeyedRefArray(keyedReferenceList);
// check for presence of required field
if (!categoryBag.keyedReferences) {
logUDDIError("CategoryBag missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeCategoryBag()");
return null;
}
return categoryBag;
},
/* */
decodeContact : function (aContactElement)
{
if (!aContactElement) {
logUDDIWarning("No Contact element.", "UDDIDecode.js", "decodeContact()");
return null;
}
var contact = new Contact();
// set *optional* attribute
contact.useType = aContactElement.getAttribute("useType");
// populate *optional* Description array
var descriptionList = this.getChildElementsByName("description", aContactElement);
contact.descriptions = this.decodeDescriptionArray(descriptionList);
// set *required* personName - string
contact.personName = this.getChildElementByName("personName", aContactElement).firstChild.nodeValue;
// populate *optional* Phone array
var phoneList = this.getChildElementsByName("phone", aContactElement);
var length = phoneList ? phoneList.length : 0;
if (length > 0) {
contact.phones = new Array(length);
for (var i = 0; i < length; i++)
contact.phones[i] = this.decodePhone(phoneList[i]);
}
// populate *optional* Email array
var emailList = this.getChildElementsByName("email", aContactElement);
length = emailList ? emailList.length : 0;
if (length > 0) {
contact.emails = new Array(length);
for (var i = 0; i < length; i++)
contact.emails[i] = this.decodeEmail(emailList[i]);
}
// populate *optional* Address array
var addressList = this.getChildElementsByName("address", aContactElement);
length = addressList ? addressList.length : 0;
if (length > 0) {
contact.addresses = new Array(length);
for (var i = 0; i < length; i++)
contact.addresses[i] = this.decodeAddress(addressList[i]);
}
// check for presence of required field
if (!contact.personName) {
logUDDIError("Contact missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeContact()");
return null;
}
return contact;
},
/* */
// will NOT return an empty array
decodeDescriptionArray : function (aDescElementList)
{
var length = aDescElementList ? aDescElementList.length : 0;
if (length > 0) {
var descArray = new Array(length);
for (var i = 0; i < length; i++)
descArray[i] = this.decodeDescription(aDescElementList[i]);
return descArray;
}
logUDDIMessage("DescriptionArray is empty.");
return null;
},
/* */
decodeDescription : function (aDescriptionElement)
{
if (!aDescriptionElement) {
logUDDIWarning("No Description element.", "UDDIDecode.js", "decodeDescription()");
return null;
}
var desc = new Description();
// set *optional* attribute
desc.lang = aDescriptionElement.getAttribute("lang");
// set *required* string value
desc.stringValue = aDescriptionElement.firstChild.nodeValue;
// check for presence of required field
if (!desc.stringValue) {
logUDDIError("Description missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeDescription()");
return null;
}
return desc;
},
/* */
decodeDiscoveryURL : function (aDiscoveryURLElement)
{
if (!aDiscoveryURLElement) {
logUDDIWarning("No DiscoveryURL element.", "UDDIDecode.js", "decodeDiscoveryURL()");
return null;
}
var discURL = new DiscoveryURL();
// set *required* attribute
discURL.useType = aDiscoveryURLElement.getAttribute("useType");
// set *required* string value
discURL.stringValue = aDiscoveryURLElement.firstChild.nodeValue;
// check for presence of required field
if (!discURL.useType ||
!discURL.stringValue) {
logUDDIError("DiscoveryURL missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeDiscoveryURL()");
return null;
}
return discURL;
},
/* */
decodeEmail : function (aEmailElement)
{
if (!aEmailElement) {
logUDDIWarning("No Email element.", "UDDIDecode.js", "decodeEmails()");
return null;
}
var email = new Email();
// set *optional* attribute
email.useType = aEmailElement.getAttribute("useType");
// set *required* string value
email.stringValue = aEmailElement.firstChild.nodeValue;
// check for presence of required field
if (!email.stringValue) {
logUDDIError("Email missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeEmail()");
return null;
}
return email;
},
/* */
decodeHostingRedirector : function (aHostingRedirectorElement)
{
if (!aHostingRedirectorElement) {
logUDDIWarning("No HostingRedirector element.", "UDDIDecode.js", "decodeHostingRedirector()");
return null;
}
var hostRedir = new HostingRedirector();
// set *required* attribute
hostRedir.bindingKey = aHostingRedirector.getAttribute("bindingKey");
// check for presence of required field
if (!hostRedir.bindingKey) {
logUDDIError("HostingRedirector missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeHostingRedirector()");
return null;
}
return hostRedir;
},
/* */
decodeIdentifierBag : function (aIdentifierBagElement)
{
if (!aIdentifierBagElement) {
logUDDIWarning("No IdentifierBag element.", "UDDIDecode.js", "decodeIdentifierBag()");
return null;
}
var identifierBag = new IdentifierBag();
// populate the *required* KeyedReference array
var keyedReferenceList = this.getChildElementsByName("keyedReference", aIdentifierBagElement);
identifierBag.keyedReferences = this.decodeKeyedRefArray(keyedReferenceList);
// check for presence of required field
if (!identifierBag.keyedReferences) {
logUDDIError("IdentifierBag missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeIdentifierBag()");
return null;
}
return identifierBag;
},
/* */
decodeInstanceDetails : function (aInstanceDetailsElement)
{
if (!aInstanceDetailsElement) {
logUDDIWarning("No InstanceDetails element.", "UDDIDecode.js", "decodeInstanceDetails()");
return null;
}
var instanceDetails = new InstanceDetails();
// populate *optional* Description array
var descriptionList = this.getChildElementsByName("description", aInstanceDetailsElement);
instanceDetails.descriptions = this.decodeDescriptionArray(descriptionList);
// set *optional* OverviewDoc
var overviewDocElement = this.getChildElementByName("overviewDoc", aInstanceDetailsElement);
instanceDetails.overviewDoc = this.decodeOverviewDoc(overviewDocElement);
// set *optional* InstanceParms - string
var instanceParmsElement = this.getChildElementByName("instanceParms", aInstanceDetailsElement);
if (instanceParmsElement)
instanceDetails.instanceParms = instanceParmsElement.firstChild.nodeValue;
// no required fields, just return
return instanceDetails;
},
/* */
// will NOT return an empty array - all KeyedReference arrays are currently *required*
decodeKeyedRefArray : function (aKRElementList)
{
var length = aKRElementList ? aKRElementList.length : 0;
if (length > 0) {
var krArray = new Array(length);
for (var i = 0; i < length; i++)
krArray[i] = this.decodeKeyedReference(aKRElementList[i]);
return krArray;
}
logUDDIWarning("KeyedReference List is null or empty.", "UDDIDecode.js", "decodeKeyedRefArray()");
return null;
},
/* */
decodeKeyedReference : function (aKRElement)
{
if (!aKRElement) {
logUDDIWarning("No KeyedReference element.", "UDDIDecode.js", "decodeKeyedReference()");
return null;
}
var keyedRef = new KeyedReference();
// set attributes - keyValue is *required*
keyedRef.tModelKey = aKRElement.getAttribute("tModelKey");
keyedRef.keyName = aKRElement.getAttribute("keyName");
keyedRef.keyValue = aKRElement.getAttribute("keyValue");
// check for presence of required field
if (!keyedRef.keyValue) {
logUDDIError("KeyedReference missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeKeyedReference()");
return null;
}
return keyedRef;
},
// does NOT return an empty array!
/* */
decodeNameArray : function (aNameElementList)
{
var length = aNameElementList ? aNameElementList.length : 0;
if (length > 0) {
var nameArray = new Array(length);
for (var i = 0; i < length; i++)
nameArray[i] = this.decodeName(aNameElementList[i]);
return nameArray;
}
logUDDIWarning("Name List is null or empty.", "UDDIDecode.js", "decodeNameArray()");
return null;
},
/* */
decodeName : function (aNameElement)
{
if (!aNameElement) {
logUDDIWarning("No Name element.", "UDDIDecode.js", "decodeName()");
return null;
}
var name = new Name();
// set *optional* attribute
name.lang = aNameElement.getAttribute("lang");
// set *required* string value
name.stringValue = aNameElement.firstChild.nodeValue;
// check for the presence of required field
if (!name.stringValue) {
logUDDIError("Name missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeName()");
return null;
}
return name;
},
/* */
decodeOverviewDoc : function (aOverviewDocElement)
{
if (!aOverviewDocElement) {
logUDDIWarning("No OverviewDoc element.", "UDDIDecode.js", "decodeOverviewDoc()");
return null;
}
var overviewDoc = new OverviewDoc();
// populate *optional* Description array
var descriptionList = this.getChildElementsByName("description", aOverviewDocElement);
overviewDoc.descriptions = this.decodeDescriptionArray(descriptionList);
// set *optional* OverviewURL strings
var overviewURLElement = this.getChildElementByName("overviewURL", aOverviewDocElement);
if (overviewURLElement)
overviewDoc.overviewURL = overviewURLElement.firstChild.nodeValue;
// no required fields, just return
return overviewDoc;
},
/* */
decodePhone : function (aPhoneElement)
{
if (!aPhoneElement) {
logUDDIWarning("No Phone element.", "UDDIDecode.js", "decodePhone()");
return null;
}
var phone = new Phone();
// set *optional* attribute
phone.useType = aPhoneElement.getAttribute("useType");
// set *required* string value
phone.strinValue = aPhoneElement.firstChild.nodeValue;
// check for presence of required field
if (!phone.stringValue) {
logUDDIError("Phone missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodePhone()");
return null;
}
return phone;
},
/* */
decodeRelatedBusinessInfo : function (aRelatedBusinessInfoElement)
{
if (!aRelatedBusinessInfoElement) {
logUDDIWarning("No RelatedBusinessInfo element.", "UDDIDecode.js", "decodeRelatedBusinessInfo()");
return null;
}
var relBusInfo = new RelatedBusinessInfo();
// set *required* businessKey
relBusInfo.businessKey = this.getChildElementByName("businessKey", aRelatedBusinessInfoElement).firstChild.nodeValue;
// populate *required* Names array
var nameList = this.getChildElementsByName("name", aRelatedBusinessInfoElement);
relBusInfo.names = this.decodeNameArray(nameList);
// populate *optional* Description array
var descList = this.getChildElementsByName("description", aRelatedBusinessInfoElement);
relBusInfo.descriptions = this.decodeDescriptionArray(descList);
// set *required* SharedRelationships array
var shRelsList = this.getChildElementsByName("sharedRelationships", aRelatedBusinessInfoElement);
var length = shRelsList ? shRelsList.length : 0;
if (length > 0 && length <= 2) {
relBusInfo.sharedRelationships = new Array(length);
for (var i = 0; i < length; i++)
relBusInfo.sharedRelationships[i] = this.decodeSharedRelationships(shRelsList[i]);
}
// check for presence of required fields
if (!relBusInfo.businessKey||
!relBusInfo.names ||
!relBusInfo.sharedRelationships) {
logUDDIError("RelatedBusinessInfo missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeRelatedBusinessInfo()");
return null;
}
return relBusInfo;
},
/* */
decodeServiceInfo : function (aServiceInfoElement)
{
if (!aServiceInfoElement) {
logUDDIWarning("No ServiceInfo element.", "UDDIDecode.js", "decodeServiceInfo()");
return null;
}
var serviceInfo = new ServiceInfo();
// set attributes - all are *required*
serviceInfo.serviceKey = aServiceInfoElement.getAttribute("serviceKey");
serviceInfo.businessKey = aServiceInfoElement.getAttribute("businessKey");
// set *optional* Name array
var nameList = this.getChildElementsByName("name", aServiceInfoElement);
serviceInfo.names = this.decodeNameArray(nameList);
// check for presence of required fields
if (!serviceInfo.serviceKey ||
!serviceInfo.businessKey) {
logUDDIError("ServiceInfo missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeServiceInfo()");
return null;
}
return serviceInfo;
},
/* */
decodeSharedRelationships : function (aSharedRelationshipsElement)
{
if (!aSharedRelationshipsElement) {
logUDDIWarning("No SharedRelationships element.", "UDDIDecode.js", "decodeSharedRelationships()");
return null;
}
var sharedRelationships = new SharedRelationships();
// set *required* attribute
sharedRelationships.direction = aSharedRelationshipsElement.getAttribute("direction");
// set *required* KeyedReference array
var keyedRefList = this.getChildElementsByName("keyedReference", aSharedRelationshipsElement);
sharedRelationships.keyedReferences = this.decodeKeyedRefArray(keyedRefList);
if (!sharedRelationships.direction ||
!sharedRelationships.keyedReferences) {
logUDDIError("SharedRelationships missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeSharedRelationships()");
return null;
}
return sharedRelationships;
},
/* */
decodeTModel : function (aTModelElement)
{
if (!aTModelElement) {
logUDDIWarning("No TModel element.", "UDDIDecode.js", "decodeTModel()");
return null;
}
var tModel = new TModel();
// set attributes - only tModelKey is *required*
tModel.tModelKey = aTModelElement.getAttribute("tModelKey");
tModel.operator = aTModelElement.getAttribute("operator");
tModel.authorizedName = aTModelElement.getAttribute("authorizedName");
// set *required* Name
tModel.name = this.getChildElementByName("name", aTModelElement).firstChild.nodeValue;
// populate *optional* Description array
var descList = this.getChildElementsByName("description", aTModelElement);
tModel.descriptions = this.decodeDescriptionArray(descList);
// populate *optional* OverviewDoc
var overviewDocElement = this.getChildElementByName("overviewDoc", aTModelElement);
tModel.overviewDoc = this.decodeDescriptionArray(overviewDocElement);
// populate *optional* IdentifierBag
var identBagElement = this.getChildElementByName("identifierBag", aTModelElement);
tModel.identifierBag = this.decodeIdentifierBag(identBagElement);
// populate *optional* CategoryBag
var catBagElement = this.getChildElementByName("categoryBag", aTModelElement);
tModel.categoryBag = this.decodeCategoryBag(catBagElement);
// check for presence of required fields
if (!tModel.name ||
!tModel.tModelKey) {
logUDDIError("TModel missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeTModel()");
return null;
}
return tModel;
},
/* */
decodeTModelInfo : function (aTModelInfoElement)
{
if (!aTModelInfoElement) {
logUDDIWarning("No TModelInfo element.", "UDDIDecode.js", "decodeTModelInfo()");
return null;
}
var tModelInfo = new TModelInfo();
// set *required* attribute
tModelInfo.tModelKey = aTModelInfoElement.getAttribute("tModelKey");
// set *required* Name
tModelInfo.name = this.getChildElementByName("name", aTModelInfoElement).firstChild.nodeValue;
// check for presence of required fields
if (!tModelInfo.tModelKey||
!tModelInfo.name) {
logUDDIError("TModelInfo missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeTModelInfo()");
return null;
}
return tModelInfo;
},
/* */
decodeTModelInstanceInfo : function (aTModelInstanceInfoElement)
{
if (!aTModelInstanceInfoElement) {
logUDDIWarning("No TModelInstanceInfo element.", "UDDIDecode.js", "decodeTModelInstanceInfo()");
return null;
}
var tModelInstanceInfo = new TModelInstanceInfo();
// set *required* attribute
tModelInstanceInfo.tModelKey = aTModelInstanceInfoElement.getAttribute("tModelKey");
// set *optional* Description array
var descList = this.getChildElementsByName("description", aTModelInstanceInfoElement);
tModelInstanceInfo.descriptions = this.decodeDescriptionArray(descList);
// set *optional* InstanceDetails
var instanceDetailsElement = this.getChildElementByName("instanceDetails", aTModelInstanceInfoElement);
tModelInstanceInfo.instanceDetails = this.decodeInstanceDetails(instanceDetailsElement);
// check for presence of required field
if (!tModelInstanceInfo.tModelKey) {
logUDDIError("TModelInstanceInfo missing required data member. Bad UDDI Response from server.", "UDDIDecode.js", "decodeTModelInstanceInfo()");
return null;
}
return tModelInstanceInfo;
}
}; // end of UDDIDecoder class