xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
ejb2.1£¨enterprise javabeans 2.1£©ÕýÊ½ÍÆ¼ö°æ±¾ÒѾ³ǫ̈£¬Ëü²úÉúµÄ¶¯Á¦Ö÷ÒªÊÇenterprise javabeans¶ÔÖ§³Öweb serviceµÄÐèÇó£¬Í¬Ê±Ò²ÊÇÒòΪmicr
osoft .netµÄ·¢²¼£¬Ëü¶Ôj2ee»òÕß˵¶Ôjava¼¼ÊõÀ´ËµÒѾ¹¹³ÉÁ˾޴óÍþв¡£ÔÚа汾µÄejb2.1ÖУ¬Ö÷ÒªµÄ±ä»¯Ö÷Òª¼¯ÖÐÔÚ»ùÓÚsoapºÍwsdlµÄweb serviceÉÏ¡£ejbÒѾ³ÉΪһÖÖеÄweb serviceƽ̨¡£Ëü¶Ôweb serviceµÄÖ§³ÖÖ÷ÒªÌåÏÖÔÚÈý¸öеÄweb service apiÉÏ:·Ö±ðÊÇjax-rpc£¨java api for xml-rpc£¬Ëü»ù±¾ÉÏÊÇͨ¹ýsoapʵÏÖµÄjava rmi£¬Îªrpc¸ñʽµÄsoapÏûÏ¢ÌṩԶ¶Ë½Ó¿Ú£©¡¢saaj£¨soap api with attachments for java£¬ËüÄ£·ÂsoapÏûÏ¢µÄ½á¹¹£¬Í¬Ê±Ò²Óй¦ÄÜÓÐÏÞµÄÏûÏ¢·Ö·¢ÄÜÁ¦£©ºÍjaxm£¨java api for xml messaging£¬ËüÀàËÆÓÚjms£¬Ìṩ·¢ËͺͽÓÊÕsoapÏûÏ¢µÄÏûÏ¢¼Ü¹¹£©£¬ÀûÓÃËüÃÇ¿ÉÒÔʵÏÖÓëÆäËüÀàÐ͵Äweb service½øÐÐͨѶ£¬¶øÇÒ»¹ÔÊÐíÎÞÐòµÄ»á»°beanºÍÏûÏ¢Çý¶¯µÄbeanÀ´×÷Ϊweb serviceʹÓã¬Ê¹ËüÃÇÄܹ»±»ÈκÎÓë soap1.1¼æÈݵĿͻ§¶ËËù·ÃÎÊ¡£ÀýÈ磺ʹÓÃsoap£¬ÎÒÃǾͿÉÒÔ´ÓÆäËüƽ̨web serviceÀ´µ÷ÓÃÎÞÐòµÄ»á»°beanµÄ·½·¨£¬Ïó΢ÈíµÄ.net£¬perl£¬apache axixºÍÆäËûµÄÓïÑÔºÍÆ½Ì¨¡£ejb2.1ÖÐеÄweb service¹¦ÄÜÄܹ»ÌṩһÖÖǰËùδÓÐµÄ¿çÆ½Ì¨»¥²Ù×÷ÐÔ£¬ËüÖ÷ÒªÊǽ¨Á¢ÔÚÁ½¸öոеÄj2ee soap¹¤¾ß°üjax-rpcºÍjaxm¡£
web service´ú±íÁË·Ö²¼Ê½¼ÆËãµÄ×îг±Á÷£¬¿ÉÄÜÊÇ×Ô1995ÄêjavaµÄ³öÏÖºÍ1998Äêxml³öÏÖÒÔÀ´×îÖØÒªµÄ¼¼ÊõÁË¡£Æäʵ£¬¸øweb serviceÏÂÒ»¸ö׼ȷµÄ¶¨ÒåÊǺÜÄѵģ¬ÒòΪweb service²¢²»ÊÇÈκÎÌØÊâ¼¼Êõ»òÕ߯½Ì¨ËùÌØÓеģ¬web serviceÊÇÒ»ÖÖÍøÂçÓ¦ÓóÌÐò£¬ÒÔxmlÐÎʽµÄÎĵµ£¬Ê¹ÓÃsoapºÍwsdl½øÐÐÐÅÏ¢½»»»¡£Òª¸üºÃµØÀí½âÕâ¾ä»°µÄº¬Ò壬Äã±ØÐëÏÈÀí½âsoapºÍwsdl£¬ÏÂÃæÊÇÓйØÕâ·½ÃæµÄ¶¨Ò壺
soap£º¼òµ¥¶ÔÏó·ÃÎÊÐÒ飨simple object access protocol£©£¬ÊÇÔÚw3cµÄÖ§³ÖÏ£¬ÓÉmicrosoft£¬ibmºÍÆäËû¹«Ë¾¿ª·¢µÄ£¬»ùÓÚxml¸ñʽµÄÒ»ÖÖÐÒ飬ËüÊÇ¿ÉÉìËõºÍ¿ÉÀ©Õ¹µÄ£¬²»ÏóÒÔǰµÄdce rpc, corba iiop, java rmi-jrmpÒÔ¼°dcom£¬ËüÒѾ±»¼¸ºõËùÓеĿª·¢³§ÉÌËùÈϿɺͽÓÊÜ¡£
wsdl£ºweb·þÎñÃèÊöÓïÑÔ£¨web service description language£©£¬Ò²ÊÇÔÚw3cµÄÖ§³ÖÏ£¬ÓÉmicrosoft£¬ibmºÍÆäËû¹«Ë¾¿ª·¢µÄ£¬xml¸ñʽµÄÓïÑÔ£¬ÓÃÀ´¶Ôweb service½øÐÐÃèÊö£¬°üÀ¨ÆÚÍûµÄÏûÏ¢¸ñʽÀàÐÍ¡¢ËùʹÓõÄinte.netÐÒéºÍweb serviceµÄinte.netµØÖ·¡£
Æäʵ£¬web service´ú±íÁËÒ»ÖÖеķֲ¼Ê½¶ÔÏó¼¼Êõ£¬ËüºÍcorba iiopºÍjava rmiºÜÏàËÆ£¬µ«Ò²ÓÐÐí¶à²îÒ죬×î´óµÄ²îÒìÓ¦¸Ã¾ÍÊÇÕæÕýµÄƽ̨ÎÞ¹ØÐÔ¡£¾¡¹Üjava rmiºÍcorba iiop¶¼Éù³Æ×Ô¼ºÊÇÆ½Ì¨Î޹ص쬵«Êµ¼ÊÉÏ£¬ËüÃǶ¼ÐèÒªËüÃÇ×Ô¼ºµÄƽ̨¡£ÒªÊ¹ÓÃjava rmi£¬ÄãÐèÒªÒ»¸öjavaÐéÄâ»úºÍjava±à³ÌÓïÑÔ£¬¶ÔʹÓÃÆäËüÓïÑԵĿª·¢ÕßÈçvisual basic»òc++À´Ëµ£¬java rmi²¢²»ÊÇÆ½Ì¨Î޹صġ£corba iiopÒ²ÊÇÓоÖÏÞÐԵģ¬iiopÐÒéͨ³£ÐèÒªÒ»¸öÌØ¶¨µÄ¼Ü¹¹Èçcorba orb£¬Ò²Ö»ÓÐÉÙÊý¼¸¸ö³§ÉÌÖ§³Öcorba¡£ÁíÒ»·½Ã棬web service×ÅÖØÃèÊöÐÅÏ¢½»»»µÄÐÒ飬¶ø²»ÊÇ×ÅÖØÃèÊö¶ÔÕâЩÐÒéµÄʵÏÖ£¬»»¾ä»°Ëµ£¬Äã¿ÉÒÔÓÃÈκÎÓïÑÔ£¬ÔÚÈÎºÎÆ½Ì¨ÉÏ£¬ÒÔÈκÎÄã×Ô¼ºÏ²»¶µÄ·½Ê½À´´´½¨web service¡£
web serviceÁíÍâÒ»¸öºÃ´¦¾ÍÊÇ£¬²»ÏóÆäËüµÄ·Ö²¼Ê½¶ÔÏóÌåϵ£¬Ëü½¨Á¢ÔÚÏÖÓеļ¼Êõ¼Ü¹¹µÄ»ù´¡Ö®ÉÏ£¬Òò´Ë´ó¶à˵³§É̺ÜÈÝÒ×ʵÏÖ¡£soapºÍwsdl¶¼ÊÇ»ùÓÚxmlµÄ£¬¶øxmlÒѾ±»¹ã·ºÖ§³Ö£¬xml½âÎöÆ÷ÔÚ¼¸ºõÿһÖÖ¿ª·¢ÓïÑÔÖж¼ÓУ¬Òò´Ë£¬´¦ÀísoapÏûÏ¢ºÍwsdlÎĵµµÄ»ù´¡ÒѾ´æÔÚÁË¡£´ËÍ⣬web serviceÏûϢͨ³£ÊÇͨ¹ýtcp/ip½øÐн»»»µÄ£¬Ò²ÒѾ±»¼¸ºõËùÓÐµÄÆ½Ì¨ºÍÓïÑÔËùÖ§³Ö¡£
jax-rpcºÍejb
jax-rpc£¨java api for xml-rpc£©ÊµÖÊÉϾÍÊÇͨ¹ýsoap·ÃÎʵÄjava rmi¡£ËüºÍ¡°±¾µØµÄ¡±java rmi (java rmi-jrmp)ºÍjava rmi-iiopºÜÏ󣬵«ÊÇËüÊÇÒÔsoap×÷ΪͨѶÐÒ顣ҪʵÏÖjax-rpc,×îµÍÒªÇóÊDZØÐë¶Ôͨ¹ýhttp·ÃÎʵÄsoapÖ§³Örpc±àÂ룬µ«ÊÇ£¬ÎÒÃÇÈÔÈ»¿ÉÒÔÌṩ¶ÔÆäËû±àÂ뷽ʽ¡¢ÏûÏ¢¸ñʽºÍinte.netÐÒéµÄÖ§³Ö¡£jax-rpcÄܹ»±»ÓÃÀ´´Ó»á»°¡¢ÊµÌåºÍÏûÏ¢Çý¶¯µÄbeanÀ´µ÷ÓÃweb serviceµÄ²Ù×÷¡£jax-rpcÄܹ»ÓÃÀ´·ÃÎÊÆäËüƽ̨µÄweb service¡£ÀýÈ磺һ¸öÎÞÐòµÄ»á»°bean¿ÉÄÜ»áʹÓÃjax-rpcÀ´µ÷ÓÃ.net web serviceµÄ·½·¨¡£ÈçÏÂͼËùʾ£º
xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
ÿ¸öejb¿ª·¢É̶¼»áÌṩ×Ô¼º¶Ôjax-rpcµÄʵÏÖ£¬µ«ËüÃÇÖ®¼äµÄ²î±ðÊǺÜСµÄ£¬Ö÷ÒªÊÇÒòΪËùÓеÄʵÏÖ¶¼±ØÐë×ñÕÕjax-rpc¹æ·¶£¬jax-rpcÄܹ»µ±×÷¿Í»§¶ËapiÀ´·ÃÎÊÆäËüµÄweb service£¬µ«ÊÇ£¬ËüͬʱҲÊÇÒ»¸ö±»³Æ×÷¡°endpoint½Ó¿Ú¡±µÄÐÂÐÍÆóÒµbean½Ó¿Ú¡£µ±jax-rpcµ±×÷¿Í»§¶ËapiµÄʱºò£¬»á»°¡¢ÊµÌå»òÕßÏûÏ¢Çý¶¯µÄbeanÄܹ»Ê¹ÓÃËüÓëÆäËüƽ̨µÄweb service½»»»ÏûÏ¢¡£jax-rpc¶¨ÒåÁËÈýÖÖ±à³ÌÄ£ÐÍ£ºgenerated stub¡¢dynamic proxyºÍdii£¨dynamic invocation interface£©£¬ÎÒÃÇÔÚejb»·¾³Öг£ÓõÄgenerated stubÄ£ÐÍ¡£
Èç¹ûʹÓÃjax-rpcÈ¥·ÃÎÊweb service£¬ÄÇô£¬Õâ¸öweb service±ØÐë·¢ÐÐÒ»¸öwsdlÎĵµ£¬ejb¿ª·¢ÉÌÌṩµÄjax-rpc¹¤¾ß°ü²úÉújava rmi½Ó¿ÚºÍʵÏÖwsdlÎĵµËùÃèÊöµÄweb service²Ù×÷µÄstub£¬Ò»µ©stubºÍ½Ó¿Ú´´½¨³öÀ´Ö®ºó£¬ÎÒÃǾͿÉÒÔ°ÑËüÃÇÓëÆóÒµbeanµÄjndi enc£¨environment naming context£©½øÐа󶨣¬È»ºóÓë web service½øÐÐͨÐÅ¡£
wsdl°Ñ·ÃÎÊweb serviceµÄ½Ó¿ÚÃèÊö³É¡°¶Ë¿Ú¡±£¬Ã¿¸ö¶Ë¿ÚÓÐÒ»¸ö»òÕß¶à¸ö¡°²Ù×÷¡±£¬¶Ë¿ÚºÍ²Ù×÷µÄ¸ÅÄîºÍjavaµÄ½Ó¿ÚºÍ·½·¨ÀàËÆ¡£Êµ¼ÊÉÏ£¬jax-rpc¶¨ÒåÁËwsdlºÍjava rmiÖ®¼äµÄÓ³Éä¹ØÏµ£¬Ëü²úÉúÀ´×Զ˿ڵÄÔ¶¶Ë½Ó¿Ú£¬²¢´øÓÐÏìÓ¦¶Ë¿Ú²Ù×÷µÄ·½·¨¡£ÀýÈ磺һ¸öwsdlÎĵµ¿ÉÄÜÃèÊöÒ»¸ö±»³Æ×÷¡°bookprice¡±¡¢²¢´øÓе¥¸ö²Ù×÷getboolpriceµÄ¶Ë¿Ú£¬ÏÂÃæ¾ÍÊÇbookprice wsdlÎĵµµÄһЩ¼òµ¥´úÂ룺
<?xml version="1.0"?>
<definitions name="bookprice"
targetnamespace="http://lucky.myrice.com/getbookprice"
xmlns:tns="http://lucky.myrice.com/getbookprice"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/xmlschema"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<!-- ÃèÊö²ÎÊýºÍ·µ»ØÖµµÄmessageÔªËØ -->
<message name="isbnmessage">
<part name="isbn" type="xsd:string" />
</message>
<message name="pricemessage">
<part name="price" type="xsd:float" />
</message>
<!-- ÃèÊöweb service³éÏó½Ó¿ÚµÄporttypeÔªËØ -->
<porttype name="bookprice">
<operation name="getbookprice">
<input name="isbn" message="tns:isbnmessage"/>
<output name="price" message="tns:pricemessage"/>
</operation>
</porttype>
<!-- ÔÚÕâÀï½øÐÐ°ó¶¨ -->
<!-- serviceÔªËØ¸æËßÎÒÃÇweb serviceµÄµØÖ· -->
<service name="bookpriceservice">
<port name="bookprice" binding="tns:bookprice_binding">
<soap:address location="http://lucky.myrice.com/bookprice" />
</port>
</service>
</definitions>
ÔÚ²¿ÊðµÄʱºò£¬jax-rpc stubÉú³É¹¤¾ß»á°Ñwsdl¶Ë¿Úת»»³ÉÔ¶³Ì½Ó¿ÚºÍstub£¬¶Ë¿ÚºÍ·þÎñstub¿ÉÄÜÊÇÏÂÃæµÄÑù×Ó£º
public interface bookpriceservice extends javax.xml.rpc.service{
public bookprice getbookprice( ) throws remoteexception;
}
public interface bookprice extends java.rmi.remote {
public float getbookprice(string isbn)
throws remoteexception;
}
ÕâÀïÖ»ÊÇÒ»¸ö¼òµ¥µÄÀý×Ó£¬Õâ¸ö·þÎñÖ»ÓÐÒ»¸ö¶Ë¿Ú£¬¶øÊµ¼ÊÉÏÒ»¸ö·þÎñ»áÓжà¸ö¶Ë¿Ú£¬Ã¿¸ö¶Ë¿ÚÓÐÏàÓ¦µÄ½Ó¿ÚºÍstub¡£Ò»µ©½Ó¿ÚºÍstub²úÉú²¢±»°ó¶¨µ½jndi encÖ®ºó£¬ËüÃǾͿÉÒÔÔÚÔËÐÐÆÚµ÷ÓÃweb serviceµÄ¡°²Ù×÷¡±ÁË£¬ÔÚÏÂÃæµÄÎÞÐò»á»°beanÀbookcatalog ejbÀûÓÃjax-rpc´Ó.net web webvices²éÕÒÒ»±¾ÊéµÄÅú·¢¼Û¸ñ¡£
public class bookcatalog implements javax.ejb.sessionbean {
...
public float getwholesaleprice(string isbn) {
try {
initialcontext jndicontext = new initialcontext ( );
bookpriceservice service =
jndicontext.lookup("java:comp/env/service/bookpriceservice");
bookprice bookprice_port = service.getbookprice();
float price = bookprice_port.getbookprice( isbn );
return price;
catch(remoteexception re){
}catch(serviceexception se){
}catch(namingexception ne){
}
}...
}
µ±µ÷ÓÃgetbookprice()·½·¨Ê±£¬jax-rpc stubÏò.net web service·¢ËÍsoapÐÅÏ¢£¬stub²úÉúµÄsoapÐÅÏ¢¿ÉÄÜ»áÊÇÏÂÃæµÄÑù×Ó£º
<?xml version='1.0' ?>
<env:envelope
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xmlns:xyz='http://lucky.myrice.com/bookprice"
encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
<body>
<xyz:getbookprice>
<isbn xsi:type="string">1565928695
</xyz:getbookprice>
</body>
</env:envelope>
.net erb services´¦ÀísoapÐÅÏ¢£¬²¢°Ñ½á¹û·µ»Øµ½stub£¬stub·ÖÎö½á¹û£¬×îºóÏò¿Í»§¶Ë·¢ËÍ×îÖÕ½á¹û¡£
jax-rpc stubÖеķ½·¨¿ÉÒÔÓвÎÊý£¬²ÎÊýÀàÐÍ¿ÉÒÔÊÇ»ù±¾Êý¾ÝÀàÐÍ£¬Èçint,longµÈ£»»ù±¾°ü×°ÀàÐÍ£¬Èçjava.lang.interger,java.lang.longµÈ£»Êý×飻java±ê×¼ÀàÐÍ£¬Èçstring,dateµÈ£»Ò²¿ÉÒÔÊÇ×Ô¶¨Òå¶ÔÏóÀàÐÍ¡£×Ô¶¨Òå¶ÔÏó±ØÐë·ûºÏjax-rpc¹æ·¶µÄ¹æÔò¡£
³ýÁ˲úÉústubÍ⣬jax-rpcÒ²Ö§³Ö¶¯Ì¬´úÀí·þÎñ£¬³ýÁËËüµÄÔ¶³Ì½Ó¿ÚºÍstubµÄʵÏÖÊÇÔÚÔËÐÐʱ¶¯Ì¬²úÉúµÄÖ®Í⣬¶¯Ì¬´úÀí·þÎñµÄ×÷ÓúÍstubÒ»Ñù¡£ÏÂÃæµÄÀý×Ó¾ÍÊÇjax-rpc²úÉú¶¯Ì¬stubµÄ£º
public class bookcatalog implements javax.ejb.sessionbean {
...
public float getwholesaleprice(string isbn) {
try {
initialcontext jndicontext = new initialcontext ( );
javax.xml.rpc.service service =
jndicontext.lookup("java:comp/env/service/dynamicservice");
bookprice bookprice_port = service.getport(bookprice.class);
float price = bookprice_port.getbookprice( isbn );
return price;
catch(remoteexception re){}
catch(serviceexception se){}
catch(namingexception ne){}
}
...
}
ÔÚÔËÐÐʱ£¬getport()·½·¨×Ô¶¯°Ñbookprice½Ó¿ÚÓ³Éäµ½wsdlÎĵµÀﶨÒåµÄÏàÓ¦¶Ë¿Ú£¬È»ºó²úÉústubʵÏֽӿڵŤ×÷¡£
jax-rpc»¹Ö§³ÖÃûΪdii£¨dynamic invocation interface£©µÄ¶¯Ì¬api£¬diiÔÊÐí¿ª·¢ÈËÔ±ÔÚÔËÐÐʱµ÷ÓÃsoap·½·¨¡£Èç¹ûÄãʹÓùýcorba dynamic invocation interfaceµÄ»°£¬ÄÇÄã¶Ôjax-rpc diiÒ»¶¨ºÜÈÝÒ×Àí½â¡£jax-rpc diiÀàËÆÓÚjavaµÄ·´É䣨reflection£©,ËüÔÊÐíÄãÒÔ·½·¨µÄÐÎʽµÃµ½Ò»¸ö´ú±íweb service²Ù×÷µÄ¶ÔÏóµÄ²Î¿¼£¬µ÷ÓÃÄǸö·½·¨£¬¾ÍÎÞÐèÔÙ·ÃÎÊservice factory»òÕßÔÙʹÓÃstubºÍÔ¶¶Ë½Ó¿Ú¡£ÏÂÃæµÄÀý×Ó¾ÍÊÇÆóÒµbean·ÃÎÊbookprice¶Ë¿ÚµÄgetbookprice()²Ù×÷£º
public class bookcatalog implements javax.ejb.sessionbean {
...
public float getwholesaleprice(string isbn) {
try {
initialcontext jndicontext = new initialcontext ( );
javax.xml.rpc.service service =
jndicontext.lookup("java:comp/env/service/dynamicservice");
qname port = new qname("http://lucky.myrice.com/getbookprice ","bookprice");
qname operation = new qname("http://lucky.myrice.com/getbookprice",
"getbookprice");
call callobject = service.createcall(port, operation);
object [] args = new object[1]; args[0] = isbn;
float price = (float) callobject.invoke( args );
return price.floatvalue();
}
catch(jaxrpcexception se){}
catch(namingexception ne){}
}
}
...
}
ʵ¼ÊÉÏ£¬Äã¿ÉÒÔÔÚÔËÐÐÆÚÅäÖòÎÊý¡¢ÀàÐÍ¡¢±àÂëµÈ£¬ÄãÄÜÓÃwsdlÅäÖõÄËùÓÐÐÅÏ¢¶¼¿ÉÒÔÓÃdii¶¯Ì¬ÅäÖá£
jax-rpcÁíÍ⻹ÊÇÒ»¸ö³ÆÎªÖն˽ӿڣ¨endpoint interface£©µÄÐÂÐÍ×é¼þ£¬Õâ¸öнӿÚÔÊÐíÎÒÃǰÑÎÞÐòµÄ»á»°bean×÷Ϊweb serviceÀ´ÊµÏÖ£¬Õâ¸öÖն˽ӿڼò»¯ÁËjavax.rmi.remote½Ó¿ÚµÄʵÏÖ£¬²¢ÇÒ×ñÊØjax-rpc¹æ·¶ÖеĹæÔò¡£°ÑÒ»¸öÎÞÐòµÄ»á»°bean×÷Ϊweb serviceÀ´ÊµÏÖÊǷdz£¼òµ¥µÄ£ºÖ»Ð趨ÒåbeanÀàºÍÔ¶¶Ë½Ó¿Ú£¬È»ºóʹÓÿª·¢É̵ÄÌṩµÄ¹¤¾ßÀ´ÊµÏÖ¡£Ò»µ©½¨Á¢ÁËweb service£¬ËüµÄ·½·¨¾ÍÄܹ»±»ÈκÎsoap¼æÈݵġ¢À´×ÔÈκÎÓïÑÔºÍÆ½Ì¨µÄ¹¤¾ß°üÀ´µ÷Ó㬱ÈÈ磺.net£¬perl£¬apache axis£¬c£¬c++µÈµÈ¡£ÈçÏÂͼËùʾ£º
ÓÉÓÚjax-rpc½ö½öÊÇjava rmiµÄÁíÍâÒ»ÖÖÐÎʽ£¬Òò´Ë£¬ÀûÓÃËü·ÃÎÊÆóÒµbeanÊǺÜ×ÔÈ»µÄ£¬ÎÒÃÇÒÔǰÒѾÀûÓÃrmi-iiopºÍrmi·ÃÎʹý¡£ÀûÓÃjax-rpcÓëejb½øÐÐͨÐÅÒâζ×Åejb¿ÉÒÔµ±×÷web serviceÀ´Ê¹Óã¬ÖÁÉÙÎÞÐòµÄbeanÊÇ¿ÉÒԵġ£ejb2.1ÔÊÐíÎÒÃÇÀûÓÃjax-rpc£¬µ«Ö»ÄÜÊÇÓ¦ÓÃÓÚÎÞÐòµÄbean£¬ÕâÖ÷ÒªÊÇÒòΪsoapÊÇÒ»ÖÖÎÞÐòµÄÏûÏ¢ÐÒ飬ËüûÓжÔÏóʶ±ðµÄ¸ÅÄÒò´ËËü²»ÄÜÓ¦ÓÃÔÚÓÐÐòµÄºÍʵÌåµÄbeanÖС£
ejb2.1ΪÎÞÐòµÄbean¶¨ÒåÁËÒ»¸öеÄweb serviceÖÕ¶Ë£¨endpoint£©½Ó¿Ú£¬web service½çµÄÈËʹÓá°ÖÕ¶Ë¡±À´³Æºô·¢ËͺͽÓÊÕsoapÐÅÏ¢µÄÈκζ«Î÷¡£ÔÚejbÖУ¬Öն˾ÍÊÇÒ»¸öÎÞÐòµÄ»á»°bean£¬Ëü¿ÉÒÔͨ¹ýsoapÀ´·ÃÎÊ£¬²¢ÇÒ×ñÕÕjax-rpc¹æ·¶Öж¨ÒåµÄ´Ójava-to-wsdlµ½java-to-soapµÄÓ³É乿Ôò¡£Ê¹ÓÃjax-rpc×îΪejbÖն˵Ļù´¡ÊÇ˳Àí³ÉÕµģ¬ÒòΪjax-rpc¹æ·¶Öж¨ÒåÁËsoapÏûÏ¢ºÍjava·½·¨µ÷ÓÃÒÔ¼°´ÓjavaÔ¶³Ì½Ó¿Ú²úÉúwsdlÎĵµµÄÏêϸ¹æÔò¡£
²»Ïóejb¿ª·¢ÕßÒѾºÜÊìϤµÄÔ¶¶ËºÍ±¾µØ½Ó¿Ú,Öն˽ӿڲ¢Ã»Óм̳Ðejb¶ÔÏóÀàÐÍ£¬Èçejbobject»òejblocalobject¡£Ïà·´£¬Öն˽ӿÚÖ±½Ó¼Ì³ÐÁËjavax.ejb.remote½Ó¿Ú¡£ÀýÈ磺ÔÚÉÏÃæµÄÀý×ÓÖеÄbookpriceµÄweb serviceÄܹ»ºÜÇáÒ×ʵÏÖΪejbÖеÄÖÕ¶Ë¡£ÏÂÃæµÄ´úÂë˵Ã÷ÁËÒ»¸öbookpriceµÄÖն˽ӿڣ¬ºÍʵÏÖΪweb serviceµÄÎÞÐò»á»°beanµÄ²¿·ÖÁÐ±í¡£
public interface bookprice extends javax.rmi.remote {
public string getbookprice(string isbn) throws javax.rmi.remoteexception;
}
public class bookpricews implements bookprice, javax.ejb.sessionbean {
public float getbookprice(string isbn){
connection con = null;
statement stmt = null;
resultset rs;
try {
datasource ds = jdnienc.lookup("java:comp/env/jdbc/datasource");
con = ds.getconneciton();
stmt = con.createstatement();
rs = stmt.executequery("select wholesale from catalog where isbn = \'"
+isbn+"\'");
if(rs.next()){
float price = rs.getfloat("wholesale");
return price;
}else{
return 0;
}
}
catch (sqlexception se) {
//´¦ÀíÒì³£
}
}
...
}
Öն˽ӿڱÈÔ¶³ÌºÍ±¾µØ½Ó¿ÚÒ»¸öºÜÃ÷ÏԵĺô¦¾ÍÊÇËü²»»á´øÀ´Ïóejbobject»òÕßejblocalobectÎÞÓ÷½·¨µÈÐÎʽµÄ¶îÍ⸺µ££¬´ËÍ⣬Öն˽ӿÚûÓаüÀ¨home½Ó¿Ú£¬soap²»Ö§³Ö°´ÒýÓô«Öµ¡£Òò´Ë£¬Äã²»ÄÜÒªÇóÒ»¸öweb services½Ó¿Ú£¨home ½Ó¿Ú£©°´ÒýÓô«µÝµ½ÁíÍâÒ»¸öÔ¶¶Ë½Ó¿Ú£¬¸ü½øÒ»²½½²£¬Äã²»ÄÜ´´½¨»òÒÆ³ýÒ»¸öweb service¡£
µ±ÎÒÃǰÑÒ»¸öÎÞÐò»á»° bean¿ª·¢³Éweb serviceʱ£¬Ê×Ïȶ¨ÒåÒ»¸öÖն˽ӿڣ¬È»ºóÀûÓÃËü²úÉújax-rpcµÄ¿Í»§¶ËstubºÍwsdlÎĵµ»òÕßÈç¹ûÄã²úÉújax-rpc¿Í»§¶Ëstub£¬ÎÞÐè×öÈκθı䣬Äã¿ÉÒÔ°ÑËü°ü×°³Éj2ee¿Í»§¶Ëjar£¬ÀûÓÃËüÈ¥·ÃÎÊÎÞÐò»á»°bean£¬ÀûÓÃsoap×öͨѶÐÒé¡£Èç¹ûÄã´ÓÖն˽ӿڲúÉúwsdlÎĵµ£¬ÆäËüµÄsoap¹¤¾ß°üÒ²Äܹ»Ê¹ÓÃÕâ¸öÎĵµÈ¥·ÃÎÊÄãµÄÎÞÐòbean¡£wsdlºÍsoapÊÇweb serviceµÄ»ù´¡£¬Òò´Ë£¬Îªejb web services·¢²¼wsdl¿ÉÒÔʵÏÖÓëÆäËüƽ̨µÄ½»»¥¡£
saaj
saaj£¨soap with attachments api for java£©ÊÇÒ»¸ö»ùÓÚapiµÄsoap¹¤¾ß°ü£¬Ëü¶¨ÒåÁËsoap messages with attachments (swa)ºÍsoapÓõÄmimeÐÅÏ¢¸ñʽ¡£java¿ª·¢ÈËÔ±Äܹ»ÀûÓÃsaajÀ´´´½¨¡¢¶ÁÈ¡»òÕßÐÞ¸ÄsoapÐÅÏ¢¡£Õâ¸öapi°üº¬Ðí¶àÀàºÍ½Ó¿Ú£¬ÓÃÀ´¶¨ÒåsoapÔªËØ£¨envelope, body, header, faultµÈ£©£¬xmlÃû³Æ¿Õ¼ä£¬ÊôÐÔ£¬ÎÄ×Ö½ÚµãÒÔ¼°mime¸½¼þ¡£Äã¿ÉÒÔʹÓÃsaaj²Ù×÷¼òµ¥µÄ¡¢Ã»Óи½¼þµÄxml¸ñʽµÄsoapÐÅÏ¢£¬Ò²¿ÉÒÔ²Ù×÷¸ü¼Ó¸´Ôӵġ¢´ømime¸½¼þµÄsoapÐÅÏ¢¡£saaj¿ÉÒÔÓëjax-rpc½áºÏʹÓ㬵«Ò²¿ÉÒÔµ¥¶ÀʹÓã¬ËüÓÐ×Ô¼ºµÄ¡¢Í¨¹ýhttp1.1ʵÏÖµÄÇëÇó/Ó¦´ð·½Ê½µÄÏûÏ¢»úÖÆ¡£
saajÊÇ»ùÓÚabstract factoryģʽµÄ¡£saajÊÇÀàÐ͵ijéÏ󼯺ϣ¬Ã¿Ò»ÖÖÀàÐ͵ĶÔÏó¶¼ÊÇÓÉsaaj¼¯ºÏÖÐÁíÍâµÄ¶ÔÏó²úÉúµÄ¡£ÔÚabstract factoryµÄsaajʵÏÖÖУ¬messagefactoryÀàÊǸù£¬Ëü¸ºÔð´´½¨×Ô¼ºµÄʵÀý£¬·´¹ýÀ´´´½¨soapmessage£¬soapmessage°üº¬soappart£¬Ëü´ú±ísoapÎĵµ¡¢0¸öºÍ¶à¸öattachmentpart£¨´ú±í¸½¼þµÄ¶ÔÏó£¬Èçgif,pdfµÈ£©¡£soappart°üº¬soapenvelope¡¢soapbody¡¢soapheaderºÍÆäËüÀàÐ͵ĶÔÏó¡£
<?xml version='1.0' ?>
<env:envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/xmlschema-instance'
xmlns:book='http://lucky.myrice.com/bookprice'
encodingstyle='http://schemas.xmlsoap.org/soap/encoding/'>
<env:body>
<book:getbookprice>
<isbn xsi:type='string'>1565928695
</book:getbookprice>
</env:body>
</env:envelope>
¶øÏÂÃæÊÇÓÃsaaj´´½¨µÄÀý×Ó£º
import javax.xml.soap.*;
public class example_1 {
public static void main(string [] args) throws soapexception{
messagefactory msgfactory = messagefactory.newinstance();
soapmessage message = msgfactory.createmessage();
soappart soap = message.getsoappart();
soapenvelope envelope = soap.getenvelope();
envelope.getheader().detachnode();
soapbody body = envelope.getbody();
soapelement getbookprice = body.addchildelement(
"getbookprice","book",
"http://lucky.myrice.com/bookprice");
getbookprice.setencodingstyle(soapconstants.uri_ns_soap_encoding);
soapelement isbn = getbookprice.addchildelement("isbn");
isbn.addnamespacedeclaration("xsi",
"http://www.w3.org/2001/xmlschema-instance");
name xsitype = envelope.createname("type","xsi",
"http://www.w3.org/2001/xmlschema-instance");
isbn.addattribute(xsitype,"string");
isbn.addtextnode("1565928695");
message.writeto(system.out);
}
}
Èç¹ûÎÒÃǶԱÈÉÏÃæµÄÀý×Ó£¬¾Í»á·¢ÏÖsaaj¶¨ÒåÁËswaÏûÏ¢¸ñʽµÄ׼ȷ½á¹¹£¬soapÏûÏ¢µÄÊôÐÔºÍsaajÀàÐÍÖ®¼ä¿ÉÒÔ·¢ÏÖÊÇÒ»Ò»¶ÔÓ¦µÄ¹ØÏµ£ºenvelope¶ÔÓ¦soapenvelope£»body¶ÔÓ¦soapbody£»getboolprice¶ÔÓ¦soapbodyelement£»isbn¶ÔÓ¦soapelement(text)µÈ¡£
µ±È»£¬ÉÏÃæµÄÀý×ÓÊǺܼòµ¥µÄ£¬Ëü²¢Ã»Óаüº¬Èκθ½¼þ£¬swaÖеĸ½¼þͨ³£ÊǶþ½øÖÆ»òÕßÊÇÆäËüµÄ·Çxml¸ñʽµÄÎļþ£¬Ëüͨ³£±»soapÎĵµÒýÓá£saaj¿¿jaf£¨ java activation framework£©Ìí¼Ó¸½¼þ£¬²¢´¦Àí¶ÔÏóºÍÊý¾ÝÁ÷Ö®¼äµÄÏ໥ת»»¡£ÏÂÃæµÄÕâ¶ÎʾÀý´úÂëÀûÓÃsaajÏòsoap¸½¼ÓÒ»¸öpdfÎļþ¡£
messagefactory msgfactory = messagefactory.newinstance();
soapmessage message = msgfactory.createmessage();
attachmentpart pdfattach = message.createattachmentpart();
filedatasource file = new filedatasource("testsaajattachment.pdf");
datahandler pdfdh = new datahandler(file);
pdfattach.setdatahandler(pdfdh);
Òª³É¹¦´¦Àí¸½¼þ£¬ÎÒÃDZØÐëÏÈÀí½âjaf£¬jafÊÇ´¦ÀímimeÊý¾ÝµÄ¼«ºÃ¿ò¼Ü£¬µ«ËüÒ²ÓÐ×Ô¼ºµÄ¾ÖÏÞÐÔ£¬´ó²¿·Ö¾ÖÏÞÐÔÓëʹÓÃdatacontenthandlerÀàÐÍÓйء£²ØÔÚjafµÄ¾ÖÏÞÐÔºóÃæµÄϸ½ÚÎÊÌâÊǺܸ´Ôӵ쬵«ÎÒÃÇ¿ÉÒÔʹÓÃjaf datasourceÀàÐÍÀ´¿Ë·þ´ó²¿·ÖµÄ¾ÖÏÞÐÔ£¬¾ÍÏóÀý×ÓÖеÄjavax.activation.filedatasourceÄÇÑù¡£
saajÊÇÒ»¸öÓÃ;¹ã·ºµÄapi£¬¿ÉÒÔÈÃÎÒÃÇÔÚ¼¸ºõÈκεÄÓ¦ÓÃÖд´½¨swaÏûÏ¢£¬ÔÚijЩÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔÓëjax-rpcÒ»ÆðÔÚÎÄ×ÖÏûÏ¢ºÍsoapÏûÏ¢ÖÐʹÓÃsaaj£¬µ«Ò²¿ÉÒÔÓëÆäËüµÄapiÈçjavamail£¬jms£¬jaxmÒ»ÆðʹÓá£Èç¹ûjavaÓ¦ÓÃÒѾ´´½¨ÁËswaÏûÏ¢£¬ËüÈÔ¿ÉÒÔʹÓÃsaaj°ÑÕâ¸öÏûϢת»»³É¶þ½øÖÆÁ÷£¬È»ºóÓëʹÓÃÆäËüapiµÄweb services½øÐн»»»ÐÅÏ¢¡£
jaxm ºÍ ejb
jaxm (java api for xml messaging)ÊǺÍ(java message service)ÀàËÆµÄsoapÏûÏ¢api£¬¾ÍÏójmsÊÇÒ»ÖÖͨ¹ýÃæÏòÏûÏ¢µÄÖмä¼þÀ´·¢ËͺͽÓÊÕÏûÏ¢µÄapiÒ»Ñù£¬jaxmÊÇÒ»ÖÖͨ¹ýweb serviceÀ´·¢ËͺͽÓÊÕÏûÏ¢µÄapi¡£
jaxmÊÇÃæÏòÎĵµµÄ£¬Ëü°ÑsoapÏûÏ¢ÒÔxml¸ñʽµÄÎĵµÀ´½øÐд«Ë͵ġ£jaxm¿Í»§¶Ë¶¼ÊÇʹÓÃsaaj£¨soap with attachments api for java£©À´×°Åä¡¢½ÓÊÕºÍʹÓÃsoapÏûÏ¢µÄ£¬saajÄ£·ÂsoapÏûÏ¢µÄʵ¼Êxml½á¹¹£¬ÕâÖÖ»úÖÆÓëjax-rpcÊÇÓкܴóÇø±ðµÄ£¬jax-rpcʹÓ÷½·¨µ÷ÓõÄÓï·¨£¬°ÑsoapÏûÏ¢Òþ²Øµ½ÁËjava rmi´úÀíµÄºóÃæ¡£Ê¹ÓÃjax-rpc£¬Äã Ëù¿´µ½µÄÊǽö½öÓÉ·½·¨¡¢²ÎÊý¡¢·µ»ØÖµ×é³ÉµÄÔ¶¶Ë½Ó¿Ú£¬¶øÊ¹ÓÃjaxm£¬ÄãÖ±½Ó´¦ÀísoapÐÒé¡£Ïójax-rpcÒ»Ñù£¬jaxm±ØÐëÓësoap¼æÈݵÄweb service½»»»soapÐÅÏ¢¡£ÀýÈ磺һ¸öÆóÒµbean¿ÉÄÜʹÓÃjaxmÓëÓÃperlдµÄweb service½»»»soapÐÅÏ¢¡£ejb2.1¿ª·¢ÕßÄܹ»ÒÔjaxm×÷ΪһÖÖеÄÏûÏ¢Çý¶¯beanµÄ»ù´¡£¬ÎÒÃdzÆËüΪ»ùÓÚjaxmµÄÏûÏ¢Çý¶¯bean£¨jaxm-mdb£©¡£jaxm-mdbʹÓõÄÊÇsoapÏûÏ¢£¬µ«°çÑݵÄÊÇweb serviceµÄ½ÇÉ«¡£jaxm-mdbÄܹ»ÊµÏÖµ¥ÏòµÄÒì²½½Ó¿Ú£¬¾ÍÏó»ùÓÚjmsµÄÏûÏ¢Çý¶¯µÄbean£¬Ò²¿ÉÒÔʵÏÖÇëÇó/Ó¦´ðʽµÄͬ²½½Ó¿Ú¡£
jax-rpcºÍjaxm¶¼ÔÊÐíÆóÒµbean·ÃÎʲ»Í¬Æ½Ì¨ÉϵÄweb service£¬Ò²¿ÉÒÔ×÷ΪÓÃÎÞÐòºÍÏûÏ¢Çý¶¯bean½¨Á¢µÄweb serviceµÄ»ù´¡¡£µ«ÊÇ£¬ÓÉÓÚȱ·¦³§É̵ÄÖ§³Ö£¬jaxmµÄʹÓÃǰ¾°²¢²»ÊǺÜÀÖ¹Û¡£