Nasıl doğru ActionScript 3 SOAP web servisine dize "Boş" (bir çalışanın'in uygun soyadı) geçtim mi?
Boş olan bir çalışanımız var. Çalışan arama uygulaması son ismi arama terimi olarak kullanıldıĞında öldürdü oldukça sık olur. Hata (teşekkürler Fiddler!) aldı :
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>coldfusion.xml.rpc.CFCInvocationException: [coldfusion.runtime.MissingArgumentException : The SEARCHSTRING parameter to the getFacultyNames function is required but was not passed in.]</faultstring>
Sevimli, değil mi?
Parametre türü string
.
Kullanıyorum:
- WSDL (SABUN).
- Flex 3.5
- ActionScript 3
- ColdFusion 8
Hata ColdFusion sayfasındaki bir nesne olarak Java eklentisi ararken oluşmaz unutmayın.
CEVAP
Aşağı izleme
İlk başta bu null
"null"
zorla almak olduğu zorlama bir hata olduğunu düşündüm ve "null" == null
bir test geçiyordu. Değil.Yakın, ama çok yanılmışım. Pardon, özür dilerim!
Beri fiddling on wonderfl.net mx.rpc.xml.*
kod ile izleme yaptım. Satırında XMLEncoder
(3.5 kaynağı), setValue
XMLEncoding tüm bu 1795 aşağı kaynar
currentChild.appendChild(xmlSpecialCharsFilter(Object(value)));
temelde aynı olan:
currentChild.appendChild("null");
Bu kod, orijinal kemanımı göre, boş bir XML öğesi döndürür. Ama neden?
Neden
Hata raporu yorumcu Justin Mclean FLEX-33664 aşağıdakileri göre suçlu (bunu doğrulamak ** 20 benim son iki testleri bakınız):
var thisIsNotNull:XML = <root>null</root>;
if(thisIsNotNull == null){
// always branches here, as (thisIsNotNull == null) strangely returns true
// despite the fact that thisIsNotNull is a valid instance of type XML
}
currentChild.appendChild
"null"
dize geçirildiğinde ilk metin* *17, null değişmez karşı unsur bu testler ile XML kök öğesi dönüştürür. Bu zayıf bir eşitlik testi, ya da XML içeren null zorla boş türü veya null türü zorlanmış bir kök xml öğesi içeren bir dize "null", ve Testi geçer nerede muhtemelen gerekir başarısız. Bir düzeltme her zaman "nullness." XML " (ya da bir şey, gerçekten) kontrol ederken strict equality testleri kullanmak olabilir
Çözüm
Aklıma gelen tek mantıklı çözüm yöntemine giden her lanet sürümünde bu hata sabitleme kısa, "boş" ve . alanlar için test etmektir ^strong>CDATA values olarak kaçmalarına.CDATA değerler yoksa kodlama/kod çözme sorunlara neden olabilecek bütün bir metin değeri değişmek için en uygun yoldur.Hex kodlama, örneğin, tek tek karakterler içindir. CDATA değerleri bir elementin tüm metin kaçan olduğunda tercih edilir. Bunun en büyük nedeni insan okunabilirlik sağlar.
Bir dize kontrol etmek için nasıl &quo...
Nasıl değişmez bir " baskı miyim;{}&qu...
Nasıl bir dize kullanarak " başlat...
Nasıl tamir " 'aps-çevre...
Nasıl bir dize ortasından kültür duyar...