XML, SOAP, Services Web et JAVA Me

currygeckoSoftware and s/w Development

Dec 2, 2013 (3 years and 8 months ago)

78 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



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.

Application JAX
-
RPC


Utilisation de JAX
-
RPC sur Java ME


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

Une application utilisant des stubs


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 w
ill

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 der
ived 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 does
n'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 re
striction 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 co
mpi
lation 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.