Я вижу что-то очень странное, что происходит в приложении Flex, которое я поддерживаю.
Я прошел через это, удалив все вызовы trace () и заменив его вызовами в каркасе логов (используя встроенный mx.logging материал). После этого некоторый код XML-разбора неожиданно сломался, и я не могу понять, почему.
вот код:
private var loader:URLLoader; // created elsewhere
private function handleComplete(event:Event):void {
default xml namespace = com;
xml = XML(loader.data);
var response:XML = new XML(xml..raniResponse);
//now handles a null response object
if(xml && response.children().length() > 0) {
LOG.debug("Got response.");
var cityXML:XML = new XML(xml..city);
var stateXML:XML = new XML(xml..stateProv);
/* Some extra processing is done here */
}
}
С таким кодом, с этим вызовом LOG.debug (), я получаю следующую ошибку в строке cityXML:
TypeError: Error #1088: The markup in the document following the root element must be well-formed.
Если я закомментирую вызов LOG.debug (), он будет работать нормально.
Я подумал, что может быть какая-то странность с созданной мной пользовательской целью журнала, поэтому я удалил ее. В настоящее время единственная используемая цель - встроенная цель трассировки.
Кто-нибудь знает, что происходит? Почему вызов журнала прерывает синтаксический анализ XML? Я не могу придумать ничего такого, что могло бы его сломать.
EDIT:
Я провел еще несколько тестов, и это становится все более странным.
Я изменил код, основанный на комментарии Дэвида, чтобы использовать xml..city [0] вместо нового XML (xml..city) для обоих назначений. Это привело к тому, что исключение произошло немного позже (в некотором коде, не показанном выше, где он ссылается на cityXML). Поэтому я попытался войти в отладчик и заметил что-то странное.
cityXML был установлен в null, в то время как stateXML получал правильное значение. Просмотр объекта xml в отладчике показал все правильные данные, поэтому все должно было быть в порядке. В качестве случайного теста я переставил код так, чтобы stateXML загружался первым. После этого stateXML будет нулевым, а cityXML верным.
Итак, какое бы назначение ни происходило сразу после сбоя журнала, но все, что происходит после этого, работало нормально.
Вот (несколько продезинфицированный) XML, который анализируется:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<com:MyCompanyRANIv.01 xmlns:com="com:myc:rani:1:0:message" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<com:raniResponse>
<com:telephonyInfo>
<com:countryCode>1</com:countryCode>
<com:telephoneNumber>14121234567</com:telephoneNumber>
</com:telephonyInfo>
<com:geoInfo>
<com:coordinates>
<com:latLon>
<com:lat>40.49</com:lat>
<com:lon>-79.92</com:lon>
</com:latLon>
</com:coordinates>
<com:countryInfo>
<com:country>
<com:featureName>United States</com:featureName>
<com:featureTypeDescription>United States of America</com:featureTypeDescription>
<com:featureCode value="US" system="ISO 3166" family="Country Code" systemVer="1-alpha-2" />
</com:country>
</com:countryInfo>
<com:stateProvInfo>
<com:stateProv>
<com:featureName>PENNSYLVANIA</com:featureName>
<com:featureTypeDescription xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<com:featureCode family="US State Code" system="FIPS State Alpha Code" systemVer="" value="PA" />
</com:stateProv>
</com:stateProvInfo>
<com:regionInfo>
<com:region>
<com:featureName xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<com:featureTypeDescription xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<com:featureCode family="" system="" systemVer="" value="" />
</com:region>
</com:regionInfo>
<com:countyParishInfo>
<com:countyParish>
<com:featureName>ALLEGHENY</com:featureName>
<com:featureTypeDescription xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<com:featureCode family="" system="" systemVer="" value="" />
</com:countyParish>
</com:countyParishInfo>
<com:cityInfo>
<com:city>
<com:featureName>PITTSBURGH</com:featureName>
<com:featureTypeDescription xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<com:featureCode family="" system="" systemVer="" value="" />
</com:city>
</com:cityInfo>
<com:buildingInfo>
<com:building>
<com:featureName xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<com:featureTypeDescription xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</com:building>
</com:buildingInfo>
<com:streetAddress address="" />
</com:geoInfo>
<com:services host="false" wireless="false" other="false" />
</com:raniResponse>
<com:raniRequest>
<com:fullyQualifiedTelephoneNumber>14121234567</com:fullyQualifiedTelephoneNumber>
</com:raniRequest>
</com:MyCompanyRANIv.01>
</soapenv:Body>
</soapenv:Envelope>