ActionScript 3'te ÔÇťNullÔÇŁ (ger├žek bir soyad─▒!) Bir SOAP web hizmetine nas─▒l iletilir?


Al─▒nan cevaba git


Soyad─▒ Null olan bir ├žal─▒┼čan─▒m─▒z var. ├çal─▒┼čan arama ba┼čvurumuz, soyad─▒ arama terimi olarak kullan─▒ld─▒─č─▒nda (┼ču anda olduk├ža s─▒k ger├žekle┼čen) ├Âld├╝r├╝l├╝yor. Al─▒nan hata (te┼čekk├╝rler Fiddler!):

 <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>
 

┼×irin, ha?

Parametre t├╝r├╝ string .

Ben kullan─▒yorum:

  • WSDL (SOAP)
  • Flex 3.5
  • ActionScript 3
  • ColdFusion 8

Bir ColdFusion sayfas─▒ndan bir nesne olarak web servisini ├ža─č─▒r─▒rken hatan─▒n olu┼čmad─▒─č─▒n─▒ unutmay─▒n .


4587





2010-12-16




Cevap say─▒s─▒n─▒ say: 9






A┼ča─č─▒ izleme

─░lk ba┼čta bunun null zorlanmaya zorlanan bir hata oldu─čunu d├╝┼č├╝nd├╝m "null" ve bunun bir testi "null" == null ge├žti. De─čil. Yak─▒nd─▒m, ama ├žok ├žok ├žok yanl─▒┼č. Bunun i├žin ├╝zg├╝n├╝m!

O zamandan beri wonderfl.net'te ├žok fazla u─čra┼čma ve kodlar─▒ takip ettim mx.rpc.xml.* . X95 sat─▒r─▒ndaki XMLEncoder (3.5 kayna─č─▒nda) 1795 sat─▒r─▒nda setValue , t├╝m XMLEncoding ├Â─čelerinin

 currentChild.appendChild(xmlSpecialCharsFilter(Object(value)));
 

hangi esas olarak ayn─▒d─▒r:

 currentChild.appendChild("null");
 

Orijinal koduma g├Âre, bu kod bo┼č bir XML ├Â─česi d├Ând├╝r├╝yor. Ama neden?

Sebeb olmak

Hata raporu Justin Mclean yorumcu g├Âre FLEX-33664 , ┼ču su├žlu (my son iki testler bak─▒n oldu─čunu keman Bunu do─črulamak):

 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
}
 

Ne zaman currentChild.appendChild dize ge├žirilir "null" , metin ile bir k├Âk XML ├Â─česi i├žin ilk d├Ân├╝┼čt├╝r├╝r o null ve sonra bo┼č sabitin kar┼č─▒ o ├Â─čeyi test eder. Bu zay─▒f bir e┼čitlik testidir, bu nedenle ya null i├žeren XML null tipine zorlan─▒r ya da null tip "null" dizesini i├žeren bir k├Âk xml eleman─▒na zorlan─▒r ve test, ba┼čar─▒s─▒zl─▒kla sonu├žlanabilece─či bir yerde ge├žer. D├╝zeltmelerden biri , XML (veya herhangi bir ┼čeyi ger├žekten) "bo┼člu─ču" i├žin kontrol ederken her zaman kat─▒ e┼čitlik testlerini kullanmak olabilir .

├ç├Âz├╝m

ActionScriptÔÇÖin her lanet s├╝r├╝m├╝nde bu hatay─▒ d├╝zeltmek yerine, d├╝┼č├╝nebildi─čim tek makul ├ž├Âz├╝m, "bo┼č" alanlar─▒n─▒ test etmek ve CDATA de─čerleri olarak kullanmaktan ka├ž─▒nmak .

CDATA de─čerleri, aksi takdirde kodlama / kod ├ž├Âzme sorunlar─▒na neden olabilecek bir metin de─čerini tam olarak de─či┼čtirmek i├žin en uygun yoldur. ├ľrne─čin, hex kodlamas─▒ tek tek karakterler i├žindir. Bir ├Â─čenin tam metninden ka├žarken CDATA de─čerleri tercih edilir. Bunun en b├╝y├╝k nedeni insan─▒n okunabilirli─čini s├╝rd├╝rmesidir.


1088







A├ž─▒k xkcd notu , Bobby Tablolar web sitesi kullan─▒c─▒ verilerinin yanl─▒┼č yorumlanmas─▒ (bu durumda, dize "null") SQL dahil olmak ├╝zere ├že┼čitli dilde sorgular ka├ž─▒nmak i├žin iyi bir tavsiye vard─▒r ColdFusion .

Sorunun kayna─č─▒n─▒n bu oldu─ču sorusundan a├ž─▒k de─čildir ve ilk cevaba yap─▒lan bir yorumda not edilen ├ž├Âz├╝m (parametrelerin bir yap─▒ya g├Âm├╝lmesi) g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda, bunun ba┼čka bir ┼čey oldu─ču d├╝┼č├╝n├╝lmektedir.


296







Sorun Flex'in SOAP kodlay─▒c─▒s─▒nda olabilir. SOAP kodlay─▒c─▒s─▒n─▒ Flex uygulaman─▒zda geni┼čletmeyi deneyin ve bo┼č de─čerin nas─▒l i┼člendi─čini g├Ârmek i├žin programda hata ay─▒klay─▒n. Tahminimce, NaN (Say─▒ de─čil) olarak ge├žti . Bu, SOAP mesaj─▒n─▒n zaman zaman uyumsuz hale getirme s├╝recini bozar (├Âzellikle JBoss 5 sunucusunda ...). SOAP kodlay─▒c─▒s─▒n─▒ geni┼čletti─čimi ve NaN'in nas─▒l i┼člendi─čini a├ž─▒k bir ┼čekilde kontrol etti─čimi hat─▒rl─▒yorum.

(Bir yan notta, e─čer ├žal─▒┼čan kimli─či Null ise yararl─▒ bir ┼čey yapman─▒z bekleniyor mu, bu bir do─črulama meselesi de─čil mi? Gereksinimi pek bilmedi─čim i├žin yan─▒l─▒yor olabilirim.)


238







@ doc_180, do─čru bir konsepte sahipti, say─▒lara odaklanmas─▒n─▒n d─▒┼č─▒nda, orijinal posterin dizelerle ilgili sorunlar─▒ vard─▒.

├ç├Âz├╝m mx.rpc.xml.XMLEncoder dosyay─▒ de─či┼čtirmektir . Bu hat 121

     if (content != null)
        result += content;
 

[Flex 4.5.1 SDKÔÇÖya bakt─▒m; sat─▒r numaralar─▒ di─čer s├╝r├╝mlerde farkl─▒l─▒k g├Âsterebilir]

Temel olarak, do─črulama ba┼čar─▒s─▒z olur ├ž├╝nk├╝ 'i├žerik null' ve dolay─▒s─▒yla arg├╝man─▒n─▒z giden SOAP Paketine eklenmedi; bu nedenle eksik parametre hatas─▒na neden olur.

Do─črulamay─▒ kald─▒rmak i├žin bu s─▒n─▒f─▒ geni┼čletmelisiniz. Daha sonra, b├╝y├╝k bir kartopu var, SOAPEncoder'─▒ de─či┼čtirilmi┼č XMLEncoder'─▒n─▒z─▒ kullanmak i├žin de─či┼čtirerek ve ard─▒ndan de─či┼čtirilen SOAPEncoder'─▒n─▒z─▒ kullanmak i├žin ─░┼člemi de─či┼čtirip alternatif Operasyon s─▒n─▒f─▒n─▒z─▒ kullanmak i├žin WebService'i d├╝zenleyerek b├╝y├╝k bir kartopu var.

Birka├ž saat ge├žirdim ama devam etmem gerekiyor. Muhtemelen bir veya iki g├╝n s├╝rer.

Sadece XMLEncoder hatt─▒n─▒ d├╝zeltebilir ve kendi s─▒n─▒f─▒n─▒z─▒ kullanmak i├žin biraz maymun yama yapabilirsiniz.

Ayr─▒ca ColdFusion ile RemoteObject / AMF kullanmaya ge├žerseniz, bo┼č de─čerin sorunsuz ge├žildi─čini de ekleyece─čim.


16.07.2013 g├╝ncelleme :

RemoteObject / AMF hakk─▒ndaki son yorumuma yeni bir ekleme daha var. CF10 kullan─▒yorsan─▒z; daha sonra bir nesnede null de─čeri olan ├Âzellikler sunucu taraf─▒ nesnesinden kald─▒r─▒l─▒r. Bu nedenle, eri┼čmeden ├Ânce ├Âzelliklerin varl─▒─č─▒n─▒ kontrol etmeniz gerekir, aksi takdirde ├žal─▒┼čma zaman─▒ hatas─▒ al─▒rs─▒n─▒z. Bunun gibi kontrol edin:

 <cfif (structKeyExists(arguments.myObject,'propertyName')>
 <!--- no property code --->
<cfelse>
 <!--- handle property  normally --->
</cfif>
 

Bu, CF9'daki davran─▒┼č de─či┼čikli─čidir; bo┼č ├Âzellikler burada bo┼č dizgelere d├Ân├╝┼č├╝r.


D├╝zenle 12/6/2013

Burada bo┼č de─čerlerin nas─▒l i┼člendi─čine dair bir soru oldu─ču i├žin, "bo┼č" bir dizgenin ayr─▒lm─▒┼č bo┼č kelime ile nas─▒l ili┼čkili olaca─č─▒n─▒ g├Âstermek i├žin h─▒zl─▒ bir ├Ârnek uygulamad─▒r.

 <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" initialize="application1_initializeHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            protected function application1_initializeHandler(event:FlexEvent):void
            {
                var s :String = "null";
                if(s != null){
                    trace('null string is not equal to null reserved word using the != condition');
                } else {
                    trace('null string is equal to null reserved word using the != condition');
                }

                if(s == null){
                    trace('null string is equal to null reserved word using the == condition');
                } else {
                    trace('null string is not equal to null reserved word using the == condition');
                }

                if(s === null){
                    trace('null string is equal to null reserved word using the === condition');
                } else {
                    trace('null string is not equal to null reserved word using the === condition');
                }

            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
</s:Application>
 

─░zleme ├ž─▒kt─▒s─▒:

Bo┼č dize! = ko┼čulunu kullanarak bo┼č ayr─▒lm─▒┼č s├Âzc├╝─če e┼čit de─čil

Bo┼č dize == ko┼čulunu kullanarak bo┼č ayr─▒lm─▒┼č s├Âzc├╝─če e┼čit de─čil

bo┼č dizge === ko┼čulu kullan─▒larak bo┼č ayr─▒lm─▒┼č kelimeye e┼čit de─čildir


128







T├╝m karakterleri onalt─▒l─▒k e┼čde─čerlerine d├Ân├╝┼čt├╝r├╝n. Bu durumda, Null d├Ân├╝┼čt├╝r├╝l├╝r &#4E;&#75;&#6C;&#6C;


65







ActionScript'te bir null de─čeri dize etmek, dize verecektir . ┼×├╝phem, birisinin, ipi de┼čifre etmek , burada g├Ârd├╝─č├╝n├╝z k─▒r─▒lmaya neden olarak - muhtemelen nesnelerden ge├žtikleri ve veritaban─▒nda dizgileri almak istemedikleri i├žin - muhtemelen istemediklerinde karar vermenin iyi bir fikir oldu─čuna karar vermi┼č olmas─▒d─▒r. (bu t├╝r b├Âcekleri de kontrol etti─činizden emin olun).http://en.wikipedia.org/wiki/ActionScript "NULL" "NULL" null null


51







Bir hack olarak, m├╝┼čteri taraf─▒nda ├Âzel bir i┼člem yapmay─▒ d├╝┼č├╝nebilirsiniz, 'Null' dizesini asla olu┼čmayacak bir ┼čeye, ├Ârne─čin XXNULLXX ve sunucuya geri d├Ân├╝┼čt├╝rmeyi d├╝┼č├╝nebilirsiniz.

G├╝zel de─čil, ancak b├Âyle bir s─▒n─▒r durumu i├žin sorunu ├ž├Âzebilir.


39


2012-04-28





Peki, Flex'in SOAP Kodlay─▒c─▒s─▒'n─▒n uygulanmas─▒n─▒n bo┼č de─čerleri yanl─▒┼č ┼čekilde seri hale getirdi─čini d├╝┼č├╝n├╝yorum. Onlar─▒ String Null olarak seri hale getirmek iyi bir ├ž├Âz├╝m gibi g├Âr├╝nm├╝yor. Resmi olarak do─čru s├╝r├╝m, bo┼č bir de─čer gibi ge├žiyor gibi g├Âr├╝n├╝yor:

 <childtag2 xsi:nil="true" />
 

Dolay─▒s─▒yla, "Null" de─čeri, tam olarak arad─▒─č─▒n─▒z ┼čey olan ge├žerli bir dizgeden ba┼čka bir ┼čey olamaz.

San─▒r─▒m Apache Flex'te bu d├╝zeltmenin yap─▒lmas─▒ o kadar zor olmamal─▒. Bir Jira sorunu a├žman─▒z─▒ veya apache-flex e-posta listesinin g├Ârevlileriyle ileti┼čim kurman─▒z─▒ ├Âneririm. Ancak bu sadece m├╝┼čteri taraf─▒n─▒ d├╝zeltecektir. ColdFusion'─▒n bu ┼čekilde kodlanm─▒┼č bo┼č de─čerlerle ├žal─▒┼č─▒p ├žal─▒┼čamayaca─č─▒n─▒ s├Âyleyemem.

Radu Cotescu blog yaz─▒s─▒ Ayr─▒ca bak─▒n─▒z soapUI isteklerinde bo┼č de─čerler nas─▒l g├Ânderilir .


31







Bu bir kludge, ama varsayarak orada i├žin minimum boyda SEARCHSTRING 2 karakter, ├Ârne─čin, : ikinci karakterde parametre oldu─čunu ve iki parametre olarak ge├žmek ve veritaban─▒na sorgu y├╝r├╝t├╝l├╝rken onlar─▒ tekrar bir araya. substring SEARCHSTRING SEARCHSTRING1 ("Nu") SEARCHSTRING2 ("ll"). Concatenate


22



─░lgili yay─▒nlar


Bash beti─čime iletilen t├╝m arg├╝manlar benim fonksiyonuma nas─▒l ge├žirilir?

Json POST verilerini bir nesne olarak Web API y├Ântemine iletmek nas─▒l?

ReactJSÔÇÖde alt bile┼čenden ebeveynine veri nas─▒l ge├žilir?

Python'da bir WSDL (SOAP) web servisini nas─▒l kullanabilirim?

JavaÔÇÖda Web Servisleri ├Â─črenmem gerekiyor. ─░├žindeki farkl─▒ t├╝rler neler? [kapal─▒]

Olay, JavaScript'teki sat─▒r i├ži olay i┼čleyicisine ba─č─▒ms─▒z de─či┼čken olarak nas─▒l iletilir?

String bile┼čeninin angular2 i├žindeki bir bile┼čene iletilmesi

Symfony2'deki web dizinine giden sunucu yolunu kontrol cihaz─▒n─▒n i├žinden nas─▒l alabilirim?

Bo┼č bir de─či┼čken C# .net kodundan bir SQL Sakl─▒ Prosed├╝r├╝ne nas─▒l ge├žirilir

Bir olay nesnesini Javascript'teki bir i┼čleve nas─▒l iletirim?

Etiketle ilgili di─čer sorular [apache-flex]


S─▒ralanm─▒┼č bir diziyi neden s─▒ralanmam─▒┼č bir diziyi i┼člemekten daha h─▒zl─▒ i┼čliyor?

Git'teki en son yerel taahh├╝tleri nas─▒l geri alabilirim?

Git ┼čubesini yerel olarak ve uzaktan nas─▒l silerim?

'Git pull' ve 'git fetch' aras─▒ndaki fark nedir?

Do─čru JSON i├žerik t├╝r├╝ nedir?

ÔÇťVerimÔÇŁ anahtar kelimesi ne i┼če yarar?

C++ 'da ÔÇť->ÔÇŁ operat├Âr├╝ nedir?

─░┼člemden ├Ânce 'git add' i┼člemini nas─▒l geri alabilirim?

Yerel bir Git ┼čubesini nas─▒l yeniden adland─▒rabilirim?