¿©·¯ºÐ ¾ÖÇø®ÄÉÀ̼ÇÀÇ µ¥ÀÌÅÍ À¯ÇüÀ» XML·Î º¯È¯ÇÏ´Â ¹æ¹ý
Gavin
Bong ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î, eUtama Sdn. Bhd. 2002³â 4¿ù
SOAPÀº ¾ÖÇø®ÄÉÀÌ¼Ç ·¹º§ µ¥ÀÌÅ͸¦ Àü´ÞÇϱâ À§ÇÑ °£´ÜÇÑ ³×Æ®¿öÅ© ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇÑ´Ù. ÀÌ ÇÁ·ÎÅäÄÝÀº dzºÎÇÏ°í È®Àå °¡´ÉÇÑ
À¯Çü ½Ã½ºÅÛ ´öºÐ¿¡ ÀÓÀÇÀûÀÎ ÀÚ¹Ù À¯ÇüÀ» Á÷·ÄÈµÈ XML·Î ½±°Ô Àü´ÞÇÒ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡ SOAP ÅøŶ¿¡¼ ¹ß°ßµÇ´Â À¯Çü ½Ã½ºÅÛ
Áö¿ø¿¡ °üÇÑ 2ÆíÀ¸·Î µÈ ½Ã¸®ÁîÀÇ 1ÆíÀÎ ÀÌ ±Û¿¡¼ Gavin BongÀº SOAPÀÇ À¯Çü ½Ã½ºÅÛÀÇ ÀÌ·ÐÀûÀÎ ±âÃʸ¦ ¼Ò°³ÇÒ °ÍÀÌ´Ù.
¿©·¯ºÐÀº ¶ÇÇÑ Á÷·ÄÈ¿Í ºñÁ÷·ÄÈ¿¡ ´ëÇÑ SOAPÀÇ ÇÁ·Î±×·¥ÀûÀÎ Áö¿ø¿¡ °üÇØ ¹è¿ï °ÍÀÌ°í ÅøŶÀÇ ³»ºÎ¸¦ °ËÅäÇÏ¸é¼ °á·ÐÀ» ³»¸±
°ÍÀÌ´Ù. ÀÌ ÇÁ·Î¼¼½ºµéÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¸¦ Àß ÀÌÇØÇÏ¸é ¿©·¯ºÐ ÀÚ½ÅÀÇ ºÐ»ê ½Ã½ºÅÛ ±¸Ãà¿¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
µ¥ÀÌÅÍ°¡ ÀüÀÚ½ÄÀ¸·Î ±³È¯µÉ ¶§, ±³È¯ÀÇ ¾ç ³¡Àº µÎ °¡Áö »çÇ׿¡ ´ëÇØ »çÀü¿¡ µ¿ÀÇÇØ¾ß ÇÑ´Ù. »óÈ£ÀÛ¿ë ÆÐÅÏ °ú
À¯Çü ½Ã½ºÅÛ ÀÌ ±×°ÍÀÌ´Ù. »óÈ£ÀÛ¿ë ÆÐÅÏÀº Åë½Å ä³Î (¿¹ : point-to-point ´ë many-to-one, ȤÀº
ºí·ÎÅ· ´ë µ¿±â½Ä)ÀÇ ±¸Á¶¿Í °ü·ÃµÇ¾î ÀÖ´Ù. ¹Ý¸é À¯Çü ½Ã½ºÅÛÀº ¸Þ½ÃÁö ÀÎÄÚµù°ú Çص¶¿¡ »ç¿ëµÉ µ¥ÀÌÅÍ Æ÷¸ËÀ» µ¿ÀÇÇÑ °ÍÀÌ´Ù.
ÀÌ ±Û¿¡¼ ³ª´Â ¾ÆÆÄÄ¡ SOAP ÅøŶ¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Â SOAPÀÇ À¯Çü ½Ã½ºÅÛÀ» ¼³¸íÇÒ °ÍÀÌ´Ù. ÇöÀçÀÇ SOAP ÅøŶÀº ¸Þ½Ã¡°ú
RPC »óÈ£ÀÛ¿ë À¯ÇüÀ» µÑ ´Ù Áö¿øÇÑ´Ù. ÀÌ ±ÛÀº ÈÄÀÚ¿¡ ÃÊÁ¡À» ¸ÂÃâ °ÍÀÌ´Ù. ´Þ¸® ¾ð±ÞµÇÁö ¾Ê´Â ÇÑ ÀÌ ±Û¿¡¼ ¼³¸íÇÏ´Â ±â´ÉµéÀº
2001³â¿¡ Ãâ½ÃµÈ ¾ÆÆÄÄ¡ SOAP v.2.2¿¡ Àû¿ëµÈ´Ù(Âü°í
ÀÚ·á ). ÀûÀýÇÑ °÷¿¡¼ ³ª´Â ±× Ãâ½ÃÆÇ ÀÌÈÄ ¹ß»ýÇÑ ¹ö±× ¼öÁ¤À̳ª ÀÎÅÍÆäÀ̽º º¯È¸¦ °Á¶ÇÏ°Ú´Ù.
¿ë¾î¿¡ ´ëÇÑ ¿©´ãÀ¸·Î, ÀÌ ½Ã¸®Áî¿¡¼ »ç¿ëµÇ´Â À̸§ °ø°£ Á¢µÎ»ç (SOAP°ú W3CÀÇ XML ½ºÅ°¸¶ ¸ðµÎ¿¡ ´ëÇÑ)¿Í QNames
(qualified names)À» Ç¥Çö °üÇà¿¡ ´ëÇØ ¼Ò°³ÇÏ°Ú´Ù.
SOAP 1.2 ÀÛ¾÷ ÃʾÈÀÌ 2001³â¿¡ Ãâ½ÃµÇ¾úÁö¸¸, ¿ì¸®ÀÇ ³íÀÇ´Â SOAP 1.1ÀÇ »ó¼¼ »çÇ×À¸·Î ÇÑÁ¤µÉ °ÍÀÌ´Ù.
µû¶ó¼ SOAP-ENV¿Í SOAP-ENC Á¢µÎ»ç´Â °¢°¢
http://schemas.xmlsoap.org/soap/envelope/
¿Í
http://schemas.xmlsoap.org/soap/encoding À̸§°ø°£À» ÂüÁ¶ÇÒ °ÍÀÌ´Ù.
xsd
dhk xsi
Á¢µÎ»ç´Â ¸íÈ®ÇÏ°Ô ´Þ¸® ¾ð±ÞµÇÁö ¾Ê´Â ÇÑ °¢°¢
http://www.w3.org/2001/XMLSchema
¿Í
http://www.w3.org/2001/XMLSchema-instance À̸§ °ø°£À» ÂüÁ¶ÇÑ´Ù°í °¡Á¤µÈ´Ù.
¿Ü·¡ URIÀ» °¡Áø QNamesÀº ´ÙÀ½ Æ÷¸ËÀ¸·Î ÀÛ¼ºµÉ °ÍÀÌ´Ù. :
¿¹Á¦ :
{http://xml.apache.org/xml-soap}Map
SOAP°ú RPC SOAP¿¡¼ RPC È£ÃâÀ»
½ÇÇàÇÒ ¶§´Â À¥ ¼ºñ½º ¿äûÀÚ¿Í Á¦°øÀÚ°£¿¡ µÎ À¯ÇüÀÇ ¸Þ½ÃÁö °¡ ±³È¯µÈ´Ù. :
¿ø°Ý ¸Þ¼Òµå¿¡ ´ëÇÑ ¸Å°³º¯¼ö (RPC ¿äû)
¹Ýȯ°ª (PRC ÀÀ´ä)
±â¼úÀûÀ¸·Î, SOAP ÷ºÎ ¹®¼¿Í SOAP Çì´õ´Â ¶ÇÇÑ SOAP RPC È£ÃâÀÇ ¸Þ½ÃÁö¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Ù.; ±×·¯³ª ¿ì¸®´Â Áö±ÝÀº
À̵éÀ» ¹«½ÃÇصµ µÈ´Ù. ¸Þ½ÃÁö´Â º¸Åë ±¸¾îü·Î Section 5 ¶ó°í ¾Ë·ÁÁø ±â¹ýÀ» »ç¿ëÇÏ¿© ÀÎÄÚµùµÈ´Ù. ¿À´Ã³¯ ÀÌ¿ëÇÒ ¼ö
ÀÖ´Â ¸ðµç SOAP ÇÁ·¹ÀÓ¿öÅ©´Â ÀÌ ÀÎÄÚµù ±â¹ýÀ» Áö¿øÇÑ´Ù. SOAP »ç¾çÀÌ À̸¦ ±âº» ÀÎÄÚµùÀ¸·Î ÁöÁ¤ÇÏÁö´Â ¾ÊÁö¸¸ ¸»ÀÌ´Ù.
Section 5 ÀÎÄÚµùÀº °´Ã¼ ±×·¡ÇÁ¸¦ XML·Î º¯È¯Çϱâ À§ÇÑ ¹æ¹ý·ÐÀ» ¼³¸íÇÑ´Ù. ¹æ¹ý·ÐÀÌ Ã¶ÀúÇÏ°Ô ÁöÄÑÁø´Ù¸é
SOAP XMLÀº ÀÚ½ÅÀÇ ¿ø·¡ ÇüÅ·ΠÀ籸ÃàµÉ ¼ö ÀÖ´Ù. ¶Ç´Ù¸¥ ÀÎÄÚµù ¹æ½ÄÀº W3CÀÇ XML ½ºÅ°¸¶¿Í °°Àº ½ºÅ°¸¶ ¾ð¾î¸¦ »ç¿ëÇÏ¿©
¸Þ½ÃÁö¸¦ Á¦ÇÑÇÏ´Â °ÍÀÌ´Ù. ¾ÕÀÇ ¹æ¹ý·Ð¿¡¼´Â Æ®·£Àè¼Ç¿¡ °ü¿©ÇÏ°í ÀÖ´Â ¸ðµç ´ç»çÀÚ°¡ Á÷·ÄÈ ±ÔÄ¢¿¡ ÇÕÀÇÇÏ´Â ¹Ý¸é ÈÄÀÚ¿¡¼´Â ¸Þ½ÃÁöÀÇ
¹®ÀÚÀûÀÎ Æ÷¸Ë¿¡ ÇÕÀÇÇÑ´Ù. ÀÌ ½Ã¸®ÁîÀÇ 2Æí¿¡¼ ¿©·¯ºÐÀº ½ºÅ°¸¶¿¡ ÀÇÇØ Á¦ÇÑµÈ SOAPÀ» ³ªÅ¸³»´Â ¿¹Á¦¸¦ º¼ °ÍÀÌ´Ù.
Listings
1°ú 2´Â
Section 5 ÀÎÄÚµùÀ» »ó¼¼ÇÏ°Ô º¸¿©ÁÖ¸ç °ËÅäÇÏ°í ÀÖ´Ù. Listing
1 ¿¡ ÀÖ´Â Foo JavaBeanÀÌ Listing
2 ¿¡¼ Á÷·ÄȵȴÙ.
Listing 1. Foo JavaBean
class Foo{
int i;
String s;
public Foo() {}
.... /* property mutators and accessors not shown for brevity */
}
Listing 2. Foo °´Ã¼ÀÇ SOAP Ç¥Çö
<SOAP-ENV:Body>
<ns1:eatFoo
xmlns:ns1="urn:ibmdw:myservice"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<fooParam
xmlns:ns2="http://foo/type"
xsi:type="ns2:Foo">
<i xsi:type="xsd:int">1000</i>
<s xsi:type="xsd:string">Hello World</s>
</fooParam>
</ns1:eatFoo>
</SOAP-ENV:Body>
Listing 2ÀÇ SOAP XML ÀνºÅϽº´Â eatFoo
¸Þ¼Òµå È£ÃâÀ» URI
urn:ibmdw:myservice
¿¡ ÀÇÇØ È®ÀÎµÈ À¥ ¼ºñ½º·Î º¸³»´Â RPC È£ÃâÀ» Ç¥ÇöÇÑ´Ù.
fooParam
, i
, ¹× s element´Â Á¢±ÙÀÚ (accessor)¶ó°í
ºÒ¸°´Ù.; À̵éÀº °ªÀ» ´ã°í ÀÖ´Â ÄÁÅ×À̳ʵéÀÌ´Ù. º¹¼ö ÂüÁ¶µÇ´Â Á¢±ÙÀÚ´Â ÀÌ Á¤ÀÇ¿¡¼ Á¦¿ÜµÈ´Ù,; À̵éÀº ½ÇÁ¦ °ªÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â
´Ù¸¥ elementµéÀ» ÂüÁ¶Çϱâ À§ÇØ XML Pointer Language (»ó¼¼ »çÇ×Àº ¾Æ·¡ÀÇ Âü°í
ÀÚ·á
ÂüÁ¶)¿Í °°Àº ¸ÞÄ¿´ÏÁòÀ» äÅÃÇÏ´Â ºó elementµéÀÌ´Ù.
Listing
2 ¿¡ ¸¹ÀÌ ³ª¿Í ÀÖ´Â xsi:type ¼Ó¼ºÀº Á¢±ÙÀÚÀÇ ÇÏÀ§ À¯ÇüÀ» Á¦°øÇÑ´Ù. º¸Åë ÇÑ À¥
¼ºñ½º Á¦°øÀÚ¿Í ¿äûÀÚ´Â °¢ RPC È£Ãâ¿¡ ´ëÇÑ ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ À¯ÇüÀ» »çÀü¿¡ ÇÕÀÇÇÑ´Ù. ÀÌ·¯ÇÑ »çÀü ÇÕÀÇ´Â ½ÉÁö¾î´Â
xsi:type ¼Ó¼ºÀÌ ¾ø¾îµµ SOAP XML ÀνºÅϽº¸¦ ¿Ã¹Ù·Î ºñÁ÷·ÄÈÇϱ⿡ ÃæºÐÇÏ´Ù. ±×·¯³ª ƯÁ¤ ¸Þ¼Òµå°¡ ¹®ÀÚ¿°ú Á¤¼ö¸¦ ¸ðµÎ
¹Þ¾ÆµéÀÌ´Â °æ¿ì (¿¹¸¦ µé¾î, ¸Å°³º¯¼ö´Âjava.lang.Object ¸Å°³º¯¼ö¸¦ ¹Þ¾ÆµéÀÌ´Â À¯ÇüÀÏ ¼öµµ ÀÖ´Ù.)¸¦ °í·ÁÇØ º¸ÀÚ. ÀÌ
°æ¿ì °´Ã¼°¡ ¿Ã¹Ù·Î ºñÁ÷·ÄȵǷÁ¸é Æ÷ÇÔµÈ °ªÀÇ À¯ÇüÀ» Ç¥¸íÇϱâ À§ÇØ ¸íÈ®ÇÑ xsi:type
ÀÌ ÇÊ¿äÇÏ´Ù. ¸íÈ®ÇÑ
xsi:type
¼Ó¼ºÀ» °¡Áø Á¢±ÙÀÚ¸¦ ´ÙÇü Á¢±ÙÀÚ(polymorphic
accessors )¶ó °í ºÎ¸¥´Ù.
¾ÆÆÄÄ¡ SOAPÀº ¸ðµç Á¢±ÙÀÚ¸¦ ´ÙÇüÀûÀ¸·Î ó¸®Çϵµ·Ï ¼³°èµÇ¾ú´Ù. ¹öÁ¯ 2.2¿¡¼µµ ´ÙÇü
Á¢±ÙÀÚ¸¦ °¡Áö´Â SOAP XML ÀνºÅϽº »ý¼ºÀº °è¼ÓµÇÁö¸¸ ±×°Í ¾øÀ̵µ ºñÁ÷·Äȵǵµ·Ï ÇÁ·Î±×·¥ µÉ ¼ö ÀÖ´Ù. ³ª´Â ÀÌ
±ÛÀÇ µÚ¿¡¼ ÀÌ°ÍÀÌ ¾î¶»°Ô ¼öÇàµÇ´ÂÁö °£·«È÷ ¼³¸íÇÏ°Ú´Ù.
xsi:type
¼Ó¼ºÀº QNamesÀ» °ªÀ¸·Î ÃëÇÑ´Ù. xsi:type
¼Ó¼ºÀÌ
¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â °ªÀº ´ÙÀ½°ú °°´Ù.:
XML Schema Part 2
Datatypes »ç¾ç¿¡¼ ³ª¿À´Â ³»ÀåµÈ À¯Çü
Apache SOAPÀº ´ëºÎºÐÀÇ ³»ÀåµÈ À¯ÇüÀ» Áö¿øÇÏ°í, ´ÙÀ½°ú °°Àº schema Part 2 »ç¾çÀÇ ¸ðµç ¹öÀü¿¡¼ ³ª¿À´Â
À¯Çüµé°ú ¿ª ȣȯµÈ´Ù.
±Ç°í¾È (2201)
Èĺ¸ ±Ç°í¾È (2000³â 10¿ù)
ÀÛ¾÷ ÃÊ¾È (1999)
Á¤È®¼ºÀ» À§ÇØ, ¾ÆÆÄÄ¡ SOAPÀº ¸ðµç ³»ÀåµÈ À¯ÇüÀ» ´Ù·çÁö´Â ¾ÊÁö¸¸, °¡Àå ÈçÈ÷ »ç¿ëµÇ´Â À¯ÇüµéÀº Áö¿øÇÑ´Ù. ³ª´Â ´ÙÀ½
¼½¼Ç¿¡¼ ¾ÆÆÄÄ¡ SOAP¿¡ ÀÇÇØ Áö¿øµÇ´Â, Section5¿¡ ÀÇÇØ ÀÎÄÚµùµÈ À¯ÇüµéÀÇ »ó¼¼ÇÑ ¸ñ·ÏÀ» »ìÆì º¼ °ÍÀÌ´Ù.
»ç¿ëÀÚ°¡ Á¤ÀÇÇÑ À¯ÇüÀ» ³ªÅ¸³»´Â ÀÓÀÇÀûÀÎ
QNames
À̵éÀº Listing
2 ¿¡ ÀÖ´Â ns2:Foo
¿Í °°Àº º¹ÇÕ À¯ÇüÀ» Ç¥½ÃÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ÀÌ À¯ÇüÀÇ Á÷·ÄÈµÈ ÇüÅ´ ½ºÅ°¸¶
¹®¼¿¡ ÀÇÇØ , ȤÀº ¾ÆÆÄÄ¡ SOAP ³»¿¡¼Ã³·³ Ä¿½ºÅÒ (ºñ)Á÷·ÄÀÚ¿¡ ÀÇÇØ Á¤ÀÇµÉ ¼ö ÀÖ´Ù.
SOAP 1.1 È®Àå À¯Çü
¿©±â¿¡´Â ¹è¿ ¸â¹öÀÇ ¼ø¼¸¦ Ç¥ÇöÇÏ´Â SOAP-ENC:Array
¿Í base-64¿¡ ÀÇÇØ ÀÎÄÚµùµÈ ¹®ÀÚ¿À»
Ç¥ÇöÇÏ´Â SOAP-ENC:base64
°¡ Æ÷ÇԵȴÙ.
Listing
2 ÀÇ encodingStyle
¼Ó¼ºÀº »ç¿ëµÈ Á÷·ÄÈ ½ºÅ°¸¶¸¦ °¡¸®Å°´Âµ¥ ÀÌ¿ëµÈ´Ù. ¿¹¸¦ µé¾î,
Section 5 ÀÎÄÚµùÀº URI http://schemas.xmlsoap.org/soap/encoding¿¡ ÀÇÇØ
Ç¥ÇöµÈ´Ù. ¾ÆÆÄÄ¡ SOAPÀº ´ÙÀ½ ¼¼ °³ÀÇ encodingStyle
s¿¡ ´ëÇÑ Áö¿øÀ» ³»ÀåÇÏ°í ÀÖ´Ù. : Section
5, XMI, ±×¸®°í literal XMLÀÌ ±×°ÍÀÌ´Ù. »ç¿ëÀÚ Á¤ÀÇ encodingStyle
¿ª½Ã Áö¿øÇÑ´Ù.
±×·¯³ª ¾ÆÆÄÄ¡ SOAPÀÇ Section 5 ÀÎÄÚµù Áö¿øÀº Æ÷°ýÀûÀÌÁö ¾Ê´Ù. ¹è¿ »çÀÌ°¡ ºñ¾î ÀÖ°í ºÎºÐÀûÀ¸·Î Àü¼ÛµÉ ¼ö ÀÖÀ¸¸ç
´ÙÂ÷¿øÀûÀÎ ¹è¿¿¡ ´ëÇÑ Áö¿ø µî ¿©ÀüÈ÷ ¸î °¡Áö ±â´ÉµéÀÌ ¿©ÀüÈ÷ ºüÁ® ÀÖ´Ù.
Áö±Ý±îÁö ³ª´Â µ¥ÀÌÅÍ ±³È¯ÀÇ ¿£µåÆ÷ÀÎÆ®µéÀÌ Section 5·Î ÀÎÄÚµùµÈ À¯ÇüÀ» ½Å±âÇÏ°Ô (ºñ) Á÷·ÄÈÇÒ ¼ö ÀÖÀ» °ÍÀÓÀ» ¾Ï½ÃÇØ
¿Ô´Ù.; ±×·¯³ª ÀÌ ÀüÁ¦´Â Àü´ÞÇÏ°í Àü´Þ¹Þ°í ÀÖ´Â ¿£ÅÍƼµéÀÇ µ¥ÀÌÅÍ ¸ðµ¨¿¡ ´ëÇÑ ´ë¿ª ¹ÛÀÇ µ¿ÀÇ¿¡ ½ÇÁ¦·Î ÀÇÁ¸ÇÑ´Ù. ÀÌ°ÍÀº ±âº»ÀûÀ¸·Î
¿£µåÆ÷ÀÎÆ®µéÀÌ "Àß ¾Ë·ÁÁø" À¯Çüµé¿¡ µ¿ÀÇÇØ¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ±×·¯³ª ¿©±â¿¡ ´ë¾ÈÀÌ ÀÖ´Ù. Section 5ÀÇ ÇÑ°èÁ¡À» ¿øÇÏÁö ¾Ê´Â
¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚµéÀº ½ºÅ°¸¶ ±â¹ÝÀÇ Á÷·ÄÈ ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â¹ýÀº ¿äû/ÀÀ´ä ¸Þ½ÃÁö¿¡ ´ëÇÑ ½ºÅ°¸¶¿Í ÇÔ²² SOAP
¼ºñ½ºÀÇ ÀÎÅÍÆäÀ̽º¸¦ °ø°³ÇÔÀ¸·Î½á ÀÛµ¿ÇÑ´Ù. À¥ ¼ºñ½º Á¤ÀÇ ¾ð¾î(WSDL)´Â ÇöÀç ÀÌ·¯ÇÑ ¸ñÀûÀ» À§ÇÑ »ç½Ç»óÀÇ Ç¥ÁØÀÌ´Ù. ¾ÆÆÄÄ¡
SOAPÀº WSDLÀ» ÀνÄÇÏÁö ¾ÊÁö¸¸, ¾ÆÆÄÄ¡ SOAP¿¡¼ ³ª¿Â ÅøŶÀÎ Axis (Âü°í
ÀÚ·á
)´Â À̸¦ ÀνÄÇÑ´Ù.
Section 5 ÀÎÄÚµù
SOAPÀº Section 5 ÀÎÄÚµù¿¡ ÀÇÇØ ±â¼úµÈ SOAP À¯Çü¿¡ ´ëÇÑ ¾î¶² ¾ð¾î ¹ÙÀεùµµ Á¤ÀÇÇÏÁö ¾Ê´Â´Ù. ´ë½Å ±× À¯ÇüµéÀº
ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ´ëºÎºÐÀÇ ´Ù¸¥ ÁÖ·ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼ ¹ß°ßµÇ´Â ÀϹÝÀûÀÎ µ¥ÀÌÅÍ À¯Çü Áß ÀϺθ¦ ¸ðµ¨¸µÇϱ⿡ ÃæºÐÇÒ¸¸Å
ÃÑ°ýÀûÀÌ´Ù. ÀÌ ¼½¼Ç¿¡¼´Â ÀÚ¹Ù ¿ø½Ã ÄÚµå¿Í ÀÓÀÇÀûÀÎ Àڹ٠Ŭ·¡½ºµéÀÇ ÀÎÄÚµù°ú Çص¶¿¡ ´ëÇÑ ¾ÆÆÄÄ¡ SAOPÀÇ Áö¿øÀ» »ìÆ캸µµ·Ï
ÇÏ°Ú´Ù.
¸ÕÀú ¿ë¾îºÎÅÍ Á¤ÀÇÇغ¸ÀÚ. Á÷·ÄÈ ´Â ÀÚ¹Ù °´Ã¼¸¦ XML ÀνºÅϽº·Î º¯È¯ÇÏ´Â ÀýÂ÷ÀÌ°í, ºñÁ÷·Ä È´Â
XML·ÎºÎÅÍ ÀÚ¹Ù °³Ã¼¸¦ À籸ÃàÇÏ´Â ÀýÂ÷ÀÌ´Ù. ¾ÆÆÄÄ¡ SOAPÀº ÀÌ È°µ¿µéÀ» ¼öÇàÇϱâ À§ÇØ Á÷·ÄÀÚ ¿Í
ºñÁ÷·ÄÀÚ ¶ó´Â »ý¼ºÀÚ¸¦ È°¿ëÇÑ´Ù. ³ª´Â ÀÌ ±Û¿¡¼ ºñÁ÷·ÄÀÚ¿Í Á÷·ÄÀÚ ¶ó´Â ¹®±¸¸¦ Ç¥ÇöÇϱâ À§ÇØ
(ºñ)Á÷·ÄÀÚ ¶ó´Â Ãà¾à¾î¸¦ »ç¿ëÇÏ°Ú´Ù.
¾ÆÆÄÄ¡ SOAP ÅøŶ¿¡ Æ÷ÇÔµÈ ±âº» (ºñ)Á÷·ÄÀÚ ¼¼Æ®´Â ¼¼ ±×·ìÀÇ µ¥ÀÌÅÍ À¯ÇüÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. : °£´ÜÇÑ À¯Çü, º¹ÇÕ
À¯Çü ¹× Ư¼ö À¯Çü ÀÌ ±×°ÍÀÌ´Ù. °£´ÜÇÑ À¯Çü °ú º¹ÇÕ À¯Çü À̶ó´Â ¿ë¾î´Â SOAP 1.1
»ç¾ç¿¡¼ Á÷Á¢ °¡Á®¿Â °ÍÀÌ°í ¹®¸Æ»óÀÇ Àǹ̴ »ç¾ç ³»¿¡¼ÀÇ ÀÇ¹Ì¿Í µ¿ÀÏÇÏ´Ù. ³ª´Â À§ µÎ ±×·ì¿¡ Àß ¸ÂÁö ¾Ê´Â ÀÚ¹Ù À¯ÇüÀ» °¡¸®Å°±â
À§ÇØ Æ¯¼ö À¯Çü À̶ó´Â ¿ë¾î¸¦ ¸¸µé¾ú´Ù.
°£´ÜÇÑ À¯Çü
¾ÆÆÄÄ¡ SOAPÀº ÀÌ À¯ÇüµéÀ» ÅؽºÆ® ³ëµå¸¸À» ÀÚ½ÄÀ¸·Î °¡Áø Á¢±ÙÀÚ·Î Á÷Á¢ Á÷·ÄÈÇÑ´Ù. ÀϹÝÀûÀ¸·Î, XML ÀνºÅϽº´Â ´ÙÀ½
Çü½ÄÀ» °¡Áö°í ÀÖ´Ù.:
<accessor xsi:type="qname">
<!-- data -->
</accessor>
Ç¥ 1. ¾ÆÆÄÄ¡ SOAP¿¡¼ Áö¿øµÇ´Â °£´ÜÇÑ
À¯Çü
Java
SOAP
Á÷·ÄÀÚ
ºñÁ÷·ÄÀÚ
String
xsd:string
built-in *
StringDeserializer
*
Boolean
xsd:boolean
built-in *
BooleanObjectDeserializer
*
boolean
xsd:boolean
built-in *
BooleanDeserializer
*
Double
xsd:double
built-in *
DoubleObjectDeserializer
*
double
xsd:double
built-in *
DoubleDeserializer
*
Long
xsd:long
built-in *
LongObjectDeserializer
*
long
xsd:long
built-in *
LongDeserializer
*
Float
xsd:float
built-in *
FloatObjectDeserializer
*
float
xsd:float
built-in *
FloatDeserializer
*
Integer
xsd:int
built-in *
IntObjectDeserializer
*
int
xsd:int
built-in *
IntDeserializer
*
Short
xsd:short
built-in *
ShortObjectDeserializer
*
short
xsd:short
built-in *
ShortDeserializer
*
Byte
xsd:byte
built-in *
ByteObjectDeserializer
*
byte
xsd:byte
built-in *
ByteDeserializer
*
BigDecimal
xsd:decimal
built-in
DecimalDeserializer
GregorianCalendar
xsd:timeInstant
!
CalendarSerializer
CalendarSerializer
Date
xsd:date
DateSerializer
DateSerializer
QName
xsd:QName
QNameSerializer
QNameSerializer
built-in :
org.apache.soap.encoding.SOAPMappingRegistry
¿¡¼ ±¸ÇöµÇ´Â ³»ºÎ Ŭ·¡½º
.
* : ¾ÆÆÄÄ¡ SOAP version 2.1 ÀÌÈÄ
! : 2001³â 1¿ù, W3C XML Schema Datatypes »ç¾ç
(Âü°í
ÀÚ·á
)ÀÌ Á¦¾ÈµÈ ±Ç°í¾È »óÅ·Π¹Ù²ð ¶§ timeInstant°¡
dateTime
À¸·Î À̸§ÀÌ ¹Ù²î¾ú´Ù. ¾ÆÆÄÄ¡´Â ¾ÆÁ÷
xsd:dateTime
À» Áö¿øÇÏÁö ¾Ê´Â´Ù. (Âü°í
ÀÚ·á
)
³íÀǸ¦ ´õ ÁøÇàÇϱâ Àü¿¡, Ç¥
1 ¿¡¼ ¼¼°¡Áö Á¡À» Á» ´õ ÀÚ¼¼È÷ °ËÅäÇØ º¸ÀÚ. ¿ì¼± ´«Ä¡ ºü¸¥ µ¶ÀÚ¶ó¸é char
°¡ Áö¿øµÇÁö ¾Ê´Â´Ù´Â
Á¡À» ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù(Âü°í
ÀÚ·á
). ´ÙÇàÈ÷ char
¸¦ À§ÇÑ »ç¿ëÀÚ Á¤ÀÇ (ºñ)Á÷·ÄÀÚ¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº °£´ÜÇÑ ÀÏÀÌ´Ù.
µÑ°, ¾÷µ¥ÀÌÆ®µÈ BooleanDeserializer
´Â { "1", "t", "T" } °ªÀº boolean
¹®ÀÚ°¡ ÂüÀÓÀ», { "0", "f", "F" }´Â °ÅÁþÀÓÀ» Ç¥ÇöÇÑ´Ù´Â °ÍÀ» ÀνÄÇÒ ¼ö ÀÖ´Ù. ¼Â°, RPC È£ÃâÀÇ ¼ö½ÅÀÚ´Â ±âº»ÀûÀ¸·Î
¿ø½Ã ÄÚµå·Î ºñÁ÷·ÄÈÇÒ °ÍÀÌ´Ù. À̸¦ ÀÔÁõÇϱâ À§ÇØ, SOAP ¼¹ö°¡ ´ÙÀ½°ú °°Àº ÇϳªÀÇ ¸Þ¼Òµå¸¦ ³ªÅ¸³½´Ù°í °¡Á¤Çغ¸ÀÚ.
echoBoolean( Boolean b ) { .. }
Boolean
¸Å°³º¯¼ö¸¦ °¡Áø echoBoolean
À» È£ÃâÇϸé SOAP
Fault°¡ »ý¼ºµÈ´Ù.:
Exception while handling service request:
com.raverun.bool.Service.echoBool(boolean) -- no signature match
´ÙÇàÈ÷µµ, ´ëÀÀÇÏ´Â wrapper °´Ã¼¸¦ ¹ÝȯÇÒ ºñÁ÷·ÄÀÚ suite
(xxxObjectDeserializer
)°¡ ÀÖ´Ù. À̸¦ ¹ß»ý½ÃÅ°±â À§ÇØ ¿©·¯ºÐÀº ÀÌ ºñÁ÷·ÄÀÚÀÇ ±âº» ºñÁ÷·ÄÈ
ÇàÀ§¸¦ ¿À¹ö¶óÀ̵åÇØ¾ß ÇÑ´Ù. ¿©·¯ºÐÀº ÀÌ ±ÛÀÇ µÚ¿¡¼ ÀÌ°ÍÀÌ ¾î¶»°Ô ¼öÇàµÇ´ÂÁö¸¦ º¼ °ÍÀÌ´Ù.
º¹ÇÕ À¯Çü
ÀÚ¹Ù Ãø¸é¿¡¼ º¸¸é, º¹ÇÕ À¯ÇüÀº ±¸¼º ¿ä¼ÒµéÀ» °¡Áø À¯ÇüÀÌ´Ù. ÀÌ ¿ä¼ÒµéÀº ¼øÀüÈ÷ À̸§(¿¹ : ¿©·¯ °³ÀÇ ¸â¹ö ¼Ó¼ºÀ» °¡Áø
Àڹ٠Ŭ·¡½º)À̳ª ¼ø¼»óÀÇ À§Ä¡ (¿¹ : Array
³ª Vector °°Àº List µ¥ÀÌÅÍ
±¸Á¶
)¿¡ ÀÇÇØ ±¸º°µÈ´Ù. Listing
3 Àº º¹ÇÕ À¯ÇüÀÇ XML ÀνºÅϽº¸¦ º¸¿© ÁÖ°í ÀÖ´Ù.
Listing 3.
java.util.Hashtable¿¡ ´ëÇÑ XML ÀνºÅϽº
<hash xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">2</key>
<value xsi:type="xsd:string">two</value>
</item>
<item>
<key xsi:type="xsd:string">1</key>
<value xsi:type="xsd:string">one</value>
</item>
</hash>
Ç¥ 2. º¹ÇÕ À¯Çü¿¡ ´ëÇÑ Section 5
ÀÎÄÚµù
Java
SOAP
Á÷·ÄÀÚ/ºñÁ÷·ÄÀÚ
Java arrays
SOAP-ENC:Array
ArraySerializer
java.util.Vector
java.util.Enumeration
{http://xml.apache.org/xml-soap}Vector
*
VectorSerializer
java.util.Hashtable
{http://xml.apache.org/xml-soap}Map
HashtableSerializer
java.util.Map
{http://xml.apache.org/xml-soap}Map
MapSerializer
#
Arbitrary JavaBean
User-defined Qname
BeanSerializer
* :
¾ÆÆÄÄ¡ 2.1¿¡¼
VectorSerializer
´Â SOAP ¹è¿·Î Á÷·ÄÈÇÑ´Ù. ±×·¯³ª 2.2.¿¡¼´Â ÀÚüÀûÀÎ ¾ÆÆÄÄ¡
SOAP °íÀ¯ À¯ÇüÀ¸·Î ¼Ò°³µÇ¾ú´Ù.
# :
MapSerializer
´Â ½ÇÁ¦·Î HashtableSerializer
È£ÃâÀ» À§ÀÓÇÑ´Ù.
Ç¥
2 ¿¡¼ º¼ ¼ö ÀÖµíÀÌ, BeanSerializer
´Â º¹ÀâÇÑ Àڹ٠Ŭ·¡½ºµéÀ» ÀÓÀÇÀûÀ¸·Î Àü¼ÛÇϴµ¥ »ç¿ëµÉ
¼ö ÀÖ´Ù. ±×·¯³ª Á÷·ÄÈµÈ Àڹ٠Ŭ·¡½º´Â JavaBeans ¼³°è ÆÐÅÏÀ» µû¶ó¾ß ÇÑ´Ù. ; ±¸Ã¼ÀûÀ¸·Î ¸»ÇØ, Á÷·ÄÈÇÏ°íÀÚ ÇÏ´Â ¸ðµç
¼Ó¼º¿¡ ´ëÇØ ¸Å°³ º¯¼ö°¡ ¾ø´Â public
»ý¼ºÀÚ ¿Í getter/ setter ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ¾î¾ß
ÇÑ´Ù. ¿©·¯ºÐÀÇ getter/setter ¸Þ¼Òµå°¡ JavaBeans ³×ÀÌ¹Ö °ü½ÀÀ» ¸¸Á·ÇÏÁö ¾Ê´Â »óȲ¿¡¼´Â
BeanInfo
Ŭ·¡½º¸¦ ÅëÇØ BeanSerializer
·Î À̵éÀ» °ø°³ÇÒ ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î, Foo
Ŭ·¡½º¸¦ Á÷·ÄÈÇØ¾ß ÇÒ °æ¿ì java.beans.BeanInfo
ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â FooBeanInfo
¶ó´Â Ŭ·¡½º¸¦ »ý¼ºÇÑ´Ù. ¿¹Á¦·Î Listing
4 ¸¦ º¸ÀÚ.
Listing 4. FooBeanInfo Ŭ·¡½º
import java.lang.reflect.*;
import java.beans.*;
/*
* Foo has a single String property by the name of "s".
* And its setter and getter methods are called "_setS" and "_getS"
* respectively, thus violating the JavaBean spec. Passing Foo to BeanSerializer
* will cause this exception to be thrown:
* Error: Unable to retrieve PropertyDescriptor for property 's'
* of class "Foo".
*/
public class FooBeanInfo extends SimpleBeanInfo{
private final static Class c = Foo.class;
public PropertyDescriptor[] getPropertyDescriptors()
{
try{
Class[] sp = new Class[] {String.class};
Method s_setter = c.getMethod( "_setS", sp );
Method s_getter = c.getMethod( "_getS", null );
PropertyDescriptor spd = new PropertyDescriptor("s", s_getter, s_setter);
PropertyDescriptor[] list = { spd };
return list;
}catch (IntrospectionException iexErr){
throw new Error(iexErr.toString());
}catch (NoSuchMethodException nsme){
throw new Error(nsme.toString());
}
}
}
Ư¼ö À¯Çü
À§ÀÇ µÎ Ä«Å×°í¸®¿¡ Àß ¸ÂÁö ¾Ê´Â ¸¹Àº ÀÚ¹Ù À¯ÇüµéÀÌ ÀÖ´Ù.; SOAPÀº ÀÌ À¯Çüµéµµ Àß Ã³¸®ÇÒ ¼ö ÀÖ´Ù.
Null and void
¾ÆÆÄÄ¡ SOAPÀº xsi:null
¼Ó¼ºÀ» Ãß°¡ÇÔÀ¸·Î½á null °ªÀ» °¡Áø °´Ã¼ ÂüÁ¶¸¦ "Âü"À¸·Î Á÷·ÄÈ
°ÍÀÌ´Ù. ÀÌ°ÍÀÇ ±âº» ÇàÀ§´Â ´ÙÀ½°ú °°Àº xsi:null
¼Ó¼ºÀÇ ´Ù¸¥ °¡´ÉÇÑ º¯ÇüµéÀº ¹«½ÃÇÑ´Ù.:
xsi:nil="true"
(XML Schema Part 1¿¡ µû¶ó) (Âü°í
ÀÚ·á
)
xsi:null="1"
(SOAP 1.1¿¡ µû¶ó ) (Âü°í
ÀÚ·á
)
Listing
5 ´Â null °ªÀ» °¡Áö°í ÀÖ´Â Á÷·ÄÈµÈ °´Ã¼ ÂüÁ¶ÀÇ ¿¹ÀÌ´Ù.
Listing 5.
Èñ¼Ò º¤Å͸¦ °¡Áø SOAP Ç¥Çö
<myvec xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:Vector">
<item xsi:type="xsd:string">Hello World</item>
<item xsi:type="xsd:anyType" xsi:null="true"/>
</myvec>
¾ÆÆÄÄ¡ SOAP 2.1¿¡¼ null ¸â¹ö¸¦ °¡Áø º¤Å͸¦ Àü¼ÛÇϸé null ÂüÁ¶¸¦ ºñÁ÷·ÄÈÇÒ ºñÁ÷·ÄÀÚ°¡ Á¸ÀçÇÏÁö ¾Ê±â
¶§¹®¿¡ SOAPException
ÀÌ ¹ß»ýÇÑ´Ù.
UrTypeDeserializer
´Â ÀÌ ¶§¹®¿¡ µµÀԵȴÙ.
VectorSerializer
´Â XML ½ºÅ°¸¶ÀÇ ³»Àå µ¥ÀÌÅÍ À¯Çü °èÃþ ³»ÀÇ ·çÆ® Ŭ·¡½ºÀÎ
xsd:anyType
¿¡ null ÂüÁ¶¸¦ ¸ÅÇÎÇÑ´Ù. (2001 XML ½ºÅ°¸¶ ±Ç°í¾È¿¡¼ xsd:ur-typeÀº
´©¶ôµÇ¾ú´Ù.)
¹®ÀÚ¿ ¸Å°³º¯¼ö¸¦ ó¸®ÇÒ ¶§ Á¢±ÙÀÚ°¡ xsi:null
¼Ó¼ºÀ» °¡ÁöÁö ¾ÊÀº ºó elementÀÎ °æ¿ì ¾ÆÆÄÄ¡
SOAPÀº null °´Ã¼ ÂüÁ¶¸¦ ºñÁ÷·ÄÈÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î, ¿ø°Ý ¸Þ¼Òµå°¡ ´ÙÀ½ String
¸Å°³º¯¼ö¸¦
±â´ëÇÒ °æ¿ì :
public void eat(String s) //1
±×¸®°í ¿©·¯ºÐÀÌ ÀÌ ¿äûÀÌ ´ÙÀ½°ú °°ÀÌ À¥ ¼ºñ½º·Î Àü¼ÛµÈ´Ù°í °¡Á¤ÇÒ °æ¿ì:
<ns1:eat>
<s xsi:type="xsd:string"/>
</ns1:eat>
ÀÌ°ÍÀº ºó String
À¸·Î ºñÁ÷·ÄÈÇÒ °ÍÀÌ´Ù.
¹ÙÀ̳ʸ® µ¥ÀÌÅÍ ±ä ±¸Á¶ÀÇ ¹ÙÀ̳ʸ® µ¥ÀÌÅ͸¦ Àü¼ÛÇØ¾ß ÇÒ °æ¿ì ´ÙÀ½ ¼¼ ¿É¼ÇÀÌ ÀÖ´Ù.:
¹ÙÀÌÆ® ¹è¿
16Áø ¹®ÀÚ¿
MIME ÷ºÎ
Ç¥ 3. µ¥ÀÌÅÍ Àü¼ÛÇϱâ
Java
SOAP
Á÷·ÄÀÚ/ºñÁ÷·ÄÀÚ
¹ÙÀÌÆ®¹è¿
SOAP-ENC:base64
#
Base64Serializer
16Áø ¹®ÀÚ¿
xsd:hexBinary
HexDeserializer
javax.activation.DataSource
xsd:anyType
MimePartSerializer
javax.activation.DataHandler
xsd:anyType
MimePartSerializer
# : ÃÖ½Å
SOAPMappingRegistry
¹öÀüÀº ºñÁ÷·ÄÈ °úÁ¤ µ¿¾È
{http://www.w3.org/2001/XMLSchema}base64Binary
-
SOAP-ENC:base64
ÀÇ ÃÖ»óÀ§ À¯Çü -À» Áö¿øÇÑ´Ù.
wrapper Ŭ·¡½ºÀÎ org.apache.soap.encoding.Hex
´Â 16Áø ¹®ÀÚ¿À» ĸ½¶ÈÇϴµ¥
»ç¿ëµÈ´Ù. ÀÌ°ÍÀº (ºñ)Á÷·ÄȵǴ Ŭ·¡½ºÀÌ´Ù. wrapper Ŭ·¡½º´Â a¿¡¼ f±îÁö 16Áø °ª¿¡ ´ëÇÑ ¼Ò¹®ÀÚ¿Í ´ë¹®ÀÚ ¸ðµÎ¸¦ ¼ö¿ëÇÒ
°ÍÀÌ´Ù. 16Áø ¹®ÀÚ¿ÀÌ ¹®ÀÚ¸¦ ¦¼ö·Î °¡Áöµµ·Ï Çϱ⸸ ÇÏ¸é µÈ´Ù.
¾ÆÆÄÄ¡ SOAPÀº MIME/multipart °ü·Ã ¸Þ½ÃÁö¿¡ SOAP ºÀÅõ¸¦ Æ÷ÇÔ½ÃÅ°µµ·Ï Áö¿øÇÑ´Ù. ¹ÙÀ̳ʸ® µ¥ÀÌÅÍ´Â MIME
÷ºÎ ¹®¼·Î Àü´ÞµÉ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº SwA (SOAP Messages with Attachments) »ç¾çÀ» µû¸¥´Ù.
(Âü°í
ÀÚ·á
)
Literal XML ¿©·¯ºÐÀÌ XML
ºÎºÐÀ» ¹®ÀÚ¿·Î Àü¼ÛÇÑ´Ù¸é ³»ÀåµÈ ¹®ÀÚ¿ Á÷·ÄÀÚ´Â element ÄÁÅÙÆ®·Î½á ºÎÀû´çÇÑ ¸ðµç ¹®ÀÚµéÀ» »çÀü Á¤ÀÇµÈ ¹®ÀÚ¿ ¿£ÅÍƼ·Î ¹Ù²Ü
°ÍÀÌ´Ù. -- ¿¹¸¦ µé¾î,
<´Â <
´Â ·Î ¹Ù²ð
°ÍÀÌ´Ù. SOAP RPC ±¸Á¶ ³»¿¡ Æ÷ÇÔµÈ literal XMLÀ» Àü¼ÛÇÏ·Á¸é µÎ °¡Áö ¿É¼ÇÀÌ ÀÖ´Ù. ¿ì¼± XML ¹®ÀÚ¿À»
CDATA ¼½¼Ç ³»¿¡ µÑ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ ¹æ½ÄÀº À߸ø ¸¸µé¾îÁø XMLµµ ÇÔ²² º¸³»°Ô µÉ °ÍÀÌ´Ù. µÎ¹ø° ¹æ¹ýÀº ¿©·¯ºÐÀÇ XML
ºÎºÐÀ» DOM¿¡ ·ÎµùÇÏ¿© ¹®¼ element¸¦ ¸Å°³º¯¼ö·Î º¸³»´Â °ÍÀÌ´Ù. ¾ÆÆÄÄ¡ SOAPÀº
XMLParameterSerializer
¸¦ ÅëÇØ org.w3c.dom.Element
ÀνºÅϽº¸¦ Á÷·ÄÈÇÒ °ÍÀÌ´Ù.
À¯Çü ¸ÅÇÎ ÆÐÅÏ
¾ÆÆÄÄ¡ SOAPÀ¸·Î SOAP Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö¸¦ ÇÁ·Î±×·¡¹ÖÇÒ ¶§ ¿©·¯ºÐÀº Ç¥
4 ¿¡ ³ª¿Í ÀÖ´Â ¸Þ½ÃÁö¸¦ °¡Áø ¿°·Á½º·¯¿î
java.lang.IllegalArgumentException
À» ¸¸³¯ ¼ö ÀÖ´Ù.
Ç¥ 4. ÀϹÝÀûÀÎ À¯ÇüÀÇ mapper ¿¡·¯
¸Þ½ÃÁö
¸Þ½ÃÁö
1
No Serializer found to serialize a 'xxx' using encoding style
'yyy'
2
No Deserializer found to deserialize a ':Result' using encoding
style 'yyy'
3
No mapping found for 'xxx' using encoding style
'yyy'
¾ÆÆÄÄ¡ SOAP¿¡¼ÀÇ Á÷·ÄÈ¿Í ºñÁ÷·ÄÈ ¸ÞÄ¿´ÏÁòÀº ·¹Áö½ºÆ®¸®¿¡ Á¤ÀÇµÈ À¯Çü ¸ÅÇÎ ÀÌ »ç¿ë°¡´ÉÇÑÁö¿¡ ÀÇÁ¸ÇÑ´Ù. À¯Çü
¸ÅÇÎÀº Àڹ٠Ŭ·¡½º (ȤÀº ¿ø½Ã ÄÚµå)¸¦ XML·Î ¾î¶»°Ô º¯È¯ÇÏ´ÂÁö, ȤÀº ±× ¿ªÀ» Á¤ÀÇÇÑ´Ù. ·¹Áö½ºÆ®¸®´Â
org.apache.soap.encoding.SOAPMappingRegistry
Ŭ·¡½ºÀÇ ÀνºÅϽºÀÌ´Ù.
±âº»ÀûÀ¸·Î SOAP Ŭ¶óÀ̾ðÆ®¿Í SOAP ¼¹ö ¸ðµÎ µ¿ÀÏÇÑ À¯Çü ¸ÅÇÎ ¼¼Æ®¸¦ »ó¼ÓÇÒ °ÍÀÌ´Ù.
±×¸² 1. ¹®¸Æ ³»¿¡¼ÀÇ Á÷·ÄÈ/ºñÁ÷·ÄÈ
¾Æ·¡ÀÇ ³íÀÇ¿¡¼, ³ª´Â SOAP ¸Þ½ÃÁö ó¸®ÀÇ ¹æÇâÀ» Ç¥½ÃÇϱâ À§ÇØ inbound¿Í outbound¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù.
¿¹¸¦ µé¾î, SOAP ¼¹öÀÇ ¹®¸Æ ³»¿¡¼ Á÷·ÄÈ´Â outbound ¸Þ½ÃÁö¸¦ »ý¼ºÇÏ´Â ¹æ¹ýÀ» °¡¸®Å²´Ù. ÀÌ °£´ÜÇÑ ¸ðµ¨Àº ¿ì¸®ÀÇ ³íÀǸ¦
¹æÇØÇÏÁö ¾ÊÀ¸¸é¼ Áß°³ SOAP ¼¹ö¸¦ ¹«½ÃÇÑ´Ù. ±×¸²
1 Àº ³íÀǵǰí ÀÖ´Â ¾ÆÅ°ÅØó¸¦ ³ªÅ¸³»°í ÀÖ´Ù.
À¯Çü ¸ÅÇÎ ·¹Áö½ºÆ®¸®¿Í »óÈ£ÀÛ¿ëÇϱâ À§ÇÑ ÇÁ·Î±×·¥ÀûÀÎ ±¸¹®À» ¼³¸íÇϱâ Àü¿¡ ·¹Áö½ºÆ®¸®ÀÇ ³»ºÎ ±¸Çö¿¡ ´ëÇÑ ¸î °¡Áö °³³äÀ» ¾Ë¸é
µµ¿òÀÌ µÉ °ÍÀÌ´Ù. °³¹ßÀÚ°¡ »óÈ£ÀÛ¿ëÇÏ´Â ·¹Áö½ºÆ®¸®´Â ½ÇÁ¦·Î 4°³ÀÇ ³»ºÎ Hashtable
s (¾Æ·¡ÀÇ ¸ñ·Ï
ÂüÁ¶)À» °¡Áö°í ÀÖ´Ù.
Á÷·ÄÀÚ¿ë ·¹Áö½ºÆ®¸®
ºñÁ÷·ÄÀÚ¿ë ·¹Áö½ºÆ®¸®
Java2XML¿ë ·¹Áö½ºÆ®¸®
XML2Java¿ë ·¹Áö½ºÆ®¸®
Á÷·ÄÈ¿Í ºñÁ÷·ÄÈ´Â ´ëĪÀûÀÎ ±â´ÉµéÀÌ´Ù.; µû¶ó¼ ³ª´Â Á÷·ÄÈ À¯Çü ¸ÅÇÎÀÌ ¾î¶»°Ô ÀúÀåµÇ´ÂÁö¸¸ ¼³¸íÇÒ °ÍÀÌ°í, ¿©·¯ºÐÀÌ ³»
¼³¸í¿¡¼ ºñÁ÷·ÄÈÀÇ °æ¿ì¸¦ ÃßÁ¤ÇÒ ¼ö Àֱ⠹ٶõ´Ù. Á÷·ÄÈ À¯Çü ¸ÅÇÎÀº À§ ¸ñ·Ï¿¡¼ A,C, D ÇؽÃÅ×ÀÌºí¿¡ ÀÖ´Â ¿£Æ®¸®µé¿¡ ÀÇÇØ
Ç¥ÇöµÈ´Ù. Foo.
Ŭ·¡½º °´Ã¼¸¦ SOAP À¯Çü "{http://someuri}foo"À¸·Î
Á÷·ÄȽÃÅ°´Â FooSerializer Á÷·ÄÀÚ¸¦ ¿¹·Î µé¾î º¸ÀÚ. ¿©·¯ºÐÀÌ ÀÌ À¯Çü ¸ÅÇο¡ ´ëÇÑ À¯ÀÏÇÑ Å°¸¦ ³ªÅ¸³»±â À§ÇØ ¹®ÀÚ¿ k¸¦
°í·ÁÇÏ°í ÀÖ´Ù¸é, À̵éÀº Á÷·Äȸ¦ À§ÇØ ¸¸µé¾îÁø ¸ÅÇÎÀÌ´Ù.
Hashtable A: k
°¡ FooSerializer.class
¿¡ ¸ÅÇεȴÙ.
Hashtable C: k
°¡ {http://someuri}foo
¿¡ ¸ÅÇεȴÙ.
ÇؽÃÅ×À̺í A¿Í C ¸ðµÎ ÀÚ¹Ù ·±Å¸ÀÓ À¯Çü°ú encodingStyleURI
¸¦ °áÇÕÇÏ¿© »ý¼ºµÈ °øÀ¯µÈ
¹®ÀÚ¿ÀÌ ÀԷµȴÙ. ÇؽÃÅ×À̺í A´Â org.apache.soap.util.xml.Serializer
ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ÀÚ¹Ù °´Ã¼ ÁýÇÕÀ» À¯ÁöÇÏ´Â ¹Ý¸é ÇؽÃÅ×À̺í C´Â QNames ÁýÇÕÀ» °ü¸®ÇÑ´Ù. Á÷·ÄÈ ÀýÂ÷ µ¿¾È ·¹Áö½ºÆ®¸®´Â µÎ
°³ÀÇ API È£ÃâÀ» ¹Þ´Â´Ù.
Serializer querySerializer( javaType, encodingStyleURI )
QName queryElementType (javaType, encodingStyleURI )
¾ÆÆÄÄ¡ SOAPÀº Foo
ÀνºÅϽº¸¦ Á÷·ÄÈÇ϶ó´Â ¸í·ÉÀ» ¹ÞÀ¸¸é
querySerializer
¸Þ¼Òµå¸¦ È£ÃâÇÏ°í FooSerializer
¸¦ ´Ù½Ã
°¡Á®¿Â´Ù. ±×·¯¸é FooSerializer
°¡ °´Ã¼¸¦ ¹è¿Çϱâ À§ÇØ È£ÃâµÈ´Ù.; À̶§
xsi:type
¼Ó¼º °ªÀ» °Ë»öÇϱâ À§ÇØ queryElementTyp
eÀ» È£ÃâÇÒ
°ÍÀÌ´Ù.
querySerializer°¡ Serializer
ÀνºÅϽº¸¦ ¹ÝȯÇϴµ¥ ½ÇÆÐÇÏ¸é ¿©·¯ºÐÀº Ç¥
4 ¿¡ ÀÖ´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ ¾ò°Ô µÉ °ÍÀÌ´Ù. ¹Ý¸é queryElementType
ÀÌ ÀÏÄ¡µÇ´Â QNameÀ»
¹ÝȯÇÏÁö ¾ÊÀ¸¸é ¿¡·¯ ¸Þ½ÃÁö 3ÀÌ ¹ÝȯµÈ´Ù.
SOAP Ŭ¶óÀ̾ðÆ®¿¡ À¯Çü ¸ÅÇÎ Á¤ÀÇÇϱâ
¿©·¯ºÐÀº SOAPMappingRegistry
ÀνºÅϽº¿¡ mapTypes()
¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î½á ¿©·¯ºÐÀÇ Æ¯¼ö À¯ÇüÀ» ó¸®Çϵµ·Ï ·¹Áö½ºÆ®¸®¸¦ È®ÀåÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸Þ¼Òµå ¼¸íÀº ´ÙÀ½°ú °°´Ù.:
mapTypes( String, QName, Class, Serializer, Deserializer );
ÇؽÃÅ×À̺í C¿Í D·Î µ¿½Ã¿¡ ¸ÅÇÎÀÌ µî·ÏµÇµµ·Ï ÇÏ°í ½ÍÀ¸¸é QName
°ú Class ¸Å°³º¯¼ö°¡
ÇʼöÀûÀÌ´Ù. Listing
6 Àº ¾ÆÆÄÄ¡ SOAPÀÇ ±âº» À¯Çü ¸ÅÇεéÀÇ ¿¹ÀÌ´Ù.
Listing 6.
¿¹Á¦ Ŭ¶óÀ̾ðÆ® maptypes
HashtableSerializer hashtableSer = new HashtableSerializer();
mapTypes("http://schemas.xmlsoap.org/soap/encoding/",
new QName("http://xml.apache.org/xml-soap", "Map"),
Hashtable.class,
hashtableSer,
hashtableSer);
mapTypes("http://schemas.xmlsoap.org/soap/encoding/",
new QName("http://schemas.xmlsoap.org/soap/encoding/", "Array"),
null,
null,
new ArrayDeserializer());
mapTypes( encStyleURI, Qname, Foo.class, null, null );
Listing
6 ÀÇ ÇؽÃÅ×ÀÌºí ¸ÅÇÎÀº inbound¿Í outbound 󸮰¡ ¸ðµÎ µî·ÏµÇ´Â ´ëĪÇü ¸ÅÇÎ ÀÇ ¿¹ÀÌ´Ù. µÎ¹ø° ¸ÅÇÎÀº
ºñ´ëĪÇü ¸ÅÇÎ Àε¥, ArrayDeserializer
¸¸ ÇؽÃÅ×À̺í B¿¡ µî·ÏÇÑ´Ù. ¹è¿ Á÷·ÄÈ´Â
SOAPMappingRegistry.querySerializer()
³»¿¡¼ ¹ß»ýÇϴµ¥, ÀÚ¹Ù À¯ÇüÀÌ ¹è¿ÀÎÁö¸¦
È®ÀÎÇϱâ À§ÇØ introspectionÀ» »ç¿ëÇÏ°í ArraySerializer
ÀÇ »õ·Î¿î ÀνºÅϽº¸¦ ¹ÝȯÇÑ´Ù.
¸¶Áö¸· ¸ÅÇÎÀº ¼ø¼öÇÑ ¿¬°áÀÌ´Ù.
SOAP ¼¹ö¿¡ À¯Çü ¸ÅÇÎ Á¤ÀÇÇϱâ
¼¹ö Ãø¿¡¼´Â À¯Çü ¸ÅÇÎÀÌ ¹èÄ¡ ±â¼úÀÚ (deployment descriptor )¶ó´Â XML ÆÄÀÏ·Î
Á¤ÀǵȴÙ. ¾ÆÆÄÄ¡ SOAPÀº ½ÇÁ¦·Î ¹èÄ¡ ±â¼úÀÚÀÇ ³»¿ë¿¡¼ SOAPMappingRegistry
ÀνºÅϽº¸¦
±¸ÃàÇÑ´Ù. XML ¹®¹ýÀ» À§ÇÑ ½ºÅ°¸¶´Â ÀÌ ±Û°ú ÇÔ²² Á¦°øµÇ´Â ¼Ò½º ¹èÆ÷ÆÇ¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù (Âü°í
ÀÚ·á ). Listing
7 ¿¡¼ ÀÌ ½ºÅ°¸¶ÀÇ ÀϺθ¦ º¼ ¼ö Àִµ¥, map elementÀÇ ¼Ó¼ºÀ» ³ªÅ¸³»°í ÀÖ´Ù.; ±× ¼Ó¼ºÀº
SOAPMappingRegistry
ÀÇ mapTypes
¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö¸¦ ¹Ì·¯¸µÇÑ´Ù.
Â÷ÀÌÁ¡Àº qname
ÀÌ map¿¡ ÇʼöÀûÀ̶ó´Â °Í »ÓÀÌ´Ù.
Listing
7. ¾ÆÆÄÄ¡ SOAP ¹èÄ¡ ±â¼úÀÚÀÇ map elememnt¿¡ ´ëÇÑ ½ºÅ°¸¶ÀÇ ÀϺκÐ
<complexType name="mapType">
<attribute name="encodingStyle" type="xsd:anyURI"/>
<attribute name="qname" type="xsd:string"/>
<attribute name="javaType" type="xsd:string" use="optional"/>
<attribute name="java2XMLClassName" type="xsd:string" use="optional"/>
<attribute name="xml2JavaClassName" type="xsd:string" use="optional"/>
</complexType>
ÄÄÆÄÀÏµÈ »ç¿ëÀÚ Á¤ÀÇ ¸ÅÇÎ
À¯Çü ¸ÅÇεéÀ» SOAPMappingRegistry
ÀÇ ÇÏÀ§ Ŭ·¡½º¿¡ ÅëÇÕÇϸé À¯Çü ¸ÅÇÎÀ» ¼öÀÛ¾÷À¸·Î
¼±¾ðÇÏ´Â Áö°Ü¿î ÀÛ¾÷À» ¶Ù¾î³ÑÀ» ¼ö ÀÖ´Ù. ÀÌ ÇÏÀ§ Ŭ·¡½º´Â Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö ¸ðµÎ¿¡¼ »ç¿ëµÉ ¼ö ÀÖ´Ù. Listing
8 Àº ÀÚüÀûÀÎ ¹è¿ (ºñ)Á÷·ÄÀÚ¸¦ Á¦°øÇÏ´Â SOAPMappingRegistry
ÇÏÀ§ Ŭ·¡½º¿¡ ´ëÇÑ ÄÚµå
»ùÇÃÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù.
Listing 8. public Ŭ·¡½º MySmrÀ» ÇÏÀ§ Ŭ·¡½º·Î
ÅëÇÕÇϸé SOAPMappingRegistry°¡ È®ÀåµÊ
public MySmr()
{
super();
registerMyMappings();
}
public MySmr(String schemaURI)
{
super(schemaURI);
registerMyMappings();
}
private void registerMyMappings()
{
MyArraySerializer arraySer = new MyArraySerializer();
mapTypes(Constants.NS_URI_SOAP_ENC,
new QName(Constants.NS_URI_SOAP_ENC, "Array"),
null,
arraySer,
arraySer);
}
}
È£ÃâÀÚ Ãø¿¡¼ ÀÌ·¯ÇÑ »ç¿ëÀÚ Á¤ÀÇ SOAPMappingRegistry
¸¦ »ç¿ëÇÏ·Á¸é
Call
°´Ã¼ÀÇ setSOAPMappingRegistry()
¸Þ¼Òµå¿¡ ´ëÇÑ ¸Å°³º¯¼ö·Î
À̸¦ Àü´ÞÇÑ´Ù. Á¦°øÀÚ Ãø¿¡¼´Â ¿©·¯ºÐÀÇ ¸ðµç °³º°ÀûÀÎ map element¸¦ »èÁ¦ÇÏ°í ´ë½Å Listing
9 ¿Í °°ÀÌ ¹èÄ¡ ±â¼úÀÚ¸¦ ¼öÁ¤ÇÑ´Ù.
Listing 9. ¹èÄ¡ ±â¼úÀÚ
º¯°æ
<isd:service ...>
// other elements here
<isd:mappings defaultRegistryClass="com.raverun.array.MySmr" />
</isd:service>
¾ÆÆÄÄ¡ SOAPÀÌ »óÀÌÇÑ ½ºÅ°¸¶ À̸§°ø°£µéÀ» ó¸®ÇÏ´Â ¹æ¹ý
Listing
9 ¿¡¼ ¿©·¯ºÐÀº SOAPMappingRegistry
Ŭ·¡½º°¡ String
¸Å°³º¯¼ö¸¦ ÃëÇÏ´Â ¿À¹ö·ÎµåµÈ »ý¼ºÀÚ¸¦ °¡Áö°í ÀÖÀ½À» ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù. ÀÌ ¸Å°³º¯¼ö´Â ½ÇÁ¦·Î W3CÀÇ XML ½ºÅ°¸¶ ¾ð¾îÀÇ Æ¯Á¤
¹öÀüÀ» ³ªÅ¸³»´Â URIÀÌ´Ù. ¾ÆÆÄÄ¡ SOAPÀÌ ¼ö¿ëÇÏ´Â ¹öÀüÀº org.apache.soap.Constants
³»¿¡ ÃÖÁ¾ÀûÀ¸·Î »çÀü Á¤ÀǵǾî ÀÖ´Ù.
Constants.NS_URI_1999_SCHEMA_XSD
=
http://www.w3.org/1999/XMLSchema
Constants.NS_URI_2000_SCHEMA_XSD
=
http://www.w3.org/2000/10/XMLSchema
Constants.NS_URI_2001_SCHEMA_XSD
=
http://www.w3.org/2001/XMLSchema
¿©·¯ºÐÀÌ ¸Å°³ º¯¼ö°¡ ¾ø´Â »ý¼ºÀÚ·Î SOAPMappingRegistry
¸¦ ÃʱâÈÇÏ¸é ¾ÆÆÄÄ¡ SOAPÀº
±âº»ÀûÀ¸·Î 1999 À̸§°ø°£¿¡ À¯ÇüÀ» Á÷·ÄÈÇÒ °ÍÀÌ´Ù. ´ÙÁß ºÎ¿©µÈ »ý¼ºÀÚ¸¦ È£ÃâÇÏ¸é ½ÇÁ¦·Î xsd
À̸§°ø°£¸¸
¿À¹Ù¶óÀ̵åÇÑ´Ù.; SOAP ºÀÅõ¿¡ ¼±¾ðµÈ xsi
À̸§°ø°£Àº ¹Ù²îÁö ¾ÊÀº ä·Î ÀÖ´Ù. ÀÌ°ÍÀº SOAP ºÀÅõ°¡
ÀÚ½ÅÀÇ À̸§°ø°£ Á¢µÎ»ç ¸ÅÇÎÀ» Constants.NS_URI_CURRENT_SCHEMA_XSD
¿Í
Constants.NS_URI_CURRENT_SCHEMA_XSI
¿¡¼ Á÷Á¢ °¡Á®¿À°í, ÀÌ°ÍÀÌ 1999 À̸§°ø°£À»
°¡¸®Å°±â ¶§¹®ÀÌ´Ù. ÀÌ·¯ÇÑ °áÁ¡Àº ÃֽŠCVS ¼Ò½º ¸±¸®Áî (Âü°í
ÀÚ·á )¿¡¼ °íÃÄÁ³´Ù. ±×·¯³ª ºñÁ÷·ÄÈ °üÁ¡¿¡¼ º¸¸é ¾ÆÆÄÄ¡ SOAPÀº ³ª¿µÈ ¼¼ ¹öÀü Áß ¾îµð¿¡¼ÀÇ ½ºÅ°¸¶ À¯Çüµµ Àß Ã³¸®ÇÒ
¼ö ÀÖ´Ù.
ÀÎÄÚµù ½ºÅ¸ÀÏ°ú À¯Çü ¸ÅÇÎ
À¯Çü ¸ÅÇÎ ·¹Áö½ºÆ®¸®ÀÇ Æ¯¼º¿¡ ´ëÇÑ ¿ì¸®ÀÇ Áö½Ä¿¡ ÀÇÇϸé encodingStyleURI
´Â Á÷·ÄÈ¿Í
ºñÁ÷·ÄÈ°¡ ¾î¶»°Ô ÁøÇàµÇ¾î¾ß ÇÏ´ÂÁö °áÁ¤Çϴµ¥ Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù. À̹ø ¼½¼Ç¿¡¼ ³ª´Â
encodingStyleURI
ÀÇ »ç¿ë¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â ¸î °¡Áö ÇÁ·Î±×·¡¹Ö »çÇ×µéÀ» °Á¶ÇÏ°Ú´Ù.
¿ì¼±, SOAP 1.1 »ç¾çÀº "SOAP ¸Þ½ÃÁö¿¡ ´ëÇÑ ±âº» ÀÎÄÚµùÀÌ Á¤ÀǵÇÁö ÀÖÁö ¾Ê´Ù"¶ó°í ºÐ¸íÇÏ°Ô ¾ð±ÞÇÏ°í ÀÖ´Ù. µû¶ó¼
¾ÆÆÄÄ¡ SOAP¿¡¼ ±âº» encodingStyleURI
´Â nullÀÌ´Ù. ¿©·¯ºÐÀÌ
Call
°´Ã¼³ª °¢ ¸Å°³º¯¼öÀÇ ¼±¾ð ³»ÀÇ °ª¿¡ À̸¦ ÃʱâÈÇÏÁö ¾Ê¾Ò´Ù¸é
SOAPMappingRegistry
ÀÇ setDefaultEncodingStyle
¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î½á À̸¦ ¼öÇàÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ·ÎÄà ¹üÀ§ÀÇ encodingStyleURI
¼Ó¼ºÀ» ¿©·¯ºÐÀÇ
¸ðµç ¸Å°³º¯¼ö Á¢±ÙÀÚ¿¡ Ãß°¡ÇÏ´Â °Í°ú °°´Ù.
µÑ°, SOAP ÀÀ´ä°ú SOAP ¿äûÀÇ encodingStyle
ÀÌ ´Þ¶ó¾ß ÇÏ´Â ½Ã³ª¸®¿À¸¦ °í·ÁÇØ º¸ÀÚ.
³íÀǸ¦ ¼ö¿ùÇÏ°Ô Çϱâ À§ÇØ Listing
10 ÀÇ countKids()
¸Þ¼Òµå¸¦ °ËÅäÇØ º¸ÀÚ. ÀÌ ¸Þ¼ÒµåÀÇ inbound
encodingStyle
s°ú outbound encodingStyle
Àº °¢°¢
literal XML°ú Section 5ÀÌ´Ù.
Listing 10. ¿¹Á¦ SOAP ¼¹öÀÇ
ÄÚµå ºÎºÐ
public int countKids( Element el ){
return( DOMUtils.countKids(el, Node.ELEMENT_NODE) );
}
¿©·¯ºÐÀÌ Listing
11 ÀÇ ÄÚµå·Î countKids()
¸¦ È£ÃâÇϸé SOAP ¿¡·¯°¡ ´ÙÀ½ ¸Þ½ÃÁö¿Í ÇÔ²² ¹ÝȯµÉ °ÍÀÌ´Ù. :
java.lang.IllegalArgumentException: I only know how to serialize an
'org.w3c.dom.Element'
Listing 11. RPC È£ÃâÀ»
À§ÇÑ ÄÚµå ºÎºÐ
Call call = new Call();
Vector params = new Vector();
params.addElement( new Parameter("xmlfile",
Element.class,
e,
Constants.NS_URI_LITERAL_XML) );
call.setParams( params );
call.invoke ( url, "" );
¿Ö ÀÌ·± ¿¡·¯°¡ ¹ß»ýÇß´ÂÁö ÀÌÇØÇÏ·Á¸é, ¾ÆÆÄÄ¡ SOAP (SOAP ¼¹ö »óÀÇ)ÀÌ outbound ¸Þ½ÃÁö¿¡ ¾î¶²
encodingStyle
À» »ç¿ëÇÒÁö °áÁ¤Çϱâ À§ÇØ »ç¿ëÇÏ´Â ¾Ë°í¸®ÁòÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. :
»ç¿ë°¡´ÉÇÑ °æ¿ì ¸Þ¼Òµå wrapper Á¢±ÙÀÚÀÇ encodingStyle
¼Ó¼ºÀ» »ç¿ëÇÑ´Ù.
ÀÌ ¼Ó¼ºÀÌ ¾ø´Â °æ¿ì ù¹ø° ¸Å°³º¯¼ö¿¡¼ encodingStyle
À» Ãß·ÐÇÑ´Ù.
µû¶ó¼, ¿©·¯ºÐÀÇ ¸Þ¼Òµå°¡ ¿©·¯ °³ÀÇ ¸Å°³º¯¼ö¸¦ ¹Þ¾ÆµéÀÏ °æ¿ì, ¿©·¯ºÐÀÌ Call
ÀÇ
encodingStyle
¼Ó¼ºÀ» ¸íÈ®ÇÏ°Ô ¼³Á¤ÇÏÁö ¾Ê¾Ò´Ù¸é ¿©·¯ºÐÀº ±× ¼ø¼¸¦ À籸¼ºÇÏ°í ½ÍÀ» ¼ö ÀÖ´Ù.
¿Ïº®ÇÏ°Ô ¾ÈÀüÇÏ°Ô ÇÏ°í ½Í´Ù¸é Call °´Ã¼³»
ÀÇ encodingStyle
À» ¿ø°Ý
¸Þ¼ÒµåÀÇ ¹Ýȯ À¯Çü¿¡ ´ëÀÀµÇµµ·Ï ¼³Á¤ÇÑ´Ù.
SOAP ¸Þ½ÃÁö ³»ÀÇ
encodingStyle
鴂͂챉
¹«¾ùº¸´Ùµµ ¿ì¼±ÀûÀ¸·Î, SOAP »ç¾çÀº ¸Å°³º¯¼ö ³»ÀÇ encodingStyl0µéÀ»
È©ÇÕÇϵµ·Ï ÇØÁØ´Ù.;
encodingStyle
¼Ó¼ºÀÇ ¹üÀ§´Â À̸§°ø°£ ¼±¾ð°ú À¯»çÇÏ°Ô ÇൿÇÑ´Ù. ±×·¯ÇÑ È¥ÇÕÀÇ À¯¿ëÇÑ °æ¿ì°¡ SGV
ºÎºÐÀÇ ¹è¿ÀÌ´Ù. ¾ð¶æ º¸¸é Section 5¸¦ »ç¿ëÇÏ¿© ¹è¿À» Á÷·ÄÈÇÏ°í literal XMLÀ» »ç¿ëÇÏ¿© SGV ¸â¹ö¸¦ Á÷·ÄÈÇÏ´Â
°ÍÀÌ ±×·²µíÇØ º¸ÀÏ ¼ö ÀÖ´Ù. ºÒÇàÈ÷µµ, ¸ðµç Section 5 Á÷·ÄÀÚ´Â Section 5
encodingStyle
s ¾Æ·¡¿¡ µî·ÏµÈ À¯Çü°ú¸¸ ÀÛµ¿Çϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ÀÛ¾÷Àº ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ´Ù½Ã ¸»Çϸé,
Section 5·Î ÀÎÄÚµùµÈ XML ½ºÆ®¸² ³»ÀÇ ¸ðµç °ÍÀº º¯°æÀÌ ºÒ°¡´ÉÇÏ°í ´Ù¸¥ encodingStyle
À»
»ç¿ëÇÏ¿© ÀÎÄÚµùµÈ XML ºÎºÐÀ» Æ÷ÇÔÇÒ ¼ö ¾ø´Ù. ¶ÇÇÑ ÃÖ±ÙÀÇ ¹ö±× ¼öÁ¤ÆÇ (Âü°í
ÀÚ·á )Àº ¹è¿, Çؽà Å×À̺í, º¤ÅÍ¿Í °°Àº º¹ÇÕ µ¥ÀÌÅÍ ±¸Á¶ ³»ÀÇ °ªÀÌ Section 5 ¿ÜÀÇ
encodingStyle
Àº °¡Áú ¼ö ¾øÀ½À» È®½ÇÇÏ°Ô ÇÏ¿´´Ù. .
»ç¼ÒÇÑ À¯Çü ¸ÅÇÎ ¹®Á¦µé
¿ì¸®´Â SOAP À¯Çü ¸ÅÇÎ ÀÛ¾÷½Ã ¿©·¯ºÐÀÌ ¸¸³¯ ¼ö ÀÖ´Â ¸î °¡Áö ¹®Á¦µé°ú ƯÀÌ »çÇ×µéÀ» ¾ð±ÞÇÏ¸é¼ ÀÌ ±ÛÀ» °á·ÐÁþµµ·Ï ÇÏ°Ú´Ù.
ºñÁ÷·ÄÈ °úÁ¤ µ¿¾È xsi:type ¿ÏÈÇϱ⠸¶ÀÌÅ©·Î¼ÒÇÁÆ®»çÀÇ SOAP ÅøŶ¿¡ ÀÇÇØ »ý¼ºµÈ inbound
¸Þ½ÃÁö¸¦ ó¸®ÇÒ ¶§ ¿©·¯ºÐÀº ´ÙÀ½°ú °°Àº ¿¡·¯¸¦ ¸¸³¯ °ÍÀÌ´Ù.:
No Deserializer found to deserialize a ':Result' using encoding style 'yyy'
ÀÌ °íÀüÀûÀÎ »óÈ£ ¿î¿ë¼º ¹®Á¦´Â Á¢±ÙÀÚ¿¡ xsi:type
¼Ó¼ºÀÌ ¾ø±â ¶§¹®¿¡ ¹ß»ýÇÑ´Ù. ¾ÆÆÄÄ¡ SOAP
2.1 Ãâ½ÃÆÇ¿¡ ±¸ÇöµÈ ¼Ö·ç¼ÇÀº ´ÙÀ½ ±ÔÄ¢¿¡ µû¶ó xsi:type
°ªÀ» µ¿ÀûÀ¸·Î »ý¼ºÇÏ´Â °ÍÀÌ´Ù.: ¸Å°³º¯¼öÀÇ
Á¢±ÙÀÚ°¡ ¾î¶² À̸§ °ø°£ÀÇ ¹üÀ§ ³»¿¡µµ ÀÖÁö ¾ÊÀº °æ¿ì ´ÙÀ½ QNameÀ» »ç¿ëÇÑ´Ù.:
¿©±â¿¡¼ X
´Â Á¢±ÙÀÚÀÇ tagName
À», ""
Àº ºó
URI¸¦ °¡¸®Å²´Ù. ºó URI ÀÚ¸®¿¡ ºñÁ÷·Äȵǰí ÀÖ´Â Á¢±ÙÀÚ(Á¸ÀçÇÏ´Â °æ¿ì)ÀÇ À̸§°ø°£ URI¸¦ »ç¿ëÇÑ´Ù. ±×·¸°Ô Çϸé, ÀÌ ÀÓ½Ã
QNamesÀ» (ºñ)Á÷·ÄÀÚ¿Í ¸ÅÄ¡½ÃÅ°±â À§ÇÑ À¯Çü ¸ÅÇÎÀÌ »ý¼ºµÈ´Ù. Listing
12 ´Â Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö ¸ðµÎ¿¡ ´ëÇÑ »ùÇà À¯Çü ¸ÅÇÎÀ» º¸¿©ÁÖ°í ÀÖ´Ù.
Listing 12. RPC È£ÃâÀ» À§ÇÑ ÄÚµå ºÎºÐ
[Client]
SOAPMappingRegistry smr = new SOAPMappingRegistry ();
StringDeserializer sd = new StringDeserializer ();
smr.mapTypes (Constants.NS_URI_SOAP_ENC,
new QName ("", "Result"), null, null, sd);
[Server]
<isd:mappings>
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="" qname="x:Book"
javaType="com.raverun.Book"
xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/>
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="" qname="x:price"
xml2JavaClassName="org.apache.soap.encoding.soapenc.FloatObjectDeserializer"/>
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="" qname="x:isbn"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
</isd:mappings>
À¯Çü ¸ÅÇÎÀº ´ÙÀ½ °ü½ÀÀ» µû¶ó¾ß ÇÑ´Ù.:
¿ø½Ã À¯Çüµé°ú À̵éÀÇ wrapper °´Ã¼¿¡ ´ëÇؼ´Â (¿¹ : int
¿Í Integer)
À¯Çü ¸ÅÇο¡ javaTypeÀ» ÁöÁ¤ÇÏÁö ¾Ê´Â´Ù.
º¹ÇÕ À¯Çü¿¡ ´ëÇØ, ¿©·¯ºÐÀÇ ºñÁ÷·ÄÀÚ°¡ ÀÓ¹«¸¦ ¼öÇàÇÒ ¶§ javaType
À» ¾Ë¾Æ¾ß ÇÒ °æ¿ì (¿¹
: org.apache.soap.encoding.soapenc.BeanSerializer
) ¿©·¯ºÐÀº
javaType
À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
ÀÌ ÇàÀ§¿¡ ´ëÇÑ »ó¼¼ »çÇ×Àº Sanjiva Weeraweena°¡ soap-dev ¸ÞÀϸµ ¸®½ºÆ®¿¡ ¿Ã¸° °Ô½Ã¹°µé°ú Jim
SenllÀÇ ±Ûµé¿¡¼ ¸ðÀ» ¼ö ÀÖ´Ù. (Âü°í
ÀÚ·á )
º¹¼ö ÂüÁ¶ À¯Çü
º¹¼ö ÂüÁ¶ À¯ÇüÀº »õ·Î¿î À¯Çü ±×·ìÀº ¾Æ´ÏÁö¸¸, °£´ÜÇÑ À¯Çü°ú º¹ÇÕ À¯ÇüÀÇ ÇÑ ¸éÀ¸·Î °í·ÁµÇ¾î¾ß ÇÑ´Ù. À̵éÀº ¸Å°³º¯¼öµé°£,
ƯÈ÷ DCE À¯Çü [ptr] Àǹ̷ÐÀ» ³ªÅ¸³»´Â ¸Å°³º¯¼öµé°£ÀÇ µ¿ÀϼºÀ» À¯ÁöÇϴµ¥ À¯¿ëÇÏ´Ù. ¾ÆÆÄÄ¡ SOAPÀº º¹¼ö ÂüÁ¶ À¯ÇüÀ»
ºñÁ÷·ÄÈÇÒ ¼ö ÀÖÁö¸¸ À̵éÀ» Á÷·ÄÈÇÏÁö´Â ¾Ê´Â´Ù.
º¹¼ö ÂüÁ¶ À¯ÇüÀº µÎ ºÎºÐÀ¸·Î Á÷·ÄȵȴÙ. : ¸Å°³º¯¼ö Á¢±ÙÀÚ (ºó element)¿Í °ª Á¢±ÙÀÚ °¡
±×°ÍÀÌ´Ù. Listing
13 ¿¡¼ varString
element´Â ¸Å°³º¯¼ö Á¢±ÙÀÚÀÌ°í greeting
˼
°ª Á¢±ÙÀÚÀÌ´Ù. °ª Á¢±ÙÀÚ´Â ¸Þ¼Òµå wrapper Á¢±ÙÀÚÀÎ ns1:echoString
°ú Á÷°è µ¿±âÀÎ
elementÀÓ¿¡ ÁÖÀÇÇÑ´Ù. ¾ÆÆÄÄ¡ SOAPÀº Á÷·ÄÈ ±×·¡ÇÁÀÇ ·çÆ® (¸Þ¼Òµå wrapper Á¢±ÙÀÚ)°¡
SOAP-ENV:Body
ÀÇ Á÷°è ÀÚ½ÄÀ̶ó°í °¡Á¤Çϱ⠶§¹®¿¡ ÀÌ Á¡Àº Áß¿äÇÏ´Ù. °ª Á¢±ÙÀÚ°¡ ¸ÕÀú ¿Í¾ß ÇÒ °æ¿ì
¿©·¯ºÐÀº Server.BadTargetObjectURI
¿¡·¯¸¦ ¾òÀ» °ÍÀÌ´Ù. SOAP »ç¾çÀº ÇÑ
element°¡ Á÷·ÄÈ ·çÆ®°¡ ¾Æ´Ï¶ó´Â °ÍÀ» °¡¸®Å°±â À§ÇØ SOAP-ENC:root
¼Ó¼ºÀ» Á¦°øÇÏÁö¸¸, ¾ÆÆÄÄ¡
SOAPÀÌ À̸¦ ÀνÄÇÏÁö ¾Ê´Â´Ù.
Listing 13. º¹¼ö ÂüÁ¶ ¸Å°³º¯¼öÀÇ ¿¹Á¦
<SOAP-ENV:Body>
<ns1:echoString
xmlns:ns1="http://soapinterop.org"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<varString href="#String-0" />
</ns1:echoString>
<greeting
xsi:type="xsd:string"
id="String-0">Hello World</greeting>
</SOAP-ENV:Body>
XMI ÀÎÄÚµù XMI (XML Metadata Interchange)´Â ¾ÖÇø®ÄÉÀ̼ǰ£ UML ¸ðµ¨À» °øÀ¯Çϱâ
À§ÇÑ OMG Ç¥ÁØÀÌ´Ù. °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â °÷ÀÌ UML ¸ðµ¨À» XML ÆÄÀÏ·Î ¿¢½ºÆ÷Æ®ÇÏ°í XML ÆÄÀÏÀ» UML ¸ðµ¨·Î ÀÓÆ÷Æ®ÇÏ´Â
UML ¸ðµ¨¸µÀÌ´Ù. IBM XMI ÇÁ·¹ÀÓ¿öÅ© ³»ÀÇ Java Object Bridge (JOB)´Â ÀÚ¹Ù °´Ã¼°¡ XMI Æ÷¸ËÀ¸·Î
(ºñ)Á÷·ÄÈÇϵµ·Ï ÇØ ÁØ´Ù. À̸®ÇÏ¿© XMI´Â Section 5 ÀÎÄÚµù¿¡ ´ëÇÑ ´ë¾ÈÀ¸·Î °í·ÁµÉ ¼ö ÀÖÁö¸¸, ÀÚÁÖ »ç¿ëµÇÁö´Â
¾Ê´Â´Ù.
°á·Ð ¹× ¿¹Ãø
ÀÌ ±Û¿¡¼ ³ª´Â ÀÚ¹Ù À¯ÇüÀ» (ºñ)Á÷·ÄÈÇϱâ À§ÇÑ ¾ÆÆÄÄ¡ SOAPÀÇ Áï½Ã ÀÌ¿ë°¡´ÉÇÑ ´ëºÎºÐÀÇ API Áö¿øÀ»
°Ë ÅäÇÏ¿´´Ù. ³ª´Â ¶ÇÇÑ ´Ù¸¥ ÀÚ¹Ù ±â¹Ý ¹× ºñ ÀÚ¹Ù ±â¹Ý SOAP ÅøŶ°úÀÇ »óÈ£¿î¿ëÀ» ¹æÇØÇÒ ¼ö ÀÖ´Â ¸î °¡Áö ƯÀÌ
»çÇ×µéÀ» ´Ù·ç¾ú´Ù.
´ÙÀ½ Æí¿¡¼ ³ª´Â ¿©·¯ºÐ ÀÚ½ÅÀÇ (ºñ)Á÷·ÄÀÚ¸¦ ÀÛ¼ºÇϵµ·Ï ¾È³»ÇØ ÁÙ ¿ä¸®Ã¥À» ¼Ò°³ÇÏ°Ú´Ù. ¿©·¯ºÐÀº ¶ÇÇÑ ½ºÅ°¸¶ ¾ð¾î¸¦ »ç¿ëÇØ ºñ
Section 5 ÀÎÄÚµù°ú ÀÛ¾÷ÇÏ´Â ¹æ¹ýÀ» º¸°Ô µÉ °ÍÀÌ´Ù.
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³ Gavin BongÀº ¸»·¹ÀÌ½Ã¾Æ Kuala LumpurÀÇ ÀÚ¹Ù
°³¹ßÀÚÀÌ´Ù. ±×ÀÇ Èï¹Ì ºÐ¾ß´Â service-oriented architecture¿Í ¹«¼± ÀÚ¹ÙÀÌ´Ù. ±×´Â ±×¸² 1 ÀÛ¼º¿¡
µµ¿òÀ» ÁØ Pee Eng¿¡°Ô °¨»ç¸¦ ÀüÇÏ°í ½Í¾îÇÑ´Ù.