Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
,QWHURSHUDELOLGDGHQWUH$SOLFDFLRQHV
0RGHOR3URJUDPD3URJUDPD «33
&RQWHQLGR
• Servicios en la Web
• El papel de XML y la plataforma Java
• Las APIs de Java para XML
– JAXP
– JAXB
– JAX-RPC
– JAXR
– JAXM
• Ejemplo
– Códigos
– Instalación y ejecución
1
6HUYLFLRVHQOD:HE
• Es un servicio disponible en Internet que utiliza sistema de intercambio
de información vía XML y no es dependiente de ningún sistema
operativo ni de algún lenguaje de programación.
XML
Windows 2000 Linux
Perl XML Java
• Ejemplo típico:
• un servicio Web de valores de bolsa donde la request solicita el
valor de una acción determinada y la respuesta ofrece ese
valor. En este caso la request y la response son partes del
mismo método de llamada.
6HUYLFLRVHQOD:HE
2
(OUROHGH;0/\ODSODWDIRUPD-DYD
• Los Web Services dependen de la habilidad de las
diferentes compañías (partes) en comunicarse entre sí
incluso si utilizan diferentes plataformas.
5ROHVHQORV:HE6HUYLFHV
• Service Provider
– Implementa el servicio y lo hace disponible en Internet.
• Service Requestor
– Consumidor de servicios. Inicializa un nuevo servicio
Web creando una nueva conexión con y realiza
peticiones XML.
• Service Registry
– Directorio de servicios centralizado. El registry ofrece
un lugar centralizado donde los desarrolladores puedan
publicar nuevos servicios o encontrar los ya publicados.
3
/RV3URWRFRORVHQ:HE6HUYLFHV
• Service Transport
– HTTP, SMTP, FTP, …
• XML messaging
– XML-RPC, SOAP XML.
• Service Description
– WSDL
• Service Discovery
– UDDI
;0/53&
• Es un protocolo sencillo que utiliza mensajes XML para
realizar RPC.
4
(MHPSORGH5HTXHVW ;0/53&
(MHPSORGH5HVSRQVH;0/53&
5
62$36LPSOH2EMHFW $FFHVV3URWRFRO
• Es un protocolo basado en XML para el intercambio de
información entre computadores.
• Es independiente de la plataforma.
(MHPSORGHPHQVDMH62$3
9DORUGHEROVD
"!#$%&'(&
!)*++, -.-.-' *+/01*243653' 2$7
8 $91491;:<4=$, 1>?@>$7BA C%DE43*212F#G1IHI:KJ%L
8 $91491;:?M@49NOD$, >>>>
QPRP#+OS $9$, LT$7U:?VRW)X;L
Y
QPR%:?Z[#\], Z9154A $=
^_7BA 9*,
QPR%:Z[#\F D1KO=$, 1*2D47UE*' >$7BA *+E4=4' $3N$@*2E4=49154A $=
QPR%:Z[#\], 492`0S 9N%I<4A 0F D1IO=$, *2D47UE*' >$7BA *+E4=4' $36N$*2E%=492`0S 9N$ a
Y
QPR%:?Z[#\], b%`<$a
Y 7c, d_1;M@E*+I$36E`4$3S 2e>%7BA 9*,(7fF#G+*2$7U:?V)W)X;La
Y *+<7Bg$A a]XTbih Y *T<47Bg%A a
Y 7j, d_1OM2E*+I$36E`44%3S 2$a
Y
_PR%:?Z[i\], b%`<%a
Y
_P_4:?Z[#\Q,(Z9154A $=$a
6
(MHPSORGHPHQVDMH62$3
5HVSRQVHGH
!#$%&'(&lkm4mU
n
8 $ 91491;:<4=$, 1>?@>$7BA C%DE43*212F#G1IHI:KJ%L
8 $91491;:?M@49NOD$, >>>>
• métodos disponibles,
• tipos de datos de los mensajes,
• protocolos a utilizar,
• dirección donde localizar el servicio.
7
(MHPSORGH:6'/
• < ?xml version= "1.0"?>
– < definitions name= "StockQuote"
targetNamespace= "http:/ / example.com/ stockquote.wsdl"
xmlns:tns= "http:/ / example.com/ stockquote.wsdl"
xmlns:xsd1= "http:/ / example.com/ stockquote.xsd"
xmlns:soap= "http:/ / schemas.xmlsoap.org/ wsdl/ soap/ "
xmlns= "http:/ / schemas.xmlsoap.org/ wsdl/ ">
– < types>
• < schema targetNamespace= "http:/ / example.com/ stockquote.xsd"
xmlns= "http:/ / www.w3.org/ 2000/ 10/ XMLSchema">
– < element name= "TradePriceRequest">
» < complexType>
» < all>
» < element name= "tickerSymbol" type= "string"/ >
» < / all>
» < / complexType>
– < / element>
– < element name= "TradePrice">
» < complexType>
» < all>
» < element name= "price" type= "float"/ >
» < / all>
» < / complexType>
– < / element>
• < / schema>
– < / types>
o
(MHPSORGH:6'/
< message name= "GetLastTradePriceInput">
< part name= "body" element= "xsd1:TradePriceRequest"/ >
< / message>
< message name= "GetLastTradePriceOutput">
< part name= "body" element= "xsd1:TradePrice"/ >
< / message>
< portType name= "StockQuotePortType">
< operation name= "GetLastTradePrice">
< input message= "tns:GetLastTradePriceInput"/ >
< output message= "tns:GetLastTradePriceOutput"/ >
< / operation>
< / portType>
8
(MHPSORGH:6'/
p_qr 1 s tr s1uls1vwex4yRz?{|K}1~2@Q1}|Kx{1}1v4r s1tr s1uz#|x4yRzI|Is1
@ {|K}1~2@Q1}|Kx1}
|1xz+
p)
O}1v qr s1t4r s1ue
;| x4yRzt}1~2wex1s|z
|6vs1
+}
|OyRz;|6| 2
O~21xwev
2 wl
O}1v }6u2
O}1v||z;
p)}x6v|r }s.s1vwx4yRzI#x|?Tv
;|6
vtxKr ~Txz+
p)
O}1v }x6v|r }s
O}1v$~O|r }s%yRz;|| 2x@v1wl x ~T}wl+#x|?Tv
;|6
vtxKr ~Txz;
p_r s|O
p)
O}1v q}t1e1
Ox4yRz; r |Kx6v z;1
p_r s|;
p)}||;
p)
O}1v q}t1e1
Ox4yRz; r |Kx6v z;1
p_2}||O
p_2}x6v|r }s%
p_qr s1tr s1u$
p)
Ox
r ~Txes1vwx4yRz?{|K}1~2@Q1}|Kx1{x
r ~Txz+
p)t}1~2wexs|Kv@|r }s%_]Kr 6
;|i
Ox
r ~Txp_2t}1~2wex1s|Kv|r }s%
p_}
|)s1vwexyRz?{|K}1~2@Q1}|x1}
|Iz_qr s1tr s1u$yRzI|s1
@ {|K}1~2@Q1}|Kx4r str s1uz+
p)
O}1v vtt46x
O
}~Tv|r }s%yRz;|| 2x@vwl x ~T}w.2
;|K}1~2@1}|Kxz?
p_}
|O
p_2
Ox
r ~Tx4
p_2txKr sr |r }s1
• http:/ / www.uddi.org
9
8'',8QLYHUVDO'HVFULSWLRQ'LVFRYHU\ DQG
,QWHJUDWLRQ RI :HE6HUYLFHV
– Páginas blancas
– Incluye dirección, contacto, …
– Páginas amarillas
– Incluye categoría de compañías según taxonomías
estándar.
– Páginas verdes
– Información técnica acerca de los servicios del negocio.
(MHPSORGH6HUYLFLRVGLVSRQLEOHV
• Como ejemplo de funcionamiento de la pila
de protocolos, IBM ofrece un browser para:
(PHUJLQJ 7HFKQRORJLHV7RRONLW
http:/ / www-106.ibm.com/ developerworks/ webservices/ demos/ ettk/
10
/DV$3,V GH-DYD681SDUD;0/
• La API de Java para XML permite escribir aplicaciones Web en Java.
• La API consta de diferentes APIs:
(MHPSORFRPSOHWR
I
11
&2))((%5($.
– 7$5($%XVFDUQXHYRVGLVWULEXLGRUHV
– 7$5($6ROLFLWDUOHVODOLVWDGHSUHFLRVGHVXV
SURGXFWRV
– 7$5($&RPSDUDUSUHFLRV\5HDOL]DUORV
SHGLGRVDOGLVWULEXLGRU
– 7$5($9HQWDGHFDIp SRU,QWHUQHW
&2))((%5($.
• El gerente indica al Ingeniero del Software (IS) que realice esta tarea
buscando en las diferentes compañías.
• 7$5($%XVFDUQXHYRVGLVWULEXLGRUHV
12
&2))((%5($.
• 7$5($6ROLFLWDUODOLVWDGHSUHFLRVGHVXVSURGXFWRV
&2))((%5($.
• 7$5($&RPSDUDUSUHFLRV\5HDOL]DUORVSHGLGRVDO
GLVWULEXLGRU
– Una vez que la aplicación tiene todos los precios de los distintos
distribuidores, los compara y presenta los resultados.
13
&2))((%5($.
• 7$5($9HQWDGHFDIp SRU,QWHUQHW
,PSOHPHQWDFLyQGH&2))((%5($.
• Servidor
– Servlets
– JSP
– Java Beans
• Cliente
– HTML
14
JAX-RPC Distributor Service
• El servidor Coffee Break también actual de cliente al realizar llamadas
remotas sobre el servicio distribuidor JAX-RPC.
• El código del servicio consiste en una interfaz del servicio, una clase de
implementación del servicio y diferentes Beans que son utilizados como
parámetros en algunos métodos y como valores de retorno.
• Æ@°¥O©o¤ ¨
¹R£O¦¤ °¥2À@§O£¥#Âǵ
«@§2¥O¦¤ ©o¤ ¯£T¯O¤ Ä¥)«2§2¬T´O§O«¤ «2°R¾)© §O¯TÈO£R«2§2¬+¹]¤ ?¹R°¼
• ¢;¤ ¥O§2µo¦
§@¹]À@§O£@¥#¤ ¦
§2¹c«@§2¬T´O§O«¤ «2°¼
• Ê@¨o¤ ¯§2µo¦
§@¹]À@§O£@¥#¬ ¤ ¦o£T«2°_«2§]´2¨ §O¯O¤ °@0±6¥O°¹]Ë@¨ §)«2§2¬?¯£T© º#¾]´2¨ §O¯O¤ °_«¤ ¦¨o¤ Ë@³2¤ «2°¨ ·¼
package com.sun.cb;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface SupplierI F extends Remote {
public ConfirmationBean placeOrder(OrderBean order) throws
RemoteException;
public PriceListBean getPriceList() throws RemoteException;
}
15
JAX-RPC Distributor Service
• ,PSOHPHQWDFLyQGHO6HUYLFLR
– La clase “6XSSOLHU,PSO” implementa los métodos “SODFH2UGHU” y
“JHW3ULFH/LVW”, definidos en la interfaz “6XSSOLHU,)”.
– Estos métodos son muy sencillos para dejar más visible el código
relacionado con JAX-RPC.
16
JAX-RPC Distributor Service
• 3XEOLFDFLyQGHO6HUYLFLRHQHO5HJLVWUR
2UJ3XEOLVKHU ^«`
ÌÍÎ2Ï@ÍÐÑÒÎTÓÔUÕ Ö+×ØÕ Î2ÙÚ
Û ÔlÌÓÜ
Ý4ÞÍßÍàÕ àÔlá Õ Ü6ÑÐ Û Ö;ÝÜ
âÕ ãÚ Û ÔlÌÓÜ
Ý4ÞÍßÍÕ ×Ý Û á Õ ä%ÑÖOÓ×Ü6ÎTÑå4×Ø1æá ÑÚ Û ÔlÌÓÜ
Ý4ÞÍßÍÕ Û ÓÕ ãÚ
2UJ3XEOLVKHU ç
Ì×Ùá Û Î]Î@á ÍÖTÖ
Ì×Ùá Û Î]Ö;ÝKÍÝ Û ÎQßÓ Û ælÔeÍ Û ØèKéÝÜ Û Ø1Ð4êKë0ÍÜ6ÐÖTì
ç
ä%ÑÖOÓ×Ü6ÎTÑå4×Ø1æá ÑeÜ6ÑÐ Û Ö;ÝÜ
âå×Ø1æá ÑUíîä%ÑÖOÓ×Ü6ÎTÑå4×Ø1æá ÑÕ ÐÑÝ?å×Ø1æá Ñ
èIïÎTÓÔUÕ Ö+×ØÕ Î2ÙÕ ð4Óñ
ñ6ÑÑä%ÑÐ Û Ö;ÝÜ
âï?ìÚ
éÝÜ Û Ø1Ðeò×1ÑÜ
â1ó)äiôÃíîÜ6ÑÐ Û Ö;ÝÜoâå4×Ø1æá ÑÕ Ð1ÑÝIéÝÜ Û Ø1ÐèIïò×1ÑÜoâÕ ×ÜKá ïìÚ
éÝÜ Û Ø1ÐlÌ×Ùá Û Ö+õó)äiôÒíîÜ
ÑÐ Û Ö;ÝÜ
âå4×Ø1æá ÑÕ ÐÑÝIéÝÜ Û Ø1ÐèIï;Ì×Ùá Û Ö+õÕ ×ÜKá ï?ìÚ
éÝÜ Û Ø1Ðl×1ÖOÑÜKØ1ÍÔÑUíîÜ
ÑÐ Û Ö;ÝÜ
âå4×Ø1æá ÑÕ Ð1ÑÝIéÝÜ Û Ø1ÐèIï;Ü6ÑÐ Û Ö;ÝÜ
âÕ ×ÖOÑÜKØ1ÍÔeÑï?ìÚ
éÝÜ Û Ø1ÐlÌÍÖOÖ;öÓÜ6æíîÜ6ÑÐ Û Ö;ÝÜ
âå4×Ø1æá ÑÕ Ð1ÑÝIéÝÜ Û Ø1ÐèIï;Ü6ÑÐ Û Ö;ÝÜ
âÕ ÌÍÖOÖ;öÓÜ6æï?ìÚ
éÝÜ Û Ø1ÐeÑØ1æÌÓ Û ØÝ_íîÜ6ÑÐ Û Ö;ÝÜ
âå4×Ø1æá ÑÕ ÐÑÝIéÝÜ Û Ø1ÐèIïÑØ1æÌÓ Û ØÝï?ìÚ
éÝÜ Û Ø1ÐlÏ@Ñâ÷ Û á ÑUíîÜ6ÑÐ Û Ö;ÝÜ
âå×Ø1æá ÑÕ ÐÑÝIéÝÜ Û Ø1ÐèIï;Ï@Ñ@âÕ ñ Û á Ñï?ìÚ
øOù%ú äiû×Ùá Û Ö+õ1ÑÜiÌ×Ùá Û Ö+õ1ÑÜRíîØ1Ñ@ö øOù%ú äiû×Ùá Û Ö+õ1ÑÜKèKìÚ
Ì1×Ùá Û Ö+õ1ÑÜIÕ ÔeÍÏ@Ñð4ÓØØ1ÑÎOÝ Û ÓØèò×1ÑÜ
âó#äiôOüÌ×Ùá Û Ö+õó#äiô+ìÚ
éÝÜ Û Ø1ÐlÏ@ÑâlíîÌ×Ùá Û Ö+õ1ÑÜIÕ Ñ@à1ÑÎ2×ÝKÑû×Ùá Û Ö+õ.èI×1ÖOÑÜKØ1ÍÔeÑüÌÍÖOÖ;öÓÜ6æ1üÑØ1æÌÓ Û ØÝIìÚ
ÝÜ
â
ç
÷ Û á ÑýîÜ Û ÝKÑÜ$Ó×Ý_ífØ1Ñ@öþ÷ Û á ÑýîÜ Û ÝKÑÜKèIÏ@Ñâ÷ Û á Ñ1ìÚ
Ó×Ý?Õ ö.Ü Û ÝÑèIÏ@Ñâ1ìÚÿÓ×Ý?Õ ñKá ×1Ö+õèKìÚ Ó×Ý?Õ Î2á Ó1ÖOÑèKìÚ
ÎTÍÝKÎ2õ.è+àÎTÑÌÝ Û ÓØÑ@àì éâÖ;ÝKÑ1ÔUÕ Ó×ÝÕ ÌÜ Û ØÝá ØèÑ@à4Õ ÐÑÝÑÖOÖOÍÐÑèKìIìÚ
ç
17
OrgPublisher
• El programa “OrgPublisher” comienza cargando los valores de las
propiedades del fichero “CoffeeRegistry.properties”.
6
JAXRPublisher.java
• En primer lugar, el método “makeConnection” crea una conexión al Servidor
de Registro. Debe especificar algunas propiedades de conexión usando la
URL de query y de publicación desde “CoffeeRegistry.properties”.
18
JAXRPublisher.java
• Como es necesario identificarse por clave para publicar datos, utiliza el username y
passwd para establecer
ù Û
lasÛ credenciales:
ù ù Û Û
û1ÍÖOÖ;öÓÜ6æ ×ÝIõ1ÑØÝ ÎTÍÝ ÓØ.ÌÍÖOÖ;öæ ×Ýõ"ífØ1Ñ@öþû1ÍÖOÖ;öÓÜ6æ ×Ýõ1Ñ1ØÝ ÎTÍÝ ÓØè
×1ÖOÑÜKØ1Í1ÔeÑüÌÍÖOÖ;öÓÜ6æ4Õ ÝÓ1ð$õ1ÍÜ ù KÜ Ü6ÍâèKìIìÚ
é1Ñ@ÝiÎ2Ü6ÑæÖÃíîØÑ
ö 0ÍÖ+õé1ÑÝèKì6Ú
Î2Ü6ÑæÖ2Õ ÍææèIÌÍÖOÖ;öæ ù ×ÝõìÚ
ÎTÓØØÑÎOÝ Û ÓØÕ ÖOÑÝð$Ü6ÑæÑ1ØÝ Û Íá Ö+èÎ2Ü6ÑæÖTìÚ
JAXRPublisher.java
• Proporciona al objeto “JAXRPCCoffeeDistributor” una clasificación basada
en North American Industry Classification System (NAI CS). En concreto se
utilizará la clasificación de “Other Grocery and Related Products
Wholesalers".
ð$á ÍÖOÖ Û ñ Û ÎTÍÝ Û ÓØÎ2á ÍÖOÖ Û ñ Û ÎTÍÝ Û ÓØ"íîèð$á ÍÖOÖ Û ñ Û ÎTÍÝ Û ÓØì
Ùá Î2ÔUÕ Î2Ü6ÑÍÝKÑð$á ÍÖOÖ Û ñ Û ÎTÍÝ Û ÓØèÎ2é1Î2õ1ÑÔeÑü
Ù×Ø1æá ÑÕ Ð1ÑÝIéÝÜ Û Ø1ÐèIïÎ2á ÍÖOÖ Û ñ Û Î+ÍÝ Û ÓØÕ Ø1ÍÔeÑ1ï?ìü
Ù×Ø1æá ÑÕ Ð1ÑÝIéÝÜ Û Ø1ÐèIïÎ2á ÍÖOÖ Û ñ Û Î+ÍÝ Û ÓØÕ ßÍá ×1Ñï?ìIìÚ
ð4Óá á ÑÎOÝ Û ÓØÎ2á ÍÖOÖ Û ñ Û ÎTÍÝ Û ÓØ1ÖÃíîØ1Ñö ù ÜKÜ6Íâô Û Ö;ÝèKìÚ
Î2á ÍÖTÖ Û ñ Û ÎT
Í Ý Û ÓØ1Ö2Õ Í1ææèÎ@á ÍÖTÖ Û ñ Û ÎTÍÝ Û ÓØìÚ
ÓÜ6Ð4Õ Íææð$á ÍÖOÖ Û ñ Û ÎTÍÝ Û ÓØ1Ö+èKÎ2á ÍÖTÖ Û ñ Û ÎTÍÝ Û ÓØ1ÖTìÚ
KWWSORFDOKRVWMD[USFFRIIHHVXSSOLHUMD[USF6XSSOLHU,)
19
JAXRPublisher.java
Collection services = new ArrayList();
Service service = blcm.createService(bundle.getString("service.name"));
InternationalString is = blcm.createInternationalString
(bundle.getString("service.description"));
service.setDescription(is);
/ / Create service bindings Collection serviceBindings = new ArrayList();
ServiceBinding binding = blcm.createServiceBinding();
is = blcm.createInternationalString (bundle.getString("service.binding"));
binding.setDescription(is);
try { binding.setAccessURI(endpoint);
} catch (JAXRException je) {
throw new JAXRException("Error: Publishing this " + "service in the registry has
failed because " + "the service has not been installed on Tomcat.");
} serviceBindings.add(binding);
/ / Add service bindings to service
service.addServiceBindings(serviceBindings);
/ / Add service to services, then add services to organization
services.add(service);
org.addServices(services);
¡
20
Servicio Distribuidor -$;0
• Todos los mensajes intercambiados deben seguir una estructura
XML especificada en un DTD para cada tipo de mensaje.
price-list.xml
! " )ð$#
%iû$ ÌÜ Û ÎTÑ & á Û Ö;Ý
ûó)å%ô' ð"ï & (( é×Ø) Û Î2Ü6Ó1Ö;âÖ;ÝKÑ1ÔeÖ;ü*;Ø1Î@Õ (+(+" # " ÌÜ Û ÎTÑô Û Ö;Ý (+( -,)ï
ï õÝÝÌ . (+( ÞÍ@ßÍÕ Ö+×ØÕ ÎTÓÔ ( öÒÑÙÖOÑÜ
ß Û ÎTÑÖ ( æ1ÝKæÖ ( ÌÜ Û ÎTÑ & á Û Ö;Ý?Õ æ1ÝKæ ï'/
ÌÜ Û ÎTÑ & á Û Ö;Ý
ÎTÓñoñ6ÑÑ /
ÎTÓñ
ñ6ÑÑ & Ø1Í1ÔeÑ / ù Ü6ÍÙ Û ÎTÍ 0( ÎTÓñ
ñ6ÑÑ & Ø1ÍÔÑ /
ÌÜ Û ÎTÑ /2$ 1 Õ 354 0( ÌÜ Û ÎTÑ /
( ÎTÓñ
ñ6ÑÑ /
ÎTÓñoñ6ÑÑ /
ÎTÓñ
ñ6ÑÑ & Ø1Í1ÔeÑ / 0 Ó×1ÖOÑå4á ÑØ1æ 0( ÎTÓñ
ñ
ÑÑ & Ø1ÍÔeÑ /
ÌÜ Û ÎTÑ /6 3 Õ 4*4 0( ÌÜ Û ÎTÑ /
( ÎTÓñ
ñ6ÑÑ /
ÎTÓñoñ6ÑÑ /
ÎTÓñ
ñ6ÑÑ & Ø1Í1ÔeÑ / @ Ö+ÌÜ6ÑÖOÖOÓ 0( ÎOÓñ
ñ6ÑÑ & Ø1Í1ÔeÑ /
ÌÜ Û ÎTÑ /6 3 Õ 4*4 0( ÌÜ Û ÎTÑ /
( ÎTÓñ
ñ6ÑÑ /
ÎTÓñoñ6ÑÑ /
ÎTÓñ
ñ6ÑÑ & Ø1Í1ÔeÑ / " ÓÜ6ÍæÍ 0( ÎTÓñoñ6ÑÑ & Ø1ÍÔÑ /
ÌÜ Û ÎTÑ /84 7 Õ 4*4 0( ÌÜ Û ÎTÑ /
( ÎTÓñ
ñ6ÑÑ /
0( ÌÜ Û ÎTÑ & á Û Ö;Ý /
21
Cliente -$;0
• El servidor Coffee Break es un cliente JAXM envía una petición al
distribuidor JAXM.
9
Cliente -$;0
• &UHDU\(QYLDUODSHWLFLyQSDUDREWHQHUXQDOLVWDDFWXDOL]DGD
– La lista es obtenida por el método getPriceList de PriceListRequest.
:
22
Cliente -$;0
• El fichero “UHTXHVWSULFHGWG´ especifica que el elemento más alto en
la jerarquía es “UHTXHVWSULFHV´ y que contiene un elemento
“UHTXHVW´.
Cliente -$;0
• En las siguientes líneas se añade al elemento “request-prices” (representado por
SOAPBodyElement requestPrices. Entonces se añade un nuevo nodo de texto conteniendo
el texto de la petición.
ÖOÍßÑð%õ1ÍØ1ÐÑÖ=<
• Como no hay más elementos en la request, el código llama al método “
sobre el mensaje a guardar.
,iÍÔeÑeÜ
Ñò×1ÑÖ;Ý,iÍÔeÑlícÑØßÑá ÓÌÑÕ Î2Ü6ÑÍÝKÑ5,iÍÔeÑèIï;Ü
Ñò×1ÑÖ;Ýï?ìÚ
é- ù û$á ÑÔeÑ1ØÝ)Ü
Ñò×1ÑÖ;Ý_íîÜ6Ñò×ÑÖ;Ý?ûÜ Û ÎTÑÖ2Õ Íææð$õ Û á æ>á ÑÔeÑØÝèIÜ6Ñò×1ÑÖ;Ý?,iÍ1ÔeÑ1ìÚ
Ü6Ñò×1ÑÖ;Ý?Õ Íææ-#Ñ@àÝ?,iÓ1æÑèIï?é1Ñ1Ø1æl×ÌæÍÝKÑælÌÜ Û ÎTÑeá Û Ö;Ý?Õ ï?ìÚ
ÔeÖOÐ4Õ ÖOÍßÑð$õ1Í1Ø1ÐÑÖ+èKìÚ
• Una vez creado el mensaje, ese envía el mensaje al suministrador de café JAXM.
é- ù û1ð4ÓØØ1ÑÎOÝ Û ÓØ5< é- ù û$ÑÖOÖOÍÐÑ-<
• @ElÔemensaje
ÖOÐ*< enviado vía el objeto “ es el objeto tipo “
, y el destino es la URI del suministrador JAXM.
ó)äiôQÑØ1æÌÓ Û ØÝQífØ1Ñ@ö ó)äiô2ècï;õÝ6ÝÌ . (+( á Ó1ÎTÍá õ1Ó1Ö;Ý . A 4 A 4 ( ÞÍàÔ & ÎTÓñoñ6ÑÑ &
Ö+×ÌÌá Û ÑÜ ( ÐÑÝ?ûÜ Û ÎTÑô Û Ö;Ýï?ìÚ
é- ù û$ÑÖOÖOÍÐÑeÜ6ÑÖ+ÌÓØ1ÖOÑUíjÎTÓØÕ ÎTÍá á èIÔeÖOÐ1üÑØ1æÌÓ Û ØÝIìÚ
ÎTÓØÕ Î2á Ó1ÖOÑèKìKÚ
23
Cliente -$;0
• 2EWHQHUODOLVWDGHSUHFLRV
– En esta parte se realizan las siguientes tareas:
• Recuperar la lista de precios de la respuesta, el objeto “SOAPMessage” devuelto
por el método call. ûÜ Û ÎTÑô Û Ö;Ý?åÑÍØ
• Devolver la lista de precios como un bean tipo “ ”.
• Se crea un objeto tipo Vector vacío que contendrá los elementos “coffee-name” y “price”
que han sido extraidos de la respuesta.
é- ù ûåÓ1æ1â-<
• De la respuesta se accede al objeto “ , que contiene el contenido del mensaje.
C Ñ ÎOÝKÓÜiá Û Ö;ÝQíîØ1Ñ@ö C ÑÎOÝKÓÜKèKìÚ
é- ù ûåÓ1æ1âeÜ6ÑÖ+ÌÓØ1ÖOÑåÓ1æ1âlí
Ü6ÑÖ+ÌÓØ1ÖOÑÕ ÐÑÝIé- ù ûû1ÍÜ
ÝèKì?Õ ÐÑÝ?ØßÑá ÓÌÑèKì?Õ ÐÑÝ?åÓ1æâèKìÚ
B
Cliente -$;0
• El objeto Iterator “LW” tiene los elementos hijo de bodyEl, que representa
elementos “FRIIHH´.
G
24
Cliente -$;0
• El siguiente paso es poner en un $UUD\/LVW SULFH,WHPV los nombres de los
cafés y sus precios. Devolverá un bean tipo “3ULFH/LVW%HDQ´.
H
3HGLGRGH&DIp
• El otro tipo de mensaje que el servidor Coffee Break puede enviar al
distribuidor JAXM es la petición de café.
• &UHDUHOSHGLGR
25
3HGLGRGH&DIp
• A continuación, se crean y añaden elementos XML a la petición.
• Como es requerido, el primer elemento es un “62$3%RG\(OHPHQW´,
en este caso un “FRIIHHRUGHU”.
;
3HGLGRGH&DIp
• El siguiente elemento “FXVWRPHU” tiene varios
hijos con información del usuario-cliente. Esta
información está en el bean “2UGHU%HDQ”.
J>K
LNMO=P
Q R S5J>K
LNMTUM+VWM+R X
YM+Z O=[\M'K]M+J^K+LNM_F`O=ab]X
LNM+[`cd
e fhghi-j R MLNM+V]>O=ab]X-LNM+[hTUX-[kS
M+[Z KS
S+l$P
Q R S j R MLNM+V]_O=P
Q R S5J^K+LNM'cd
+
O=P
Q R S5J>K
LNMTUM+VWM+R X
YM+Z O=[\M'K]M+J^K+LNM_F`R Kb]mVK
LNM+`cd
e+fhghi-j R MLNM+V]hR Kb]J>K
LNMTUO=ab]X
LNM+[Z KS
S
l$P+Q R S j R MLNM+V]_O=P
Q R S5J>K+LMcd
R Kb]FJ>K+LNM+Z KS
Sn
M'o]J>X+S
M_X-[kS
M+[p
M'K
V
Z q
M']l$ab]X
LNM+[\_cZ'q
M']Fr?Kb]FJ>K
LNM_ccd
O=P
Q R S5J>K
LNMTUM+VWM+R X
YM+Z O=[\M'K]M+J^K+LNM_F`sQ [\b]mVK+LNM+`cd
e+fhghi-j R MLNM+V]$sQ [\b]J^K+LNMtTUO=ab]X
LNM+[Z KS
S
l$P+Q R S j R MLNM+V]_O=P
Q R S5J>K+LMcd
sQ [\b]FJ^K+LNM+Z KS+Sn
M'o]J^XS
M_X-[\S
M+[p+MK
V
Z q
M']l$ab]X
LNM+[\_cZ q
M']u'Q [\b]J^K+LM_ccd
O=P
Q R S5J>K
LNMTUM+VWM+R X
YM+Z O=[\M'K]M+J^K+LNM_F`Y
PX-VMmV
a
LtvM+[`cd
e+fhghi-j R MLNM+V]hY
PX-VM+Ja+LtvM+[hTUOEab]X-LNM+[Z KS
S
l$P+Q R S j R MLNM+V]_O=P
Q R S5J>K
LNM'cd
Y
PX-VM+Ja
LvM+[Z KS
Sn
M'o]J>X+S
M_X-[kS+M+[p
MK
V
Z q
M']l$ab]X-LNM+[\_cZ q
M'] i PX-VM+Ja+LtvM+[\_ccd
O=P
Q R S5J>K
LNMTUM+VWM+R X
YM+Z O=[\M'K]M+J^K+LNM_F`M+LK
Q R m\KS+S5[\Mb?bE`cd
e+fhghi-j R MLNM+V]>M+LK
Q R g S
S5[\Mb?bTUOEab]X-LNM+[Z KS
S
l$P+Q R S j R MLNM+V]_O=P
Q R S5J>K
LNM'cd
M+LNK
Q R g S+S5[\Mb?bEZ KS+Sn
M'o]J^XS
M_X-[\S+M+[p
MK
V
Z q
M']l$ab]X-LNM+[\_cZ q
M'] j LNK
Q R g S
S5[\Mb?bw_ccd
Z Z KS
S5[\Mb?by Z Z y+OwKs\z'y+O?K
V]Q S+KS{|Y
[\MO=Q X
x x x)x
;F
26
3HGLGRGH&DIp
• Una vez completado el mensaje, la aplicación lo
envía y cierra la conexión.
;9
&OLHQWH:HE«
;:
27