IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

¾ÆÆÄÄ¡ SOAP À¯Çü ¸ÅÇÎ, Part 1 : ¾ÆÆÄÄ¡ÀÇ Á÷·ÄÈ­ API °ËÅäÇϱâ
¸ñ Â÷:
SOAP and RPC
Section 5 encoding
Type mapping patterns
Wrapping up and looking ahead
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
À¥ ¼­ºñ½º ³»ºÎ, Part 3
developerWorks newsletter ±¸µ¶Çϱâ
US ¿ø¹® Àбâ
Also in the Web services zone:
Tutorials
Tools and products
Articles
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
 
¿©·¯ºÐ ¾ÖÇø®ÄÉÀ̼ÇÀÇ µ¥ÀÌÅÍ À¯ÇüÀ» 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 À̸§°ø°£À» ÂüÁ¶ÇÒ °ÍÀÌ´Ù.
  • xsddhk xsi Á¢µÎ»ç´Â ¸íÈ®ÇÏ°Ô ´Þ¸® ¾ð±ÞµÇÁö ¾Ê´Â ÇÑ °¢°¢ http://www.w3.org/2001/XMLSchema¿Í http://www.w3.org/2001/XMLSchema-instance À̸§ °ø°£À» ÂüÁ¶ÇÑ´Ù°í °¡Á¤µÈ´Ù.
  • ¿Ü·¡ URIÀ» °¡Áø QNamesÀº ´ÙÀ½ Æ÷¸ËÀ¸·Î ÀÛ¼ºµÉ °ÍÀÌ´Ù. :
    
    {uri}localpart.
    
    ¿¹Á¦ : {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Àº ´ÙÀ½ ¼¼ °³ÀÇ encodingStyles¿¡ ´ëÇÑ Áö¿øÀ» ³»ÀåÇÏ°í ÀÖ´Ù. : 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 ¼Ó¼ºÀÇ ´Ù¸¥ °¡´ÉÇÑ º¯ÇüµéÀº ¹«½ÃÇÑ´Ù.:

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 ÄÁÅÙÆ®·Î½á ºÎÀû´çÇÑ ¸ðµç ¹®ÀÚµéÀ» »çÀü Á¤ÀÇµÈ ¹®ÀÚ¿­ ¿£ÅÍƼ·Î ¹Ù²Ü °ÍÀÌ´Ù. -- ¿¹¸¦ µé¾î, <´Â &lt´Â ·Î ¹Ù²ð °ÍÀÌ´Ù. 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. ¹®¸Æ ³»¿¡¼­ÀÇ Á÷·ÄÈ­/ºñÁ÷·ÄÈ­
Serialization/deserialization in context

¾Æ·¡ÀÇ ³íÀÇ¿¡¼­, ³ª´Â SOAP ¸Þ½ÃÁö ó¸®ÀÇ ¹æÇâÀ» Ç¥½ÃÇϱâ À§ÇØ inbound¿Í outbound¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î, SOAP ¼­¹öÀÇ ¹®¸Æ ³»¿¡¼­ Á÷·ÄÈ­´Â outbound ¸Þ½ÃÁö¸¦ »ý¼ºÇÏ´Â ¹æ¹ýÀ» °¡¸®Å²´Ù. ÀÌ °£´ÜÇÑ ¸ðµ¨Àº ¿ì¸®ÀÇ ³íÀǸ¦ ¹æÇØÇÏÁö ¾ÊÀ¸¸é¼­ Áß°³ SOAP ¼­¹ö¸¦ ¹«½ÃÇÑ´Ù. ±×¸² 1Àº ³íÀǵǰí ÀÖ´Â ¾ÆÅ°ÅØó¸¦ ³ªÅ¸³»°í ÀÖ´Ù.

À¯Çü ¸ÅÇÎ ·¹Áö½ºÆ®¸®¿Í »óÈ£ÀÛ¿ëÇϱâ À§ÇÑ ÇÁ·Î±×·¥ÀûÀÎ ±¸¹®À» ¼³¸íÇϱâ Àü¿¡ ·¹Áö½ºÆ®¸®ÀÇ ³»ºÎ ±¸Çö¿¡ ´ëÇÑ ¸î °¡Áö °³³äÀ» ¾Ë¸é µµ¿òÀÌ µÉ °ÍÀÌ´Ù. °³¹ßÀÚ°¡ »óÈ£ÀÛ¿ëÇÏ´Â ·¹Áö½ºÆ®¸®´Â ½ÇÁ¦·Î 4°³ÀÇ ³»ºÎ Hashtables (¾Æ·¡ÀÇ ¸ñ·Ï ÂüÁ¶)À» °¡Áö°í ÀÖ´Ù.

  1. Á÷·ÄÀÚ¿ë ·¹Áö½ºÆ®¸®
  2. ºñÁ÷·ÄÀÚ¿ë ·¹Áö½ºÆ®¸®
  3. Java2XML¿ë ·¹Áö½ºÆ®¸®
  4. 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 ¼Ó¼º °ªÀ» °Ë»öÇϱâ À§ÇØ queryElementTypeÀ» È£ÃâÇÒ °ÍÀÌ´Ù.

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 encodingStyles°ú 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À» »ç¿ëÇÒÁö °áÁ¤Çϱâ À§ÇØ »ç¿ëÇÏ´Â ¾Ë°í¸®ÁòÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. :

  1. »ç¿ë°¡´ÉÇÑ °æ¿ì ¸Þ¼Òµå wrapper Á¢±ÙÀÚÀÇ encodingStyle ¼Ó¼ºÀ» »ç¿ëÇÑ´Ù.
  2. ÀÌ ¼Ó¼ºÀÌ ¾ø´Â °æ¿ì ù¹ø° ¸Å°³º¯¼ö¿¡¼­ encodingStyleÀ» Ãß·ÐÇÑ´Ù.

µû¶ó¼­, ¿©·¯ºÐÀÇ ¸Þ¼Òµå°¡ ¿©·¯ °³ÀÇ ¸Å°³º¯¼ö¸¦ ¹Þ¾ÆµéÀÏ °æ¿ì, ¿©·¯ºÐÀÌ CallÀÇ encodingStyle ¼Ó¼ºÀ» ¸íÈ®ÇÏ°Ô ¼³Á¤ÇÏÁö ¾Ê¾Ò´Ù¸é ¿©·¯ºÐÀº ±× ¼ø¼­¸¦ À籸¼ºÇÏ°í ½ÍÀ» ¼ö ÀÖ´Ù. ¿Ïº®ÇÏ°Ô ¾ÈÀüÇÏ°Ô ÇÏ°í ½Í´Ù¸é Call °´Ã¼³»ÀÇ encodingStyleÀ» ¿ø°Ý ¸Þ¼ÒµåÀÇ ¹Ýȯ À¯Çü¿¡ ´ëÀÀµÇµµ·Ï ¼³Á¤ÇÑ´Ù.

SOAP ¸Þ½ÃÁö ³»ÀÇ encodingStyle È¥ÇÕÇϱâ

¹«¾ùº¸´Ùµµ ¿ì¼±ÀûÀ¸·Î, SOAP »ç¾çÀº ¸Å°³º¯¼ö ³»ÀÇ encodingStyl0µéÀ» È©ÇÕÇϵµ·Ï ÇØÁØ´Ù.; encodingStyle ¼Ó¼ºÀÇ ¹üÀ§´Â À̸§°ø°£ ¼±¾ð°ú À¯»çÇÏ°Ô ÇൿÇÑ´Ù. ±×·¯ÇÑ È¥ÇÕÀÇ À¯¿ëÇÑ °æ¿ì°¡ SGV ºÎºÐÀÇ ¹è¿­ÀÌ´Ù. ¾ð¶æ º¸¸é Section 5¸¦ »ç¿ëÇÏ¿© ¹è¿­À» Á÷·ÄÈ­ÇÏ°í literal XMLÀ» »ç¿ëÇÏ¿© SGV ¸â¹ö¸¦ Á÷·ÄÈ­ÇÏ´Â °ÍÀÌ ±×·²µíÇØ º¸ÀÏ ¼ö ÀÖ´Ù. ºÒÇàÈ÷µµ, ¸ðµç Section 5 Á÷·ÄÀÚ´Â Section 5 encodingStyles ¾Æ·¡¿¡ µî·ÏµÈ À¯Çü°ú¸¸ ÀÛµ¿Çϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ÀÛ¾÷Àº ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ´Ù½Ã ¸»Çϸé, 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

¿©±â¿¡¼­ 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 ÀÎÄÚµù°ú ÀÛ¾÷ÇÏ´Â ¹æ¹ýÀ» º¸°Ô µÉ °ÍÀÌ´Ù.

Âü°í ÀÚ·á

  • Apache SOAP : ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ À§ÇÑ ¿ÀÇ ¼Ò½º SOAP ÅøŶ
  • Apache Axis : ¾ÆÆÄÄ¡ SOAPÀÇ µÚ¸¦ ÀÕ´Â Â÷¼¼´ë ÅøŶ
  • Brendan MacmillanÀÇ Java Serialization to XML (JSX) ÅøŶÀº À¯¿ëÇÑ ¸î °¡Áö ÅøÀ» °¡Áö°í ÀÖ´Ù.
  • SunÀÇ XML Binding (JAXB)À» À§ÇÑ ÀÚ¹Ù ¾ÆÅ°ÅØó.
  • Castor : ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ À§ÇÑ ¿ÀÇ ¼Ò½º µ¥ÀÌÅÍ ¹ÙÀεù ÇÁ·¹ÀÓ¿öÅ©
  • Schema2Java : Creative Science SystemsÀÇ »ó¿ë XML µ¥ÀÌÅÍ ¹ÙÀεù Á¦Ç° .
  • ¾ÆÆÄÄ¡ SOAPÀÇ ¹èÄ¡ ±â¼úÀÚ¿¡ ´ëÇÑ xsd ½ºÅ°¸¶
  • ÀÌ ½Ã¸®Áî¿Í ÇÔ²² Á¦°øµÇ´Â »ùÇà ÄÚµåÀÎ PurchaseOrder.zip³ª PurchaseOrder.tar.gz¸¦ ´Ù¿î·Îµå¹Þ´Â´Ù. ³ª´Â ´ÙÀ½ Æí¿¡¼­ ÀÌ ÄÚµåµé¿¡ ´ëÇØ »ó¼¼È÷ ¼³¸íÇÒ °ÍÀÌ´Ù.; ±×·¯³ª ÀÌ ÆÐÅ°Áö´Â ¿©·¯ºÐÀÌ Áö±Ý °ËÅäÇϱ⸦ ¿øÇÒ ¼ö ÀÖ´Â XML ¹®¹ý¿¡ ´ëÇÑ ½ºÅ°¸¶¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù.
  • TXMI (XML Metadata Interchange)¿¡ ´ëÇÑ »ó¼¼ »çÇ×Àº IBM XMI ÇÁ·¹ÀÓ¿öÅ©¸¦ ÂüÁ¶ÇÑ´Ù.
  • SOAP 1.1 »ç¾çÀº W3C Technical Note ÇüÅ·Π»ç¿ëÇÒ ¼ö ÀÖ´Ù.
  • Sanjiva WeerawaranaÀÇ °Ô½Ã¹®: ¾ÆÆÄÄ¡ SOAP¿¡¼­ xsi:type ¿ä°Ç ¿ÏÈ­Çϱ⿡ °üÇØ ¼³¸íÇÏ°í ÀÖ´Ù.
  • "À¥ ¼­ºñ½º ³»ºÎ, Part 3" (James Snell, developerWorks, May 2001)´Â Apache SOAP°ú ´Ù¸¥ ÅøŶ°úÀÇ »óÈ£¿î¿ë¼ºÀ» ´Ù·ç°í ÀÖ´Ù.
  • ¿©·¯ºÐÀº SOAP°ú ÀÚ¹Ù ±â¼ú¿¡ °üÇÑ IBM workshop¿¡ Âü¿©ÇÒ ¼ö ÀÖ´Ù.
  • "÷ºÎ¹®¼­¸¦ °¡Áø SOAP ¸Þ½ÃÁö" (W3C note) : SOAPÀÌ MIME¿¡ ÀÓº£µðµåµÇ´Â ¹æ½Ä ¼³¸í
  • W3C XML ½ºÅ°¸¶, Part 1 : XML ½ºÅ°¸¶ÀÇ ÇÙ½É °³³ä ¹× ±¸¹®
  • W3C XML ½ºÅ°¸¶, Part 2 : XML ½ºÅ°¸¶¿¡¼­ Áö¿øµÇ´Â µ¥ÀÌÅÍ À¯Çü
  • ¾ÆÆÄÄ¡ SOAP ¹ö±× ¸®Æ÷Æ® #2865 : char ¿ø½Ã À¯ÇüÀ» Áö¿øÇÏÁö ¾Ê´Â °Í¿¡ ´ëÇÑ ¼³¸í
  • ¾ÆÆÄÄ¡ SOAP ¹ö±× ¸®Æ÷Æ® #3000 : timeInstant ¹ö±× ¼³¸í
  • ¾ÆÆÄÄ¡ SOAP ¹ö±× ¸®Æ÷Æ® #2388 : ±¸Çü XML ½ºÅ°¸¶ À̸§°ø°£ URI »ç¿ë¿¡ ´ëÇÑ ¼³¸í
  • ¾ÆÆÄÄ¡ SOAP ¹ö±× ¸®Æ÷Æ® #2470 : SOAP°ú literal XML ÀÎÄÚµù ½ºÅ¸ÀÏÀ» È¥ÇÕÇÏ´Â HashtableSerializer ¹®Á¦¿¡ ´ëÇÑ ¼³¸í

ÇÊÀÚ ¼Ò°³
Gavin BongGavin BongÀº ¸»·¹ÀÌ½Ã¾Æ Kuala LumpurÀÇ ÀÚ¹Ù °³¹ßÀÚÀÌ´Ù. ±×ÀÇ Èï¹Ì ºÐ¾ß´Â service-oriented architecture¿Í ¹«¼± ÀÚ¹ÙÀÌ´Ù. ±×´Â ±×¸² 1 ÀÛ¼º¿¡ µµ¿òÀ» ÁØ Pee Eng¿¡°Ô °¨»ç¸¦ ÀüÇÏ°í ½Í¾îÇÑ´Ù.



ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³Àκ¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ