Á¤ÀÇµÈ Á÷·ÄÀÚ¿Í ºñÁ÷·ÄÀÚ¸¦ ÀÛ¼ºÇϱâ À§ÇÑ ´Ü°èµé
Gavin
Bong ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î, eUtama Sdn. Bhd. 2002³â 3¿ù
SOAP »ç¾çÀº µ¥ÀÌÅͺ£À̽º, ÇÁ·Î±×·¡¹Ö ¾ð¾î (¿¹ : ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î) ¹× µ¥ÀÌÅÍ ¸®ÆÄÁöÅ丮¿¡¼ ¹ß°ßµÇ´Â ÀϹÝÀûÀÎ
À¯ÇüµéÀ» Ç¥½ÃÇϱâ À§ÇÑ ÀÎÄÚµùÀ» ¸í½ÃÇÑ´Ù. ¾ÆÆÄÄ¡ SOAPÀÇ ÅøŶÀº ÀÚ¹Ù À¯ÇüµéÀ» Á÷·ÄÈµÈ XML Ç¥ÇöÀ¸·Î ¸ÅÇνÃÅ°´Â ÀÛ¾÷À»
¼öÇàÇϴ Ŭ·¡½ºÀÎ ±âÃÊÀûÀÎ (ºñ)Á÷·ÄÀÚ ¼¼Æ®¸¦ Á¦°øÇÔÀ¸·Î½á ÀÎÄÚµùÀ» Áö¿øÇÑ´Ù. Gavin BongÀº ÅøŶ¿¡¼ Á¦°øµÇ´Â
°ÍÀÌ ¿ä±¸»çÇ×°ú ¸ÂÁö ¾ÊÀ» ¶§ Á÷Á¢ (ºñ)Á÷·ÄÀÚ¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ǵµ
Á¦°øÇÑ´Ù.
Part
1 ¿¡¼ SOAPÀÌ µ¥ÀÌÅÍ À¯ÇüÀ» XML¿¡ ¾î¶»°Ô ¸ÅÇνÃÅ°´ÂÁö¸¦ º¸¾Ò°í, ¾ÆÆÄÄ¡ SOAP ÅøŶ¿¡ Æ÷ÇԵǾî ÀÖ´Â Á÷·ÄÀÚ¿Í ºñÁ÷·ÄÀÚ
(Áö±ÝºÎÅÍ´Â ÁýÇÕÀûÀ¸·Î (ºñ)Á÷·ÄÀÚ¶ó°í ĪÇÏ°Ú´Ù)¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¸¦ ¹è¿ü´Ù. À̹ø¿¡´Â (ºñ)Á÷·ÄÀÚ ÀÛ¼º ¹æ¹ýÀ» º¸¿©ÁÙ ¼³¸í¼¸¦
»ìÆ캸°Ú´Ù. Part
1 ÀÇ "À¯Çü ¸ÅÇÎ ÆÐÅÏ" ¼½¼ÇÀ» ´Ù½Ã Àо±â ¹Ù¶õ´Ù.
·çÆ® ¹× ÀÏ¹Ý (ºñ)Á÷·ÄÀÚ
¾ÆÆÄÄ¡ SOAP ÅøŶ°ú ÇÔ²² Á¦°øµÇ´Â (ºñ)Á÷·ÄÀÚ Áß ¿©·¯ºÐÀÇ Àڹ٠Ŭ·¡½º¿¡ ¸Â´Â °ÍÀÌ ¾øÀ» °æ¿ì ½º½º·Î »ç¿ëÀÚ Á¤ÀÇ ¹æ½ÄÀÇ (ºñ)Á÷·ÄÀÚ¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¸ÕÀú ¼ÒÀ§ ·çÆ® (ºñ)Á÷·ÄÀÚ¿Í ÀÏ¹Ý (ºñ)Á÷·ÄÀÚ¸¦ ±¸ºÐÇØ¾ß ÇÑ´Ù. RPC ¸Å°³
º¯¼ö¿Í ÀÀ´äµé¿¡ ´ëÇÑ Á÷·ÄÈ¿Í ºñÁ÷·ÄÈÀÇ Ãʱ⠺ÎÆ®½ºÆ®·¡ÇÎÀº ·çÆ® (ºñ)Á÷·ÄÀÚ¿¡ÀÇÇØ Ã³¸®µÈ´Ù. ¾ÆÆÄÄ¡ SO AP¿¡ ÀÖ´Â ¼¼ °¡Áö ·çÆ® (ºñ)Á÷·ÄÀÚ°¡ Ç¥
1 ¿¡ ³ª¿Í ÀÖ´Ù.
Ç¥ 1. ·çÆ® (ºñ)Á÷·ÄÀÚ
encodingStyle
(ºñ)Á÷·ÄÀÚ
Section 5
ParameterSerializer
Literal XML
XMLParameterSerializer
XMI
XMIParameterSerializer
ÀûÀýÇÑ ·çÆ® (ºñ)Á÷·ÄÀÚ´Â µÎ °¡Áö »çÇ׿¡ ±â¹ÝÇÏ¿© 󸮵ȴÙ. encodingStyle
°ú
Parameter
Ŭ·¡½º (Á÷·ÄÈ¿ë), ȤÀº QName
SOAP-ENV:Parameter
(ºñÁ÷·ÄÈ¿ë)ÀÌ ±×°ÍÀÌ´Ù. ½ÇÁ¦ 󸮰¡ ¾î¶»°Ô ÀϾ´ÂÁö ¾Ë·Á¸é Ŭ¶óÀ̾ðÆ®
Ãø¿¡¼ ÀÚ¹Ù À¯ÇüÀÇ Á÷·ÄÈ·Î ³ª¾Æ°¡´Â ¿¬¼ÓÀûÀÎ À̺¥Æ®µéÀ» ÀÌÇØÇØ¾ß ÇÑ´Ù.
Call call = new Call();
...
resp = call.invoke(url, ""); //1
Call
Ŭ·¡½ºÀÇ invoke
¸Þ½îµå°¡ À§ÀÇ 1Çà¿¡¼ È£ÃâµÉ ¶§,
Call
Ŭ·¡½º´Â ÀÚ½ÅÀÇ °ü·Ã ¸Å°³º¯¼öµéÀ» ¹Ýº¹ Àû¿ëÇÑ´Ù.
org.apache.soap.rpc.RPCMessage:
...
Serializer ser = xjmr.querySerializer(Parameter.class, actualParamEncStyle); //2
ser.marshall(... );
...
°¢ ¸Å°³º¯¼ö¿¡ ´ëÇØ À¯Çü ¸ÅÇÎ ·¹Áö½ºÆ®¸®°¡ Á¶È¸µÇ°í µÚÀ̾î marshall()
¸Þ½îµå°¡ ¹ÝȯµÇ´Â Á÷·ÄÀÚ¿¡ ÀÇÇØ È£ÃâµÈ´Ù. 2ÇàÀÇ ¹ÝȯµÇ´Â Á÷·ÄÀÚ´Â ·çÆ® Á÷·ÄÀÚÀÌ´Ù.
À¥ ¼ºñ½º¿¡¼ÀÇ ºñÁ÷·ÄÈ ÀýÂ÷·Î ÁÖÀǸ¦ µ¹·Á º¸ÀÚ. ¼¹öÃø¿¡¼ SOAP RPC ¸Þ½ÃÁöÀÇ listener´Â ¼ºí¸´À¸·Î ±¸ÇöµÈ´Ù.
doPost
¸Þ½îµå´Â SOAP ÀÀ´äÀ» °Ë»öÇÏ°í ÀÌ°ÍÀ¸·ÎºÎÅÍ Call
°´Ã¼¸¦ À籸ÃàÇÏ·Á°í
½ÃµµÇÑ´Ù.
org.apache.soap.rpc.RPCMessage:
...
Bean paramBean = smr.unmarshall(actualParamEncStyle, RPCConstants.Q_ELEM_PARAMETER
... ); //3
Parameter param = (Parameter)paramBean.value;
...
3Çà¿¡¼ RPCConstants.Q_ELEM_PARAMETER´Â SOAP-ENV:Parmeter·Î ¹Ù²ï´Ù. ¹Ù·Î ÀÌ 3Çà¿¡¼ unmarshall() ¸Þ½îµå°¡ ºÒ¸®¿öÁú ¶§ ·çÆ® ºñÁ÷·ÄÀÚ·ÎÀÇ ¹èÄ¡°¡ ÀÌ·ç¾îÁø´Ù.
·çÆ® (ºñ) Á÷·ÄÀÚ´Â ´ÙÀ½ ÀÏ¹Ý (ºñ)Á÷·ÄÀÚ°¡ È£ÃâµÇµµ·Ï À¯Çü ¸ÅÇÎ ·¹Áö½ºÆ®¸®¸¦ Â÷·Ê·Î
Á¶È¸ÇÒ °ÍÀÌ´Ù. ÀÌ È£Ãâ ½ºÅÃÀº (Á÷·ÄÈ °úÁ¤ µ¿¾È) ·¹Áö½ºÆ®¸®°¡ ¿ø½Ã ÀÚ¹Ù À¯Çü¿¡ ´ëÇÑ (ºñ)Á÷·ÄÀÚ¸¦ ¹ÝȯÇÒ ¶§³ª (ºñÁ÷·ÄÈ °úÁ¤
µ¿¾È) XML element°¡ °£´ÜÇÑ À¯Çü¿¡ ´ëÇÑ ¼ø¼öÇÑ ÄÁÅ×À̳ÊÀÏ ¶§¸¸ ÇØ°áµÇ±â ½ÃÀÛÇÒ °ÍÀÌ´Ù.
Á¦°øµÇ´Â ÀÏ¹Ý (ºñ)Á÷·ÄÀÚÀÇ ´ëºÎºÐÀº -org.apache.soap.encoding.soapenc
ÆÐÅ°Áö¿¡¼ ¹ß°ßµÉ ¼ö ÀÖ´Â- ¾ÆÆÄÄ¡ SOAP ³»ÀÇ ´ëºÎºÐÀÇ ÇïÆÛ Å¬·¡½º°¡ ±×·¯ÇϵíÀÌ Section 5 ÀÎÄÚµù¿¡¼ ÀÛµ¿ÇÑ´Ù. ÀÌ°ÍÀº ¿Ö
³»°¡ ÀÌ ¼³¸í¼ÀÇ Æ÷Ä¿½º¸¦ Section 5 ÀÎÄÚµù (ºñ)Á÷·ÄÀÚ¿¡¸¸ ¸ÂÃß´ÂÁöÀÇ ÀÌÀ¯ÀÌ´Ù.
±×¸² 1. (ºñ)Á÷·ÄÀÚ ÀÛ¼ºÀ» À§ÇÑ API
Á÷·ÄÀÚ ¼³¸í¼
Á÷·ÄÀÚ´Â org.apache.soap.util.xml.Serializer
À» ±¸ÇöÇÏ°í ÇÑ ¸Þ½îµå¸¦
½ÇÇöÇÑ´Ù.
void marshall(
java.lang.String inScopeEncStyle,
java.lang.Class javaType,
java.lang.Object src,
java.lang.Object context,
java.io.Writer sink,
NSStack nsStack,
XMLJavaMappingRegistry xjmr,
SOAPContext ctx)
throws java.lang.IllegalArgumentException,
java.io.IOException
marshall()
ÀÇ ¸Å°³º¯¼ö °¢°¢À» Â÷·Ê·Î °ËÅäÇغ¸ÀÚ.
inScopeEncStyle
: µÑ·¯½Î°í ÀÖ´Â Call
À̳ª
Response
°´Ã¼¿¡ ÁöÁ¤µÈ´ë·Î encodingStyleURI
¸¦ Ç¥ÇöÇÑ´Ù.
javaType
: Á÷·ÄȵǾî¾ß ÇÏ´Â °´Ã¼ÀÇ ·±Å¸ÀÓ À¯ÇüÀÌ´Ù.
src
: Á÷·Ä鵃 ÀÚ¹Ù °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶ÀÌ´Ù.
context
: Á¢±ÙÀÚ À̸§À» Ç¥½ÃÇÏ´Â String
ÀÌ´Ù. ÀÌ
Á÷·ÄÀÚ°¡ ParameterSerializer
¿¡ ÀÇÇØ È£ÃâµÇ¸é ÀÌ
¹®¸Æ°ªÀº Parameter
Ŭ·¡½º (SOAP Ŭ¶óÀ̾ðÆ®¿¡ ¼±¾ðµÈ) ³»ÀÇ ¸í¸íµÈ Ư¼º°ª°ú ÀÏÄ¡Çϰųª ¸¸ÀÏ
ÀÌ°ÍÀÌ SOAP ¼¹ö¶ó¸é ¹ÝȯÀ» À§ÇØ Çϵå ÄÚµùµÈ´Ù. ÀÌ°ÍÀº null °ªÀ̾ ¾È µÈ´Ù.
sink
: SOAP XML ÀνºÅϽº°¡ ÀÛ¼ºµÉ ¸ñÀûÁö ½ÌÅ©
nsStack
: ÇöÀç ¹üÀ§ ³»¿¡ ÀÖ´Â ´Ù¼öÀÇ À̸§°ø°£ ¼±¾ðÀ» ±¸ÇöÇÏ´Â µ¥ÀÌÅÍ ±¸Á¶
xjmr
: ÀÚ¹Ù À¯Çü¿¡ ±â¹ÝÇÏ¿© ´ÙÀ½¿¡ ¿©·¯ºÐÀÌ »ç¿ëÇÒ Á÷·ÄÀÚ¸¦ Á¶È¸Çϱâ À§ÇØ »ç¿ëÇÏ´Â
smr
ÀÌ´Ù. [¿©·¯ºÐÀº ¶ÇÇÑ javaType
°ú
encodingStyle
¿¡ ±â¹ÝÇÏ¿© ´Ù¸¥ Á÷·ÄÀÚ¿¡ À§ÀÓÇÒ xjmr ¹è¿ ¸Þ½îµå¸¦ È£ÃâÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î
Hashtable
À̳ª Vector
¿Í °°Àº º¹ÇÕ ±¸Á¶¸¦ À§ÇØ À̸¦ ¼öÇàÇÑ´Ù.
ctx
: ¼ºí¸´ ¹®¸ÆÀ¸·ÎºÎÅÍ ³ª¿À´Â
javax.servlet.http.HttpServletRequest
°ú
javax.servlet.http.HttpSession
°°Àº °ÍÀ» Àü´ÞÇϴµ¥ »ç¿ëµÈ´Ù.
marshall()
¸Þ½îµå¿¡ ´ëÇÑ ¼³¸í¼´Â ´ÙÀ½°ú °°´Ù.
1´Ü°è : »õ·Î¿î À̸§°ø°£ ¹üÀ§¸¦ »ý¼ºÇÑ´Ù.
XML À̸§°ø°£ ¼±¾ðÀÇ ¹üÀ§¸¦ ÃßÀûÇϱâ À§ÇØ NSStack
Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. ³ªÁß¿¡ ÀÌ ¸Þ½îµå¿¡¼
NSStack
Àº »õ·Î¿î À̸§°ø°£À» Ãß°¡ÇÏ°í ÁöÁ¤µÈ URI¿¡ ´ëÇÑ Á¢µÎ»ç¸¦
ã±â À§ÇØ ½ºÅÃÀ» °Ë»öÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
2´Ü°è : °´Ã¼ ÀÎÀÚ¿¡ ´ëÇÑ Á¦¾à »çÇ× Ã¼Å©Çϱâ
Á÷·ÄÈ°¡ ¹ß»ýÇÏ·Á¸é µÎ °¡Áö Á¶°ÇÀÌ ÃæÁ·µÇ¾î¾ß ÇÑ´Ù. Á÷·ÄÀÚ¿¡°Ô Áö¿øµÇ´Â À¯ÇüÀÌ ÁÖ¾îÁ®¾ß ÇÏ°í Á÷·Ä鵃 °´Ã¼°¡ null °ªÀÌ
¾Æ´Ï¾î¾ß ÇÑ´Ù. ´ÙÀ½ ÄÚµå´Â VectorSerializer
¿¡¼ ÀÌ Á¦¾à »çÇ×µéÀÌ ¾î¶»°Ô Àû¿ëµÇ´ÂÁö¸¦ º¸¿©ÁØ´Ù.
if ( (src != null) &&
!(src instanceof Vector) &&
!(src instanceof Enumeration))
throw new IllegalArgumentException("Tried to pass a '" +
src.getClass().toString() + "' to VectorSerializer");
¸î °³ÀÇ ³»ÀåµÈ Á÷·ÄÀÚ´Â ½ÇÁ¦·Î ´ÙÀ½°ú °°ÀÌ javaType
¸Å°³º¯¼ö¿Í ¿¹»óµÇ´Â À¯ÇüÀ» ºñ±³ÇÑ´Ù.
if(!javaType.equals(Foo.class)) ...
±×·¯³ª ÀÌ ±â¹ýÀº impostor À¯Çü ¹ö±×¿¡ °¨¿°µÇ±â ½±±â ¶§¹®¿¡ (Âü°íÀÚ·á )
ÀÌ ¹æ¹ýÀº »ç¿ëÇÏÁö ¾Ê´Â°ÍÀÌ ³´´Ù.
3´Ü°è : null Á¢±ÙÀÚ »ý¼ºÇϱâ
°´Ã¼ ÀÎÀÚ°¡ null °ªÀ» °¡Áø´Ù¸é ±× À¯Çü¿¡ ´ëÇØ null Á¢±ÙÀÚ¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù.
SoapEncUtils.generateNullStructure(inScopeEncStyle,
javaType,
context,
sink,
nsStack,
xjmr);
4´Ü°è : °´Ã¼ Á÷·ÄÈÇϱâ
°´Ã¼¸¦ Section 5¸¦ µû¸£´Â SOAP XML ¹®¼·Î Á÷·ÄÈÇÏ·Á¸é ¼¼ ´Ü°è°¡ ÇÊ¿äÇÏ´Ù. Áï Á¢±ÙÀÚ¿¡ ´ëÇÑ °³½Ã
element¸¦ »ý¼ºÇÏ°í °´Ã¼ °ªÀ» Á÷·ÄÈÇÑ ÈÄ element¸¦ Á¾·áÇÏ´Â °ÍÀÌ´Ù.
ù¹ø° ´Ü°è´Â ´ÙÀ½ À¯Æ¿¸®Æ¼ ¸Þ½îµå¸¦ È£ÃâÇÔÀ¸·Î½á ½±°Ô ¼öÇàÇÒ ¼ö ÀÖ´Ù.
SoapEncUtils.generateStructureHeader(inScopeEncStyle,
javaType,
context,
sink,
nsStack,xjmr);
ÀÌ ÄÚµå´Â ¸ÅÇÎµÈ QName
for javaType
À» °Ë»öÇϱâ À§ÇØ
queryElementType
À» È£ÃâÇÒ °ÍÀÌ´Ù.
<context xsi:type="QName">
°´Ã¼ ÀÎÀÚÀÎ src
°¡ °£´ÜÇÑ À¯ÇüÀ̶ó¸é, µÎ¹ø° ´Ü°èÀÎ °´Ã¼ °ª Á÷·ÄÈÇϱâ´Â
src.toString()
¸Þ½îµå¸¦ È£ÃâÇÏ°í À̸¦ ÀÛ¼ºÇÏ´Â °£´ÜÇÑ ÀÛ¾÷ÀÌ´Ù. ±×·¸Áö ¾Ê´Ù¸é, °´Ã¼ÀÇ ±¸¼º
¿ä¼ÒµéÀ» È®ÀÎÇÏ°í À̵éÀ» º¸´Ù ¿ø½ÃÀûÀÎ Á÷·ÄÀÚ·Î °³º°ÀûÀ¸·Î Àü´ÞÇØ¾ß ÇÑ´Ù. ³»ÀåµÈ Á÷·ÄÀÚµéÀÇ ¼Ò½º¸¦ °ËÅäÇغ¸¸é ±¸¼º ¿ä¼ÒµéÀÌ ¿©·¯
¹æ½ÄÀ¸·Î È®À뵃 ¼ö ÀÖÀ½À» ¾Ë°Ô µÉ °ÍÀÌ´Ù.
Java reflection (¿¹ : BeanSerializer
)
List
µ¥ÀÌÅÍ ±¸Á¶ ¹Ýº¹ Àû¿ëÇϱâ (¿¹ : ArraySerializer
)
»çÀü¿¡ ¾Ë°í Àִ Ŭ·¡½º¸¦ ÅëÇÑ Á÷Á¢ÀûÀÎ Á¢±Ù (Áï ¿©·¯ºÐÀº ¿©·¯ºÐÀÇ Á÷·ÄÀÚ°¡ ÇϳªÀÇ Æ¯Á¤ Ŭ·¡½º¿¡ ´ëÇؼ¸¸ ÀÛµ¿ÇÑ´Ù´Â
°ÍÀ» »çÀü¿¡ ¾Ë°í ÀÖ´Ù.)
´Ù¸¥ Á÷·ÄÀÚµéÀ» È®ÀÎÇßÀ¸¸é, ´ÙÀ½À» È£ÃâÇÔÀ¸·Î½á À̵鿡 À§ÀÓÇÒ ¼ö ÀÖ´Ù.
xjmr.marshall(inScopeEncStyle,
componentType,
componentValue,
accessorName,
sink, nsStack, ctx);
¿©±â¿¡¼, componentType
°ú componentValue
´Â °¢°¢ ¿ø·¡ÀÇ
src
¸Å°³º¯¼öÀÇ ±¸¼º ¿ä¼Òµé¿¡ ´ëÇÑ ·±Å¸ÀÓ À¯Çü°ú °´Ã¼ ÂüÁ¶¸¦ Ç¥½ÃÇÑ´Ù.
marshall()
¸Þ½îµå´Â ¿¬°üµÈ Á÷·ÄÀÚ¸¦ °Ë»öÇϱâ À§ÇØ ½ÇÁ¦·Î
querySerializer
À» È£ÃâÇÏ°í µÚÀÌ¾î ¿¬°üµÈ Á÷·ÄÀÚÀÇ marshall()
¸Þ½îµå¸¦ È£ÃâÇÑ´Ù. ºÐ¸íÈ÷, ÀÌ°ÍÀº ¿©·¯ºÐÀÌ À¯Çü ¸ÅÇÎ ·¹Áö½ºÆ®¸®ÀÇ ¸ðµç ÄÄÆ÷³ÍÆ®¿¡ ´ëÇØ Á÷·ÄÀÚµéÀ» µî·ÏÇßÀ» ¶§¸¸ ÀÛµ¿ÇÑ´Ù.
¸¶Áö¸· ´Ü°èÀÎ element Á¾·áÇϱâ´Â °£´ÜÈ÷ Á¢±ÙÀÚ¿¡ ´ëÇÑ Á¾·á ű׸¦ ÀÛ¼ºÇÔÀ¸·Î½á ¿Ï·áµÈ´Ù.
sink.write("</" + context + '>');
¸¶Áö¸·À¸·Î, ÇöÀçÀÇ À̸§°ø°£ ¹üÀ§¸¦ ³²°ÜµÎ°í ¸¶¹«¸®ÇØ¾ß ÇÑ´Ù.
ºñÁ÷·ÄÀÚ ¼³¸í¼
ºñÁ÷·ÄÀÚ´Â org.apache.soap.util.xml.Deserializer
À» ±¸ÇöÇÏ°í ÇϳªÀÇ ¸Þ½îµå¸¦
½ÇÇöÇÑ´Ù.
Bean unmarshall(
java.lang.String inScopeEncStyle,
QName elementType,
org.w3c.dom.Node src,
XMLJavaMappingRegistry xjmr,
SOAPContext ctx)
unmarshall()
¸Þ½îµåÀÇ ¸ñÀûÀº ¸Å°³º¯¼ö¸¦ ÀÚ¹Ù °´Ã¼·Î À籸ÃàÇÏ´Â °ÍÀÌ´Ù. À̸¦ À§ÇØ
src
DOM ³ëµå¿¡ Æ÷ÇÔµÈ XML ºÎºÐÀ» ó¸®ÇØ¾ß ÇÑ´Ù. À̸¦ ¼öÇàÇϱâ À§ÇØ ¼±È£µÇ´Â ÇÁ·Î±×·¡¹Ö ¸ðµ¨Àº
org.apache.soap.utils.xml.DOMUtils
³»ÀÇ DOM wrapper ¸Þ½îµå¸¦ À¯Çü ¸ÅÇÎ
·¹Áö½ºÆ®¸®¿Í ¿¬°èÇÏ¿© »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î, ºñÁ÷·ÄÈÀÇ DOMUtils
´Â Á÷·ÄÈÀÇ
SoapEncUtils¿¡ ÇÊÀûÇÏ´Â °ÍÀÌ´Ù.
src
¿¡ µé¾î ÀÖ´Â XMLÀº ´ÙÁß ÂüÁ¶ °ªÀÇ Á¦¾àÀ» ¹ÞÁö ¾Êµµ·Ï º¸ÁõµÈ´Ù´Â Á¡¿¡ ÁÖÀÇÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù.
¸ðµç ´ÙÁß ÂüÁ¶ href
s´Â ·çÆ® ºñÁ÷·ÄÀÚÀÎ ParameterSerializer
¿¡ ÀÇÇØ
½ÇÁ¦ °ªÀ¸·Î ´Ù½Ã ¹Ù²ï´Ù.
ºñÁ÷·ÄÀÚ ¼³¸í¼´Â ´ÙÀ½°ú °°´Ù.
1´Ü°è : null °ª üũÇϱâ
nullÀÌ µÉ ¼ö ÀÖ´Â ¼Ó¼ºÀ» ´ÙÀ½°ú °°ÀÌ Ã¼Å©ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
Element root = (Element)src;
if (SoapEncUtils.isNull(root))
{
return new Bean(Your.class, null);
}
2´Ü°è : ÀÚ¹Ù °´Ã¼ À籸ÃàÇϱâ
ÀÚ¹Ù °´Ã¼ À籸Ãà ÀýÂ÷´Â µ¥ÀÌÅÍ À¯ÇüÀÌ ¼ÓÇÏ´Â Ä«Å×°í¸®¿¡ µû¶ó ´Ù¾çÇÏ´Ù. ( Part
1 ÂüÁ¶)
°£´ÜÇÑ À¯Çü
¿©·¯ºÐÀÌ °£´ÜÇÑ À¯ÇüÀ» ºñÁ÷·ÄÈÇÏ°í ÀÖ´Ù¸é, ¹ÝȯµÉ °´Ã¼¸¦ ÃʱâÈÇϱâ À§ÇØ À̸¦ »ç¿ëÇϱâ Àü¿¡ ¸ÕÀú
DOMUtils.getChildCharacterData(Element)
À» »ç¿ëÇÏ¿©
src
ÀÇ ¹®ÀÚ¿ °ªÀ» °Ë»öÇÏ°í ¼±ÅÃÀûÀ¸·Î À̸¦ »çÀü ó¸® (¿¹ : "NaN" ¹®ÀÚ¿À»
FloatDeserializer
³»ÀÇ Float.NaN
¿¡ ¸ÅÇνÃÅ´)ÇØ¾ß ÇÑ´Ù.
º¹ÇÕ À¯Çü
º¹ÇÕ À¯ÇüÀº µÎ °³ÀÇ ÁÖ¿ä Ä«Å×°í¸®·Î ³ª´¶´Ù. ù¹ø°´Â °°Àº ±¸Á¶·Î µÈ ¹Ýº¹µÇ´Â element¸¦ °¡Áø À¯ÇüÀ¸·Î ±¸¼ºµÈ´Ù.
¿¹ÄÁ´ë, java.util.List
¿Í java.util.MapÀ» ±¸ÇöÇÏ´Â
ÀÚ¹Ù ¹è¿À̳ª
Ŭ·¡½º°¡ ¿©±â¿¡ Æ÷ÇԵȴÙ. ´Ù¸¥ Ä«Å×°í¸®´Â ÀÓÀÇÀûÀÎ ±¸Á¶¸¦ º¸ÀÌ´Â ´Ù¸¥ ¸ðµç Àڹ٠Ŭ·¡½º¸¦ ³ªÅ¸³½´Ù. ±×·¯¸é ºñÁ÷·ÄÈ ÀýÂ÷´Â °á±¹
°ü·ÃµÈ ÀÚ¼Õ element¸¦ È®ÀÎÇϱâ À§ÇØ XML ±¸Á¶¸¦ Ç×ÇØÇÏ°í µÚÀÌ¾î º¸´Ù ¿ø½ÃÀûÀÎ ºñÁ÷·ÄÀÚ·Î Á÷·ÄÈ Ã¥ÀÓÀ» À§ÀÓÇÏ´Â °ÍÀÌ
µÇ´Âµ¥, ÀÌ°ÍÀº ´ÙÀ½°ú °°´Ù.
DOM Ç×ÇØÇϱ⠿©·¯ºÐÀÌ Ã¹¹ø° Ä«Å×°í¸®¿¡ ¼ÓÇÏ´Â º¹ÇÕ À¯ÇüÀ» ´Ù·ç°í ÀÖ´Ù¸é ¹Ýº¹µÇ´Â ¸ðµç ¸â¹öµé °£À»
Ç×ÇØÇϱâ À§ÇØ DOMUtils.getFirstChildElement()
°ú
DOMUtils.getNextSiblingElement()
¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é ¸â¹ö Ư¼ºÀ»
Ç¥ÇöÇÏ´Âelements ¸¦ È®ÀÎÇϱâ À§ÇØ DOM API¸¦ »ç¿ëÇÑ´Ù.
´Ù¸¥ ºñÁ÷·ÄÀÚ·Î ºñÁ÷·ÄÈ À§ÀÓÇϱ⠸ÕÀú ¿©·¯ºÐÀº soap À¯ÇüÀ» ÃßÃâÇØ¾ß ÇÑ´Ù.
QName soapType = SoapEncUtils.getTypeQName(rootElement);
´ÙÀ½¿¡ º¸´Ù ¿ø½ÃÀûÀÎ ºñÁ÷·ÄÀÚ·Î À§ÀÓÇÑ´Ù.
xjmr.unmarshall(inScopeEncStyle, soapType, rootElement, ctx);
xjmr.unmarshall
Àº ³»ºÎÀûÀ¸·Î queryDeserializer
¸¦
È£ÃâÇÑ ÈÄ ¹ÝȯµÈ ºñÁ÷·ÄÀÚ¿¡ unmarshall
À» È£ÃâÇÑ´Ù. À§ÀÇ µÎ ´Ü°èµéÀº ºñÁ÷·Äȸ¦
ParameterSerializer
·Î À§ÀÓÇÔÀ¸·Î½á Çϳª·Î ÇÕÃÄÁö´Â °ÍÀÌ ³´´Ù. ÀÌ´Â xsi:type ¼Ó¼ºÀÌ
ºüÁø »óȲ¿¡¼ QName {""}/X
(X´Â ·çÆ® elementÀÇ tagName)¿¡ ¼³Á¤µÈ
soapType°ú ÇÔ²² xjmr.unmarshall()À» È£ÃâÇÏ°í ½Í±â ¶§¹®¿¡ ¼öÇàµÈ´Ù. À̸¦ ¼öÇàÇϱâ À§ÇÑ ÄÚµå´Â À̹Ì
ParameterSerializer.unmarshall()
³»¿¡ Æí¸®ÇÏ°Ô µé¾î Àֱ⠶§¹®¿¡ ÀÌ ÀýÂ÷´Â
´ÙÀ½°ú °°ÀÌ ´ÜÃàµÈ ÇüÅ·ΠµÈ´Ù.
Bean paramBean = xjmr.unmarshall(inScopeEncStyle,
RPCConstants.Q_ELEM_PARAMETER,
rootElement, ctx);
¸ñÇ¥ °´Ã¼ ÃʱâÈÇϱ⠸ñÇ¥ °´Ã¼ ´Â ¿©·¯ºÐÀÌ À籸ÃàÇÏ°í ÀÖ´Â °´Ã¼ ÀνºÅϽºÀÌ´Ù. ¸â¹ö Ư¼ºµéÀÌ
ºñÁ÷·Äȵʿ¡ µû¶ó ¿©·¯ºÐÀº ¿©·¯ºÐÀÇ ¸ñÇ¥ °´Ã¼¿¡ º¯°æÀÚ(mutator) ¸Þ½îµå¸¦
È£ÃâÇÔÀ¸·Î½á ±× °ªÀ» º¹±¸ÇÒ ¼ö ÀÖ´Ù.
Foo foo = new Foo();
foo.setS( paramBean.value );
3´Ü°è : À籸ÃàµÈ °´Ã¼ ¹ÝȯÇϱâ
Bean
Ŭ·¡½º´Â ·±Å¸ÀÓ À¯Çü°ú ½ÇÁ¦ ¹ÝȯµÇ´Â ÀνºÅϽº¸¦ ĸ½¶ÈÇÑ´Ù. ºñÁ÷·ÄÀÚ´Â ´ëºÎºÐÀÇ °æ¿ì ƯÁ¤
Ŭ·¡½º¿¡ ¸Â°Ô ¸¸µé¾îÁ³±â ¶§¹®¿¡ ¾î¶² Ŭ·¡½º¸¦ ¹ÝȯÇØ¾ß ÇÏ´ÂÁö¸¦ ¾Ë°í ÀÖ´Ù. BeanSerializer
¿Í
ArraySerializer
°°Àº ÀÏ¹Ý ºñÁ÷·ÄÀÚ¿¡ ´ëÇؼ´Â À¯Çü ¸ÅÇÎ ³»ÀÇ
javaType
¼Ó¼ºÀÌ ¹ÝȯµÇ¾î¾ß ÇÏ´Â À¯ÇüÀ» Àü´ÞÇÑ´Ù.
return(new Bean(Foo.class, foo));
·çÆ® (ºñ)Á÷·ÄÀÚ µî·ÏÇϱâ
¿©·¯ºÐÀÌ Á¤ÀÇÇÑ encodingStyles
À» µµÀÔÇÏ·Á°í ÇÑ´Ù¸é ·çÆ® (ºñ)Á÷·ÄÀÚ¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù°í À̹Ì
¾ð±ÞÇß´Ù. ·çÆ® (ºñ)Á÷·ÄÀÚ´Â ÇÑ °¡Áö ÀÛÀº Â÷À̸¦ Á¦¿ÜÇÏ°í´Â ÀÏ¹Ý (ºñ)Á÷·ÄÀÚ¿Í °°Àº ¹æ½ÄÀ¸·Î ±¸ÇöµÈ´Ù. ¸ðµç (ºñ)Á÷·ÄÀڴ Ưº°È÷
ÁöÁ¤µÈ QName°ú ÀÚ¹Ù À¯ÇüÀ¸·Î À¯Çü ¸ÅÇÎ ·¹Áö½ºÆ®¸®¿¡ µî·ÏµÇ´Âµ¥, À̵éÀº ¾ÆÆÄÄ¡ SOAP¿¡°Ô
encodingStyles
Ư¼º¿¡ ±â¹ÝÇÏ¿© (ºñ)Á÷·ÄÈ ÀýÂ÷¸¦ ½Ãµ¿Ç϶ó°í Áö½ÃÇÑ´Ù. ¾Æ·¡ÀÇ »ùÇà Äڵ忡¼
°Á¶µÈ °ªÀ» ±â·ÏÇØ µÎ¾ú´Ù°¡ ·çÆ® (ºñ)Á÷·ÄÀÚ¸¦ µî·ÏÇÒ ‹š »ç¿ëÇØ¾ß ÇÑ´Ù.
[Client]
smr.mapTypes(customEncURI,
RPCConstants.Q_ELEM_PARAMETER ,
Parameter.class ,
customSerializer,
null);
[Server]
<isd:map encodingStyle="customEncURI"
xmlns:x="http://schemas.xmlsoap.org/soap/envelope" qname="x:Parameter"
javaType="org.apache.soap.rpc.Parameter"
java2XMLClassName="foo.customSerializer" />
½ºÅ°¸¶ÀÇ Á¦ÇÑÀ» ¹Þ´Â SOAP
ÀÌ ¼½¼Ç¿¡¼ ³ª´Â º¹ÀâÇÑ À¯ÇüÀ» (ºñ)Á÷·ÄÈÇϱâ À§ÇÑ BeanSerializer
¿¡ ´ëÇÑ ´ëü ¼Ö·ç¼ÇÀ»
¼Ò°³ÇÒ °ÍÀÌ´Ù. ³»°¡ ½ºÅ°¸¶ÀÇ Á¦ÇÑÀ» ¹Þ´Â SOAP À̶ó°í ºÎ¸£´Â ÀÌ ±â¹ýÀº PRC ¸Å°³º¯¼öÀÇ literal XML ±¸Á¶¸¦
±â¼úÇϱâ À§ÇØ XML ½ºÅ°¸¶¸¦ »ç¿ëÇÑ´Ù. ¿©±â¿¡¼ ¿ì¸®´Â Ŭ¶óÀ̾ðÆ®¿Í ¼¹öÃøÀÇ µ¥ÀÌÅÍ ¸ðµ¨¿¡ ´ëÇؼ´Â °³ÀÇÄ¡ ¾Ê°í ¸Þ½ÃÁö Æ÷¸Ë¿¡ ´ëÇØ
¾ö°ÝÇÏ°Ô »óÈ£¿î¿ëÇϱâ·Î µ¿ÀÇÇÑ´Ù. È¥¶õÀ» ÇÇÇϱâ À§ÇØ, PRC È£ÃâÀº ¿©ÀüÈ÷ Section 5¸¦ »ç¿ëÇØ ÀÎÄÚµùµÇÁö¸¸ ¸Å°³º¯¼ö´Â ±×·¸Áö
¾Ê´Ù´Â Á¡¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù.
¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇØ ÀÌ ±â¹ýÀ» º¸¿© ÁÖ°Ú´Ù. Âü°íÀÚ·á ¿¡¼
Àüü Äڵ带 ´Ù¿î·Îµå¹ÞÀ» ¼ö ÀÖ´Ù. Ŭ¶óÀ̾ðÆ®´Â À¥ ¼ºñ½º¿¡°Ô ±¸¸Å ÁÖ¹®À» º¸³»°í, ¼ºñ½º´Â ½ÂÀÎ ¹®ÀÚ¿·Î ÀÀ´äÇÑ´Ù. À¥ ¼ºñ½º°¡
¿¢½ºÆ÷Æ®ÇÑ ¸Þ½îµå ¼¸íÀº ´ÙÀ½°ú °°´Ù.
public String eatPo (PurchaseOrder p);
ÀÌ ±â¹ýÀÌ ÀÛµ¿Çϵµ·Ï ÇÏ·Á¸é XML/°´Ã¼ µ¥ÀÌÅÍ ¹ÙÀεù ÇÁ·¹ÀÓ¿öÅ©°¡ ÇÊ¿äÇÏ´Ù. ÀÌ ¿¹Á¦¿¡ ExolabÀÇ Castor ÅøŶÀ»
»ç¿ëÇß´Ù. (Âü°íÀÚ·á )
ÀÌ ±â¹ýÀÇ ´Ü°èµéÀº ´ÙÀ½°ú °°´Ù.
PurchaseOrder
¿¡ ´ëÇÑ XML Æ÷¸Ë¿¡ ÇÕÀÇÇÑ´Ù.
Castor¸¦ »ç¿ëÇÏ¿© Àڹ٠Ŭ·¡½º¸¦ »ý¼ºÇÑ´Ù.
»ç¿ëÀÚ Á¤ÀÇ (ºñ)Á÷·ÄÀÚ¸¦ ÀÛ¼ºÇÑ´Ù.
Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö ºÎºÐ¿¡ ´ëÇÑ À¯Çü ¸ÅÇÎÀ» ÀÛ¼ºÇÑ´Ù.
1´Ü°è :
PurchaseOrder
¿¡ ´ëÇÑ XML Æ÷¸Ë¿¡ ÇÕÀÇÇϱâ
¼³¸íÀ» °£´ÜÇÏ°Ô Çϱâ À§ÇØ PurchaseOrder
½ºÅ°¸¶¿¡¼ ÁÖ¹® »ó¼¼ ¼½¼ÇÀ» ¾ø¾Ý´Ù. ¶ÇÇÑ
PONumber
¼Ó¼ºÀº ÀÌ ½ºÅ°¸¶°¡ Section 5 ÀÎÄÚµùÀ» µû¸£Áö ¾Êµµ·Ï ¸¸µç´Ù´Â Á¡¿¡ ÁÖÀÇÇÑ´Ù.
±×¸² 2. PurchaseOrder.xsd
2´Ü°è : Castor¸¦ »ç¿ëÇÏ¿© Àڹ٠Ŭ·¡½º
»ý¼ºÇϱâ
CastorÀÇ SourceGenerator
¸í·ÉÇà ÅøÀ» ½ÇÇà½ÃÄÑ
PurchaseOrder.xsd
³»ÀÇ ½ºÅ°¸¶¸¦ ±¸ÇöÇÏ´Â Àڹ٠Ŭ·¡½º¸¦ »ý¼ºÇÑ´Ù.
java org.exolab.castor.builder.SourceGenerator
-i PurchaseOrder.xsd
-package com.raverun.po.castor
SourceGenerator
ÅøÀº ÃֽŠ½ºÅ°¸¶ À̸§°ø°£¸¸ ÀνÄÇÑ´Ù. --
http://www.w3.org/2001/XMLSchema
´ÙÀ½¿¡ Àڹ٠Ŭ·¡½º ¼¼Æ®¸¦ ÄÄÆÄÀÏÇÑ´Ù. »ý¼ºµÈ ÆÄÀÏÀÌ SAX 1.0 API¸¦ »ç¿ëÇÔ¿¡ µû¶ó ¿©·¯ºÐÀº
-deprecation
¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÒ °ÍÀÓ¿¡ ÁÖÀÇÇÑ´Ù. ÀÌ·¯ÇÑ ¼öÀÛ¾÷ ÄÄÆÄÀÏÀ» ÇÇÇϱâ À§ÇØ ExolabÀº
À̸¦ ÀÚµ¿ÈÇϱâ À§ÇÑ Ant taskdef¿¡ ´ëÇØ ÀÛ¾÷ÇÏ°í ÀÖ´Ù.
3´Ü°è : »ç¿ëÀÚ Á¤ÀÇ (ºñ)Á÷·ÄÀÚ ÀÛ¼ºÇϱâ
¿©·¯ºÐÀº ÀÌÁ¦ PurchaseOrderSerializer
³»ÀÇ (ºñ)Á÷·ÄÈ ¸Þ½îµå¸¦ ±¸ÇöÇϴµ¥, ÀÌ´Â
PurchaseOrder
Ŭ·¡½º°¡ ³ªÅ¸³»´Â ´ëÀÀ ¸Þ½îµå¸¦ È°¿ëÇÔÀ¸·Î½á ¼öÇàµÈ´Ù. Á÷·Äȸ¦ À§ÇØ
PurchaseOrder
´Â java.io.Writer
³ª
org.xml.sax.DocumentHandler
·Î ¹è¿µÉ ¼ö ÀÖ´Ù. Listing
1 ¿¡ ³ª¿Í ÀÖµíÀÌ ¿©·¯ºÐÀº Á÷·Äȸ¦ PurchaseOrder
's
marshal()
¸Þ½îµå¿¡ À§ÀÓÇÑ´Ù. (ÁÖÀÇ»çÇ×: marshal()
¿¡ ÀÇÇØ »ý¼ºµÈ
XML ½ºÆ®¸²Àº XML ÇÁ·Ñ·Î±×¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù.) PurchaseOrderSerializer
´Â
sink
¸¦ java.io.FilterWriter
ÀÎ
FilterXmlProlog
·Î Æ÷ÀåÇÔÀ¸·Î½á ÀÌ ÇÁ·Ñ·Î±×¸¦ »èÁ¦ÇÑ´Ù. Listing
2 ´Â ºñÁ÷·ÄÈ °úÁ¤ µ¿¾È ¹ßÇàÇÒ ¼ö ÀÖ´Â ¸î °¡Áö ¿¹¿Ü »óȲÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù.
Listing 1. PurchaseOrderSerializer ³»ÀÇ marshal()
¸Þ½îµå¿¡¼ ÃßÃâ
----o<---------
SoapEncUtils.generateStructureHeader(inScopeEncStyle,
javaType,
context,
sink,
nsStack,
xjmr);
PurchaseOrder po = (PurchaseOrder)src;
try{
po.marshal( new FilterXmlProlog(sink) );
}catch(Exception e){
throw (new java.io.IOException("Castor: Error marshalling"));
}
sink.write( StringUtils.lineSeparator );
sink.write("</" + context + '>');
----o<---------
Listing 2. PurchaseOrderSerializer ³»ÀÇ ºñÁ÷·ÄÈ °úÁ¤µ¿¾È
¹ß»ýÇÏ´Â ¿¹¿Ü »óȲ
(b1) Null PO.
---------------------------
<po
xmlns:ns2="urn:raverun"
xsi:type="ns2:po"
xsi:null="true"/>
---------------------------
(b2) Non null but nothing submitted in the body.
---------------------------
<po
xmlns:ns2="urn:raverun"
xsi:type="ns2:po" />
---------------------------
(b3) PO that violates the schema.
---------------------------
<po
xmlns:ns2="urn:raverun"
xsi:type="ns2:po">
<foo bar="123"/>
</po>
---------------------------
4´Ü°è : Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö ºÎºÐ¿¡ ´ëÇÑ À¯Çü ¸ÅÇÎ
ÀÛ¼ºÇϱâ
¸¶Áö¸·À¸·Î ¿©·¯ºÐÀÌ Á¤ÀÇÇÑ (ºñ)Á÷·ÄÀÚ¸¦ ÂüÁ¶Çϱâ À§ÇÑ À¯Çü ¸ÅÇÎÀ» ¼±¾ðÇØ¾ß ÇÑ´Ù. ¿©·¯ºÐÀº
PurchaseOrder
¿¡ ´ëÇÑ ÀÎÄÚµùÀ¸·Î Section 5°¡ ÁöÁ¤µÇ¾î ÀÖ´Â °ÍÀ» º¸¸é ³î¶ö °ÍÀÌ´Ù. ÀÌ·¸°Ô
ÇÏ¸é ¿©·¯ºÐÀÌ ºñÁ÷·ÄÈ ÀýÂ÷¸¦ ½Ãµ¿Çϱâ À§ÇØ ParameterSerializer
¸¦ »ç¿ëÇÒ ¼ö ÀÖ°í Á÷·ÄÈ ÄÚµå
³»ÀÇ SoapEncUtils
µµ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ ÆíÀÇ»ó ÀÌ·¸°Ô ÁöÁ¤ÇÑ °ÍÀÌ´Ù.
[Client]
SOAPMappingRegistry smr = new SOAPMappingRegistry();
smr.mapTypes(Constants.NS_URI_SOAP_ENC,
new QName("urn:raverun", "po"),
PurchaseOrder.class, pos, null);
[Server]
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="urn:raverun" qname="x:po"
javaType="com.raverun.po.castor.PurchaseOrder"
xml2JavaClassName="com.raverun.po.PurchaseOrderSerializer" />
ÀáÀçÀûÀÎ ¹®Á¦Á¡
½ºÅ°¸¶ÀÇ Á¦ÇÑÀ» ¹Þ´Â SOAP ¿¹Á¦¸¦ °ËÅäÇÒ ¶§ ¿©·¯ºÐÀº ´ÙÀ½°ú °°Àº »çÇ×µéÀ» ¿°µÎ¿¡ µÎ¾î¾ß ÇÑ´Ù.
Ç¥ÁØÀ» µû¸£±â À§ÇØ ¿©·¯ºÐÀº <po>
element ³»¿¡ ÀÖ´Â Section 5 ÀÎÄÚµù¿¡
°üÇØ ¾î¶² Ŭ·¹ÀÓµµ È°¼ºÈ½ÃÅ°Áö ¸»¾Æ¾ß ÇÑ´Ù. (Ç¥ÁØ¿¡ º¸´Ù »óÀÀÇÏ´Â SOAP XML ÀνºÅϽº¿¡ ´ëÇؼ´Â Listing
3 ÂüÁ¶). SOAP 1.1 »ç¾ç (Âü°íÀÚ·á )Àº
ÀÌ ¿ä°ÇÀ» ´ÙÀ½°ú °°ÀÌ ±â¼úÇÏ°í ÀÖ´Ù.
±æÀÌ°¡ 0ÀÎ URI ("")ÀÇ °ªÀº Æ÷ÇÔµÈ elementÀÇ ÀÎÄÚµù À¯Çü¿¡ ´ëÇØ ¾î¶²
Ŭ·¹ÀÓµµ ÀÌ·ç¾îÁöÁö ¾Ê¾ÒÀ½À» ¸í½ÃÀûÀ¸·Î ³ªÅ¸³½´Ù .
null °ªÀ» °¡Áø encodingStyle
¿¡ ´ëÇÑ ´ë¾ÈÀº ¿©·¯ºÐÀÇ Åë½Å ¿ä±¸¿¡ ¸Â°Ô ¸¸µé¾îÁø »ç¿ëÀÚ
Á¤ÀÇ encodingStyleURI
¸¦ µµÀÔÇÏ´Â °ÍÀÌ´Ù.
Castor¿¡´Â Á¶½ÉÇØ¾ß ÇÒ ¸î °¡Áö ¹ö±×°¡ ÀÖÁö¸¸, ¸ðµÎ ÇØ°áÃ¥À» °¡Áö°í ÀÖ´Ù. ¿©·¯ºÐÀÌ ¹öÀü 0.9.3 ÀÌÀüÀÇ
Castor¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é ½ºÅ°¸¶ À¯È¿¼º È®ÀÎÀÌ ±â´ëó·³ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ¿©±â¿¡ ´ëÇÑ ¼Ö·ç¼ÇÀº ÃֽŠÃâ½ÃÆÇÀ¸·Î ¾÷±×·¹À̵åÇÏ´Â
°ÍÀÌ´Ù. ¹Ý¸é Castor 0.9.3 (³»°¡ »ç¿ëÇÏ´Â ¹öÀü)Àº Ç¥ÁØ Ãâ·Â ½ºÆ®¸²¿¡ °¡Â¥ ¸Þ½ÃÁö¸¦ »ý¼ºÇÑ´Ù. ³»°¡ ¸¸³ ¸Þ½ÃÁö´Â
´ÙÀ½°ú °°´Ù.
Warning : preserved is a bad entry for the whiteSpace value.
ÃֽŠ¹öÀüÀÎ Castor 0.9.3.9¿¡¼´Â ÀÌ °æ°í°¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù.
PurchaseOrderSerializer´Â º¹¼ö ÂüÁ¶ °ª¿¡ ´ëÇØ Á÷·ÄÈÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª À̵éÀ» ¿Ã¹Ù·Î
ºñÁ÷·ÄÈÇÒ °ÍÀÌ´Ù. ÀÌ°ÍÀº º»ÁúÀûÀ¸·Î PurchaseOrderSerializerÀÇ ±â´ÉÀÌ ¾Æ´Ï¶ó
ParameterSerializerÀÇ ±â´ÉÀÌ´Ù.
Listing 3. Ç¥ÁØ¿¡ º¸´Ù »óÀÀÇÏ´Â SOAP ÀνºÅϽº
<ns1:eatPo
xmlns:ns1="urn:poservice"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<po
xmlns:ns2="urn:raverun"
xsi:type="ns2:po"
SOAP-ENV:encodingStyle="">
<purchaseOrder xmlns="http://www.example.com/PO1">
<header PONumber="9999-1212">
<Date>2001-09-25T14:40:13.453</Date>
</header>
...
</purchaseOrder>
</po>
</ns1:eatPo>
ÃÖ±ÙÀÇ ÀÎÅÍÆäÀ̽º º¯°æ »çÇ×
¾ÆÆÄÄ¡ SOAPÀÇ ÃֽŠ°ø½Ä Ãâ½ÃÆÇ (¹öÀü 2.2)Àº 2001³â 5¿ù¿¡ ³ª¿Ô´Ù. °³¹ß Æ÷Ä¿½º°¡ Axis (ÇöÀç º£Å¸ 1 ¹öÀü)·Î
¿Å°Ü°¬Áö¸¸, ¹ö±× ¼öÁ¤ÀÌ °è¼Ó Ãß°¡µÇ°í ÀÖ´Ù. ¿ì¸®´Â 2.3 Ãâ½Ã¸¦ ±â´Ù¸®°í ÀÖÁö¸¸ (¸¸¾à ÀÖ´Ù¸é), °ø½Ä Ãâ½ÃÆÇ »ç¿ëÀÚµéÀº
ÄÚµå±â¹Ý, ƯÈ÷ SOAPMappingRegistry
¹× ÀÌ¿Í °ü·ÃµÈ Ŭ·¡½ºµé¿¡ ÁÖ¿ä ¾÷±×·¹À̵尡 ÀÖ¾úÀ½À»
¾Ë¾Æ¾ß ÇÑ´Ù. ±âÁ¸ÀÇ ÄÚµå´Â ÀÌ ¼öÁ¤ »çÇ×µé°ú »óÈ£ÀÛ¿ëÇϱâ À§ÇØ ¸î °¡Áö º¯°æÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº ÁÖ¸ñÇÒ¸¸ÇÑ º¯°æ »çÇ×µéÀÌ´Ù.
½ºÅ°¸¶ À̸§°ø°£Àº ÀÌÁ¦ 2001 ±Ç°í À̸§ °ø°£À» ±âº»À¸·Î ÂüÁ¶ÇÑ´Ù. ¹öÀü 2.2´Â 1999 À̸§°ø°£À» ÂüÁ¶ÇÏ¿´´Ù.
°á°úÀûÀ¸·Î, ¿©·¯ºÐÀÌ ÀÎÀÚ°¡ ¾ø´Â »ý¼ºÀÚ·Î
SO APMappingRegistry¸¦ ÀνºÅϽºÈÇÒ °æ¿ì 2001 À̸§ °ø°£À» ÀνÄÇÏ´Â ÀνºÅϽº°¡ ¹ÝȯµÈ´Ù.
SOAPMappingRegistry
¿¡ ´ëÇÑ ÀνºÅϽº »ý¼ºÀÌ Á¤ÀûÀÎ ÆÑÅ丮 À¯Çü¿¡ µû¶ó Àç¼³°èµÇ¾ú´Ù.
µû¶ó¼ ¿©·¯ºÐÀº ÀÌÁ¦ °úºÎÇÏµÈ »ý¼ºÀÚÀÎ SOAPMappingRegistry(schemaURI)
´ë½Å
getBaseRegistry(schemaURI)
ÆÑÅ丮 ¸Þ½îµå¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
public static SOAPMappingRegistry getBaseRegistry (String schemaURI);
¹öÀü 2.2´Â ·¹Áö½ºÆ®¸®µéÀ» ¿¬°á½ÃÅ°´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÌ ¸Þ½îµåµéÀº ÃÖ±Ù¿¡ Ãß°¡µÇ¾ú´Ù.
public SOAPMappingRegistry(SOAPMappingRegistry parent);
public SOAPMappingRegistry(SOAPMappingRegistry parent, String schemaURI);
public SOAPMappingRegistry getParent()
public String getSchemaURI()
ÀÏÄ¡µÇ´Â °ÍÀÌ ¹ß°ßµÉ ¶§±îÁö üÀÎ Àü¹Ý¿¡ °ÉÃÄ À¯Çü
¸ÅÇÎÀÌ ÀüȯÀÌ ÀÌ·ç¾îÁú °ÍÀÌ´Ù.
DeploymentDescriptor
Ŭ·¡½º´Â À¯Çü ¸ÅÇÎ ¼±¾ð¿¡¼ qname
¼Ó¼ºÀ» ¿É¼ÇÀ¸·Î ó¸®ÇÒ °ÍÀÌ´Ù.
°á·Ð
ÀÌ ±Û¿¡ ³ª¿Â ¿¹Á¦°¡ Part 1ÀÇ ÀÌ·ÐÀû °³³äµéÀ» ¸íÈ®ÇÏ°Ô Ç߱⸦ ±â´ëÇÑ´Ù. ³×Æ®¿öÅ© »óÀÇ ¸¹Àº ¸Ó½Å¿¡¼ ÀÛµ¿ÇÏ´Â À¥
¼ºñ½ºµéÀÌ ±¤¹üÀ§ÇÏ°Ô ½ÇÇöµÇ¸é °³¹ßÀÚµéÀº ÇÁ·Î±×·¥ÈµÈ °´Ã¼µéÀÌ ÇÑ ¸Ó½Å¿¡¼ ´Ù¸¥ ¸Ó½ÅÀ¸·Î ¾î¶»°Ô Àü¼ÛµÇ´ÂÁö¸¦ ÀÌÇØÇØ¾ß ÇÑ´Ù.
SOAPÀÇ À¯Çü ¸ÅÇÎ ±â´ÉÀ» Àß ÀÌÇØÇÏ¸é º¸´Ù ³ªÀº ºÐ»ê ¾ÖÇø®ÄÉÀ̼ǰú ¼ºñ½º °³¹ß¿¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
Âü°íÀÚ·á
ÇÊÀÚ¼Ò°³ Gavin BongÀº ¸»·¹À̽þÆÀÇ ÀÚ¹Ù °³¹ßÀÚÀÌ´Ù. ¼ºñ½º ÁöÇâ
¾ÆÅ°ÅØÃÄ¿Í ¹«¼± ÀÚ¹Ù¿¡ °ü½ÉÀ» °®°í ÀÖ´Ù.