Komplexe Typen manuell zuordnen Die Methode, die Sie zum manuellen Erstellen
dieser Zuordnungen verwenden, ist vom Provider abhängig. Für Java- und EJB-Provider werden die Zuordnungen in der
WSDL-Datei (Web Services Description Language) im Element "binding" angegeben. Das folgende Beispiel zeigt die Syntax für die Angabe der Zuordnung:
<binding .... >
<ejb:binding|java:binding/>
<format:typeMapping style="Java" encoding="Java"/>?
<format:typeMap typeName="qname" formatType="nmtoken"/>*
</format:typeMapping>
...
</binding>
Für dieses Beispiel gilt Folgendes:
- Ein Fragezeichen ("?") steht für "optional" und ein Stern
("*") für "0 oder mehr".
- Das Attribut format:typeMap typeName ist der qualifizierte Name
eines von einer Operation verwendeten komplexen oder einfachen Typ.
- Das Attribut format:typeMap formatType ist der vollständig qualifizierte
Klassenname der Java-Klasse, der das mit typeName angegebene Element zugeordnet wird.
Wenn Sie den Apache-SOAP-Provider verwenden, legen Sie die
Zuordnung eines komplexen Datentyps zu einer Java-Klasse mit zwei Methoden
der Schnittstelle "org.apache.wsif.WSIFService" im Clientcode fest:
public void mapType(QName elementType, Class javaType)
und
public void mapPackage(String namespaceURI, String packageName)
Verwenden Sie die Methode mapType, um eine Zuordnung zwischen einem XML-Schemaelement und einer Java-Klasse
zu definieren. Mit der Methode werden ein QName, der den komplexen oder einfachen Datentyp darstellt,
und die zuzuordnende Java-Klasse angegeben.
Verwenden Sie die Methode
mapPackage, um eine allgemeinere Zuordnung zwischen einem Namespace und einem Java-Paket vorzunehmen. Jeder angepasste, komplexe oder einfache Datentyp, dessen Namespace mit dem der Zuordnung übereinstimmt,
wird einer Java-Klasse im zugehörigen Paket zugeordnet.
Der Name der Klasse wird unter Verwendung der XML-Java-Standardnamenskonventionen vom Namen des komplexen Datentyps
abgeleitet.
Komplexe Typen automatisch zuordnen Für
komplexe, in der WSDL definierte
Datentypen, bei denen eine generierte Bean für die Darstellung in Java verwendet wird,
erfordert das WSIF-Programmiermodell, dass ein Aufruf der Methode WSIFService.mapType() vorgenommen wird. Dieser Aufruf teilt WSIF den Paket- und den Klassennamen der Bean mit, die den mit QName
angegebenen XML-Schematyp darstellt. Zur einfacheren Verwendung
stellt die Methode WSIFService.mapPackage() einen Mechanismus bereit, mit dem eine Platzhalterversion
angegeben kann, in der jede Klasse in einem bestimmten Paket dem Namespace eines
QName zugeordnet wird. Dies ist der Mechanismus für die manuelle Zuordnung eines XML-Schematyps
zu einer Java-Klasse und umgekehrt (ein Zuordnungseintrag für eine bidirektionale Zuordnung).
Es gibt verschiedene Möglichkeiten, einen QName, der den Namen eines XML-Schematyps darstellt,
in den Namen eines Java-Pakets und einer Java-Klasse zu konvertieren. Für die Aktivierung der automatischen
Typzuordnung müssen Sie WSIF_FEATURE_AUTO_MAP_TYPES in der WSIFServiceFactory-Instanz setzen:
WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES, new Boolean(true));
WSIF
ordnet die Datentypen wie folgt zu: Der URI-Teil des XML-Schematyps "QName"
wird in einen Paketnamen und der lokale Teil in einen Klassennamen konvertiert. WSIF verwendet für die
Zuordnung die WSIFUtils-Methoden "getPackageNameFromNamespaceURI"
und "getJavaClassNameFromXMLName".