Interface CustomBinder destinée aux applications JAX-RPC
WebSphere Application Server définit une interface CustomBinder que vous pouvez implémenter pour les applications JAX-RPC (Java™ API for XML-based Remote Call Procedure) afin de fournir des lieurs de données personnalisés et concrets pour un type de schéma XML spécifique.
L'interface CustomBinder possède trois propriétés, en plus des méthodes de désérialisation et de sérialisation. Ces propriétés sont QName pour le type de schéma XML, la portée QName et le type Java avec lequel le type de schéma est mappé. Elles sont accessibles via les méthodes d'accès get correspondantes.
getQName
La méthode getQName renvoie le nom QName du type de schéma XML cible. Les lieurs de données personnalisés fonctionnement uniquement avec le type de schéma au niveau de la racine.
Pour les types anonymes, la méthode getQName renvoie le nom QName de l'élément contenant.
Pour les types nommés, la méthode getQName renvoie le nom QName du type complexType ou simpleType.
getQNameScope
La méthode getQNameScope renvoie la propriété qnameScope du lieur qui indique si le type de schéma est un type nommé ou anonyme. La valeur de la propriété qnameScope peut être complexType pour un type <xsd:complexType>, simpleType pour un type <xsd:simpleType> ou element pour un élément <xsd:element> défini avec un type anonyme.
<xsd:element name="data1">
<xsd:complexType>
...
</xsd:complexType>
</xsd:element>
<xsd:element name= "data2" type="data2Type"/>
<xsd:complexType name="data2Type">
...
</xsd:complexType>
Le type anonyme, data1, a une portée qNameScope d'élément et un nom qName de data1. Le type, data2Type, a une portée qNameScope de type complexType et un nom qName de type data2Type.L'élément, data2, n'est pas représenté dans le lieu de données personnalisé. Le lieur de données personalisé traite uniquement les types, non les éléments.
getJavaName
La méthode getJavaName renvoie le nom de classe complet du type Java mappé avec le type nommé ou anonyme. La classe peut être une interface ou une classe concrète. L'objet renvoyé depuis la méthode de désérialisation possède un type compatible avec le type Java renvoyé par la méthode getJavaName.
Sérialisation
La méthode de sérialisation renvoie l'élément SOAPElement que le lieur de données personnalisé crée depuis l'objet Java. L'objet Java est transféré depuis le système d'exécution et doit correspondre à ce que renvoie la méthode getJavaName. Le paramètre SOAPElement n'a pas d'éléments enfant, mais il possède un nom QName valide. Ce paramètre est une référence qui permet au lieur de créer l'élément SOAPElement final.
Dans la plupart des cas, l'implémentation du lieur ajoute les éléments enfant à la racine de l'élément SOAPElement. Le système d'exécution garantit que le nom QName de l'élément SOAPElement est correct. Par conséquent, le lieur de données personnalisé des types nommés conserve le nom QName de l'élément racine car il ne connaît pas l'élément joint. L'implémentation du lieur d'un type anonyme doit toujours inclure le nom QName dans l'élément SOAPElement renvoyé qui correspond au type de schéma défini. WebSphere Application Server ne possède pas de méthodes concrètes dans le paramètre CustomBindingContext.
désérialisation
La méthode de sésérialisation renvoie un objet Java que le lieur de données personnalisé crée depuis la racine de l'élément SOAPElement transféré. Le type d'objet de l'objet Java renvoyé doit correspondre à ce que renvoie la méthode getJavaName. Contrairement à la méthode de sérialisation du paramètre, l'élément SOAPElement transféré contient les données XML d'origine dotées des déclarations d'espace de nom nécessaires.
L'exemple suivant décrit une implémentation du lieur SDO DataGraph, dans lequel les méthodes d'utilitaire convertToSDO et convertToSAAJ convertissent entre un élément SOAPElement et un objet SDO.
package test.sdo.binder;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import com.ibm.wsspi.webservices.binding.CustomBinder;
import com.ibm.wsspi.webservices.binding.CustomBindingContext;
public class DataGraphBinder implements CustomBinder {
public QName getQName() {
return new QName("commonj.sdo", "DataGraphyType");
}
public String getJavaName() {
return CustomBinder.QNAME_SCOPE_COMPLEXTYPE;
}
public String getJavaName() {
return commonj.sdo.DataGraph.class.getName();
}
public javax.xml.soap.SOAPElement serialize(
Object bean,
SOAPElement rootNode,
CustomBindingContext context)
throws javax,xml.soap.SOAPException {
// convertToSAAJ est une méthode d'utilitaire qui convertit
// le SDO DataGraph vers l'élément SOAPElement
return convertToSAAJ(bean, rootNode);
public Object deserialize(
SOAPElement source,
CustomBindingContext context)
throws javax.xml.soap.SOAPException {
// convertToSDO est une méthode d'utilitaire qui convertit
// l'élément SOAPElement vers le SDO DataGraph
return convertToSDO(source);
}
}
Pour plus d'informations sur les lieurs de données personnalisés, voir les informations relatives aux lieurs de données personnalisés pour les applications JAX-RPC. Pour savoir comment intégrer les lieurs de données personnalisés à l'outil de ligne de commande WSDL2Java pour le développement, voir Fournisseurs de liaisons personnalisées pour les applications JAX-RPC.