WSIF da soporte a los tipos complejos definidos por el usuario a través
de la correlación de tipos complejos con las clases Java™.
Puede
especificar esta correlación de forma manual o automática.
Acerca de esta tarea
Todas las llamadas a los métodos mapType y mapPackage de WSIFService que se
utilizan en la correlación manual alterarán temporalmente la información de
correlación equivalente que se produzca automáticamente. Esta correlación ayuda a
mantener la compatibilidad con las versiones anteriores y también incluye menos
correlaciones estándar.
Para correlacionar los tipos complejos definidos por
el usuario con las clases Java, complete cualquiera de los pasos siguientes:
Procedimiento
- Correlación manual de los tipos complejos.
El método que se utiliza cuando se crean estas correlaciones manualmente depende del
proveedor. Para los proveedores de EJB y Java, las correlaciones se especifican en el archivo
WSDL (Web Services Description Language) en el elemento de enlace. En el siguiente ejemplo se presenta la sintaxis para
especificar la correlación:
<binding .... >
<ejb:binding|java:binding/>
<format:typeMapping style="Java" encoding="Java"/>?
<format:typeMap typeName="qname" formatType="nmtoken"/>*
</format:typeMapping>
...
</binding>
En este ejemplo:
- Un signo de interrogación ("?") significa "opcional" y un asterisco
("*") significa "0 o más".
- El atributo typeName de format:typeMap es un nombre cualificado de un
tipo complejo o simple utilizado por una de las operaciones.
- El atributo formatType de format:typeMap es el nombre de clase plenamente
cualificado para la clase Java con la que se correlaciona el elemento especificado
por typeName.
Si utiliza el proveedor de Apache SOAP, puede especificar la correlación de un tipo complejo con una clase Java en el código cliente mediante dos métodos de la interfaz
org.apache.wsif.WSIFService:
public void mapType(QName elementType, Class javaType)
y
public void mapPackage(String namespaceURI, String packageName)
Utilice el método mapType para especificar una correlación entre un
elemento del esquema XML y una clase Java. El método toma un QName que representa el
tipo complejo o tipo simple y la clase Java correspondiente con la que se
correlaciona.
Utilice el método mapPackage para especificar una
correlación más general entre un espacio de nombres y un paquete Java. Cualquier
tipo personalizado, complejo o simple, cuyo espacio de nombres coincida con el de la
correlación se correlacionará con una clase Java del paquete correspondiente. El
nombre de la clase se deriva del nombre del tipo complejo utilizando XML
estándar para las convenciones de denominación de Java.
- Correlación automática de los tipos complejos.
Para los tipos complejos definidos en el WSDL, donde se utiliza un bean generado
para representar este tipo en Java, el modelo de programación WSIF (Infraestructura
de invocación de servicios Web) necesita que se realice una llamada al método
WSIFService.mapType(). Esta llamada indica a WSIF el paquete y el nombre de clase del
bean que representa el tipo de esquema XML que se identifica con un QName. Para
facilitar las cosas, el método WSIFService.mapPackage() proporciona un mecanismo
para especificar una versión comodín de éste, donde toda clase dentro de un paquete
especificado se correlaciona con el espacio de nombres de un QName. Este es un
mecanismo para correlacionar manualmente un tipo de esquema XML con una clase de
Java y viceversa (una entrada de correlación proporciona una correlación
bidireccional).
Existen varias formas para convertir un QName que representa un nombre de tipo de esquema XML en una clase y un nombre de paquete Java. Para
habilitar la correlación automática de tipos establezca la característica
WSIF_FEATURE_AUTO_MAP_TYPES en la instancia WSIFServiceFactory:
WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES, new Boolean(true));
WSIF correlaciona los tipos convirtiendo la parte URI del QName de
tipo de esquema XML en un nombre de paquete y la parte local en un nombre
de clase.
WSIF realiza esta correlación utilizando los métodos WSIFUtils getPackageNameFromNamespaceURI y getJavaClassNameFromXMLName.