210 likes | 405 Views
XML, SOAP, Services Web et JAVA Me. Understanding the Web Services Subset API for Java ME. Plan. Services Web XML over http SOAP - RPC. Services Web. Un service web Un composant logiciel qui a été publié sur le World Wide Web
E N D
XML, SOAP, Services Web et JAVA Me Understanding the Web Services Subset API for Java ME
Plan • Services Web • XML over http • SOAP - RPC
Services Web • Un service web • Un composant logiciel qui a été publié sur le World Wide Web • Par le biais de descripteurs de service et d’interfaces bien définies, • obtenir l’indépendance par rapport au • langage de programmation • système d’exploitation • matériel • Couplage lâche entre les fournisseurs de su service et ses utilisateurs • Séparation propre entre les interfaces exposées et leur implémentation
Services Web et Java ME • Web Services APIs for Java ME • JSR 172, • packages optionnels • Le package pour le traitement XML repose sur • Java API for XMP Processing (JAXP) 1.1, JSR 63, • la version 2 de Simple API for XML (SAX2). • APIs pour l’invocation à distance de services web • JAX-RPC : APIs pour les services web sur Java ME • Un sous-ensemble de la version 1.1 de l’API Java pour la spécification XML pour RPC (JAX-RPC) 1.1.
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Le profil de base WS-I • clarifications et recommendations pour aider à garantir l’interopérabilité entre les différentes implémentation de services web • AX-RPC for Java ME se conforme à ces clarifications et recommendations, redéfinissant JAX-RPC 1.1 lorsque c’est nécessaire • SOAP 1.1 • Protocole d’encodage SOAP • Les implémentaitons de JAX-RPC for Java ME • libres d’utiliser de l’encodage binaire pendant les échanges de messages • car XML est trop verbeux
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • génération et invocation de Stub • JAX-RPC 1.1 • static stub, • dynamic proxy, • dynamic Invocation Interface (DII) (sans stub). • Sous-ensemble Java ME • Seulement static • Génération des stubs avec un utilitaire de type WSDL-to-Java • Exemple: wscompile: • Le développeur doit générer lui-même a priori les stubs du services avec lequel il veut interagir
La commande wscompile • Using the Stub Generator • http://java.sun.com/products/sjwtoolkit/wtk2.5.2/docs/UserGuide-html/commandline.html#50626620_pgfId-37687
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Mode d’interactions au niveau de l’application • JAX-RPC 1.1 specifie 3 modèles d’interactions Synchronous request-response two-way RPC • Asynchronous (non-blocking) request-response two-way RPC • One-way RPC • The Java ME JAX-RPC • seulement le mode RPC synchrone bi-directionnel
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Enregistrement et découverte de services • Hors de la portée de JAX-RPC 1.1. • Universal Description Discovery and Integration (UDDI), • le standard de facot. • UDDI.org. • Pas de capacités standard pour enregistrement et découverte de services ou d’APIs UDDI en Java dans Java ME as yet. • Java ME: la décoouverte de services doit être faite manuellement a priori • De toute façons, il faudra générer les stubs manuellement • La découverte de services perd donc tout son sens
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Mapping of data types: basic, array, complex, and other • J2ME moins de types disponibles • Extensible type mapping • Pas dans JAX-RPC for Java ME • WSDL-to-Java mapping • dans JAX-RPC for Java ME : pas d’overloading + ordre des parties défini l’ordre des paramètres • Message handlers • Pas dans JAX-RPC for Java ME • SOAP messages with attachments • Pas dans JAX-RPC for Java ME • SOAP faults • JAX-RPC for Java ME ne supporte pas SOAPFaultException
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Mapping of data types: basic, array, complex, and other
Références • Understanding the Web Services Subset API for Java ME • http://developers.sun.com/mobility/midp/articles/webservices/ • J2ME Web Services APIs (WSA), JSR 172 • http://java.sun.com/products/wsa/
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Service endpoint model • JAX-RPC 1.1 • Supporte un modèle client pour le consommateur • Supporte un point de livraison de service pour le fournisseur • The JAX-RPC for Java ME subset doesn't support the service endpoint model, only the client service consumer model. • Because the current version of JAX-RPC for Java ME doesn't support exposing web services, only consuming them, you can't use the subset to create a service endpoint.
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Mapping of data types: basic, array, complex, and other • You'll need to work around the lack of support for some commonly used data types, including dateTime, date, and time. • You may need to create special versions of WSDL files for Java ME clients. • Remember to specify CLDC 1.1 when you're building for that configuration, as it supports floating-point numeric types. • If you try to create a static stub from a WSDL description that specifies unsupported types, stub generation or compilation will fail. • Arrays • JAX-RPC 1.1 specifies support for arrays derived from soapenc:Array by restriction, and the wsdl:arrayType attribute. • JAX-RPC for Java ME doesn't support soapenc:Array or wsdl:arrayType. Instead, it derives arrays from any element whose maxOccurs attribute is greater than 1 or unbounded, as the WS-I Profile recommends. In addition, the JAX-RPC subset doesn't support simple types derived by restriction. • Complex Types • JAX-RPC 1.1 specifies support for XML struts or complex types derived from: • The xsd:complexType that contains a sequence (xsd:sequence) of elements of either simple or complex types • The xsd:complexType with xsd:all based on an unordered grouping of elements of either simple or complex type • The xsd:complexType with xsd:simpleContent used to declare a complex type by extension of an existing simple type • In all the above cases, xsd:attribute and xsd:attributeGroup are supported. • JAX-RPC for Java ME supports only one method of determining complex types: • xsd:complexType with a sequence (xsd:sequence) of elements of either simple or complex type. The JAX-RPC for Java ME subset doesn't support xsd:attribute, xsd:attributeGroup, or xsd:any. • Enumerations and Simple Derived Types • JAX-RPC 1.1 specifies support for enumerations, and for simple types derived by restriction or by using xsd:list. Deriving by restriction makes it possible to derive a simple type from an existing pre-defined simple type, referred to as a base type. Deriving by using xsd:list enables you to define arrays. • JAX-RPC for Java ME doesn't support enumerations, or simple types derived by restriction or using xsd:list. • The effect on you: Your Java ME application won't be able to consume services that are described using the unsupported methods I just described. If you try to create a static stub from a WSDL description that specifies unsupported types, stub generation or compilation will fail.
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Extensible type mapping • JAX-RPC 1.1 • specifies support for extensible type mapping and serialization between Java types and XML data types. • Pluggable serializers and deserializers provided by you or by a third party allow custom serialization and deserialization of Java-based objects to and from XML types, thus enabling developers to create their own extended types. • JAX-RPC for Java ME • doesn't support extensible type mapping. • The lack of support for extensible mapping means that you won't be able to define your own custom Java-to-XML serialization. • Because extensible type mapping is defined loosely, and its implementation is very much vendor-specific, you should stay away from it anyway. Most web services stick to basic types.
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • WSDL-to-Java mapping • WSDL-to-Java Mapping - Overloading Operation Names • JAX-RPC 1.1 specifies that a wsdl:operation defined in a wsdl:portType maps to a Java method on the mapped Java service endpoint interface. JAX-RPC 1.1 supports the overloading of operation names within wsdl:portType. • Following the WS-I Basic Profile, JAX-RPC for Java ME does not. Names of wsdl:operations within a wsdl:portType must be unique. • The effect on you: Your Java ME application won't be able to consume services that overload operation names within a wsdl:portType. If you try to create a static stub from a WSDL description that specifies unsupported types, stub generation or compilation will fail. • WSDL-to-Java Mapping - Parameter Order • JAX-RPC 1.1 • specifies that the parameterOrder attribute must reflect the order of the parameters in the RPC method signature. • JAX-RPC for Java ME • follows the WS-I Basic Profile, • the order of the parts in a message, not the parameterOrder attribute, identifies the order of the parameters.
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • Message handlers • JAX-RPC 1.1 • defines support for SOAP message handlers, • which you can use to implement additional SOAP message processing, such as encryption or caching. • JAX-RPC for Java ME doesn't support SOAP message handlers • SOAP messages with attachments • JAX-RPC 1.1 • defines support for SOAP messages with attachments based on MIME multi-part message types. • to support MIME-encoded parameters or return values, such as images or XML documents. • JAX-RPC for Java ME doesn't support SOAP Messages With Attachments.
Différences entre JAX-RPC 1.1 et son sous-ensemble Java ME • SOAP operation mode • JAX-RPC 1.1 • supports rpc- and document-oriented operation styles, and encoded and literal SOAP message encoding. • The Java ME subset • supports only the document/literal combination of operation style and encoding. • web services are moving away from these modes and towards document/literal. • SOAP faults • JAX-RPC 1.1, • a SOAP fault - a soap:fault element in the WSDL description - is mapped to javax.xml.rpc.soap.SOAPFaultException, to a service-specific exception class, or to RemoteException. • JAX-RPC for Java ME • doesn't support SOAPFaultException; • SOAP faults are mapped to a service-specific Java exception or RemoteException. • When invoking a web service, use RemoteExceptions in your catch blocks.