1.0 Introduzione
2.0 Software supportato e specifiche
3.0 Modifiche rispetto alla versione precedente
4.0 Problemi noti
4.1 Generazione di un documento WSDL da un bean Java
4.2 Generazione di risorse Java da un documento WSDL
4.3 Esplora servizi Web
4.4 Considerazioni sul runtime (WebSphere Application Server, Apache Tomcat)
4.5 Restrizioni URI
4.6 Servizi Web ISD
4.7 Interoperabilità
4.8 Generazione di un documento WSDL da un file DAD
4.9 Generazione JSP degli strumenti Web
4.10 Esempio JSP degli strumenti Web
4.11 Scenario Hospital/Insurance
4.12 Scenario Hospital
4.13 Utilizzo del client di test universale
4.14 Problemi nell'apertura della JSP dei servizi Web di esempio
4.15 Casi particolari in cui i servizi Web DADX supportano output multipli
4.16 Le preferenze del driver JDB possono essere utilizzate solo su Linux
4.17 I file di esempio DAD devono essere aggiornati se l'extender XML non è stato installato nella directory principale
4.18 Problemi relativi ai servizi Web DADX
4.19 Le finestre a comparsa di Esplora servizi Web non vengono visualizzate correttamente se sia Mozilla che Netscape sono in esecuzione
4.20 Supporto per la generazione di DADX
4.21 Errori WSDL dopo l'importazione di un file dei servizi Web da 4.0.x
La funzione Strumenti servizi Web consente di individuare, creare e pubblicare i servizi Web per i bean Java, DADX, i bean enterprise e gli URL. In questo file Readme vengono descritti i problemi noti, le limitazioni e le soluzioni associate alle seguenti funzioni di Strumenti servizi Web:
- Generazione di un documento WSDL da bean Java, documento DADX, bean enterprise, file ISD e URL.
- Generazione di un proxy o struttura Java da un documento WSDL.
- Creazione e distribuzione di un servizio Web da un bean Java, DADX, bean enterprise o URL.
- Individuazione e pubblicazione di servizi Web
- Generazione di un'applicazione Web di esempio da un proxy Java.
- Elementi di interoperabilità.
Questa versione degli strumenti dei servizi Web consente di generare codice conforme alle seguenti specifiche:
- SOAP (Simple Object Access Protocol) versione 1.1
- UDDI (Universal Description, Discovery, and Integration) versione 2.0
- WSDL (Web Services Definition Language) versione 1.1
- WSIL (Web Services Inspection Language) versione 1.0
Questa versione degli strumenti dei servizi Web supporta l'ambiente di runtime SOAP (Simple Object Access Protocol) versione 2.2.
Se si desidera avviare l'ambiente di test WORF esternamente al workbench utilizzando Mozilla, si consiglia di utilizzare almeno la versione 1.3.1 di Mozilla. L'output ottenuto richiamando il servizio Web e la descrizione dei file potrebbe non essere visualizzato correttamente nelle versioni precedenti del browser Mozilla.
Di seguito sono riportate le nuove funzioni per lo sviluppo dei servizi Web:
- Miglioramenti dell'interoperabilità
- Serializzazione e deserializzazione XSD dei bean Java, che consente di rispettare il carattere e l'ordine degli elementi dei file XSD nei messaggi SOAP.
- Preferenza di creazione del codice pienamente abilitata per avviare la creazione di associazioni basato sull'elemento, capace di deserializzare i messaggi SOAP i cui elementi non hanno proprietà "xsi:type".
- Miglioramenti a Esplora servizi Web
- Per impostazione predefinita Esplora servizi Web viene ora eseguito nel browser incorporato.
- Nelle opzioni predefinite il registro di sola lettura XMethods è stato sostituito con una nuova versione lettura/scrittura. Inoltre è disponibile nuovamente il registro comunicazioni NTT.
- Notevole incremento delle prestazioni nella ricerca dei servizi e delle interfacce di servizio in UDDI.
- Preferenza per la creazione di codice aggiunto per eseguire l'associazione dei tipi di dati XML semplici a classi di wrapper java.lang.
- char e java.lang.Character richiedono l'immissione di associazioni personalizzate, poiché non esistono associazioni predefinite da char o java.lang.Character a XSD WSDL.
- I tipi di wrapper primitivi, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float e java.lang.Double, non possono coesistere con i singoli tipi primitivi corrispondenti, boolean, byte, short, int, long, float e double, in tutti i parametri di input di un bean di servizio. Ad esempio, un bean di servizio in cui java.lang.Integer e int compaiono entrambi come tipi di parametri di input non può essere trasformato in un servizio Web completo. Quando viene effettuato un tentativo di utilizzare la procedura guidata del servizio Web per creare un servizio Web da questo tipo di bean di servizio, viene visualizzato un messaggio di avvertenza a meno che il metodo contenente il tipo primitivo o il tipo wrapper non sia selezionato nella pagina Metodi del bean Java del servizio Web della stessa procedura guidata. Tuttavia, è necessario accertarsi che questi metodi non siano stati selezionati la prima volta in cui è stata visualizzata la pagina indicata. Ritornare a questa pagina ed eliminare i metodi in questione dopo la visualizzazione del messaggio di avvertenza potrebbe produrre un servizio Web incompleto. In tal caso, la procedura memorizzata deve essere riavviata in modo da selezionare il metodo appropriato la prima volta in cui viene visualizzata la pagina Metodi del bean Java del servizio Web.
- Matrici a più dimensioni non supportate. Un'alternativa Java è quella di inserire i bean Java a più dimensioni. Ad esempio, invece di MyType[][], utilizzare il modello MyArray[] dove MyArray ha una proprietà di tipo MAd yType[] valida.
- Un metodo con un elenco di argomenti di input contenente una combinazione di elementi DOM e tipi di bean semplici richiede l'immissione di una o più associazioni personalizzate. La specifica WSDL (Web Services Definition Language) versione 1.1 supporta uno stile di codifica per tutte le parti di input (parametri). Il runtime di SOAP (Simple Object Access Protocol) versione 2.2 non fornisce alcun supporto di associazione predefinito per l'elemento DOM con codifica SOAP ai tipi primitivi e ai bean con codifica XML letterale.
- Quando si configura un'associazione personalizzata, se si utilizza una classe serializer o deserializer dall'ambiente di runtime SOAP (ad esempio, le classi del pacchetto org.apache.soap.encoding.soapenc) e si riceve il messaggio di errore "la classe serializer/deserializer selezionata non può essere caricata da questo progetto", è probabile che soap.jar non si trovi nel percorso di generazione del progetto Web. Per risolvere il problema, chiudere la procedura guidata ed utilizzare la finestra delle proprietà del progetto Web per aggiungere WS_installdir\wstools\eclipse\plugins\com.ibm.etools.webservice\runtime\soap.jar al percorso di generazione del progetto web, quindi riaprire la procedura guidata del servizio Web.
- Le associazioni personalizzate non sono supportate per i tipi complessi nidificati. Anche se i tipi nidificati vengono visualizzati nella pagina Associazioni della procedura guidata, le associazioni personalizzate per questi tipi verranno ignorate.
- .Quando si crea un servizio Web da una classe Java, la cui interfaccia contiene un tipo Java astratto, il servizio Web Java nella pagina Associazione XML può impostare erroneamente il campo deserializer per il tipo astratto su org.apache.soap.encoding.soapenc.BeanSerializer. Questa operazione restituirà un errore in fase di runtime, poiché il codice deserializer nella classe BeanSerializer non è in grado di creare un'istanza del tipo astratto. Per evitare che si verifichi questa condizione, scegliere l'opzione Associazione personalizzata per il tipo e modificare il campo deserializer utilizzando il nome della classe scritta per deserializzare il tipo astratto.
- Quando vengono creati servizi Web da un bean Java contenente classi Object del JDK (ad esempio, java.net.URL), lo strumento creerà una voce di associazione per tale oggetto come se si trattasse di un bean Java valido. La conseguenza ulteriore sarà la creazione di un bean invalido (ad esempio, "java.net.URL") nel progetto client. Si consiglia di escludere dalla selezione quei metodi che contengono questi tipi nelle proprie firme.
- Gli strumenti dei servizi Web attualmente non supportano la creazione di servizi Web da bean Java che contengono classi interne nidificate (ad esempio, classi interne definite in una classe di primo livello). Per risolvere tale problema è necessario spostare la classe interna in classi di primo livello di un diverso file Java.
- Il supporto è limitato a un elemento part per input o output. Non è supportato più di un elemento part logici in un messaggio di input o output. Verrà elaborato il primo elemento part, mentre verranno ignorati i rimanenti.
- Se la preferenza "Sovrascrittura file" nella pagina Preferenze dei servizi Web, è abilitata e la preferenza "Utilizza stile di associazione versione 4.0" è disabilitata (impostazione predefinita), i bean Java generati dalla procedura guidata Client dei servizi Web sovrascriveranno i bean Java originali della directory di origine Java nel caso in cui ci si attiene alla procedura guidata e si crea un file WSDL dai bean Java e si utilizza lo stesso progetto per generare il proxy Java dai file WSDL utilizzando la procedura guidata Client Servizio Web. Per evitare questa situazione, copiare i file WSDL in un altro progetto Web prima di eseguire la procedura guidata Client dei servizi Web.
- Quando vengono generate le strutture o i proxy dei servizi Web da WSDL che utilizza il tipo base64Binary dello spazio per i nomi xsd (http://www.w3.org/2001/XMLSchema), l'ambiente runtime del servizio Web utilizzerà effettivamente xsi:type base64 dello spazio per i nomi soapenc (http://schemas.xmlsoap.org/soap/encoding/). In generale, i due tipi possono essere interscambiati. Tuttavia, è possibile che le differenze tra il tipo del messaggio e quello dello schema possano causare il rifiuto del messaggio durante il runtime del protocollo SOAP. Se si verifica tale situazione, è possibile creare un serializer simile a Base64Serializer di Apache SOAP e scrivere xsd:base64binary invece di soapenc:base64.
- Quando vengono generati proxy e strutture di servizi Web da WSDL, viene utilizzato automaticamente com.ibm.etools.webservice.runtime.XSDAnyTypeSerializer come serializzatore e deserializzatore per bean Java e tipi complessi invece di org.apache.soap.encoding.soapenc.BeanSerializer. Tale serializzatore XSD consente la serializzazione e la deserializzazione degli elementi dei messaggi SOAP in base al carattere e all'ordine definito nel file XSD originale.
- Le strutture dei bean Java non verranno compilate se sono create da documenti WSDL contenenti nomi di parti e di operazioni che non rappresentano identificativi Java validi. I nomi di parti e operazioni WSDL devono essere identificativi Java validi per la corretta creazione di una struttura di bean Java.
- Le procedure guidate dei servizi Web utilizzano per impostazione predefinita URI "http" durante la generazione di WSDL; tuttavia, alcuni documenti WSDL di altri strumenti possono impiegare occasionalmente URI del servizio Web, dell'azione SOAP o dello spazio dei nomi di destinazione che utilizzano schemi diversi da "http", come ad esempio "urn". Nella creazione di proxy e strutture da WSDL che contengono URI non http, le procedure guidate dei servizi Web potrebbero eseguire l'associazione degli URI al pacchetto Java "com.example" al posto di un altro pacchetto più appropriato. In alcuni casi, le procedure guidate potrebbero non riuscire a gestire interamente alcuni URI, provocando il messaggio di errore "IWAB0234E Errore interno".
- Durante la creazione di proxy Java e di strutture Java da WSDL, è ora possibile eseguire l'associazione di tipi booleani intrinseci XSD, byte, short, int, long e double, con tipi wrapper "java.lang" (ad esempio, java.lang.Integer) al posto di tipi primitivi Java (ad esempio, int). Per impostazione predefinita, le procedure guidate de servizi Web eseguiranno le associazioni ai tipi primitivi Java. Se si desidera che l'associazione venga invece eseguita con classi wrapper "java.lang", aprire Finestre > Preferenze -> Servizi Web > Generazione codice e selezionare "Esegui associazione dei tipi di dati XML semplici con classi di wrapper java.lang".
- Quando viene specificata un'associazione personalizzata da un tipo Java a un tipo XSD in uno scenario dal basso verso l'alto, il campo Classe bean viene automaticamente impostato sul nome completo del tipo Java e non può essere modificato. Quando viene eseguita l'associazione personalizzata ad una matrice Java, il nome della classe bean sarà in formato matrice, ad esempio "java.lang.String[]", e verrà emesso in questo modo nei file del descrittore di distribuzione ".isd" e "dds.xml". Questo formato del nome classe non viene elaborato correttamente dal runtime SOAP e provocherà un errore simile al seguente:
Errore di distribuzione nel servizio SOAP 'http://tempuri.org/webservice.AddressBook': impossibile risolvere il nome classe 'java.lang.String[]': java.lang.String[]
Come conseguenza non sarà possibile personalizzare l'associazione del serializzatore per la matrice Java sul servizio. Come soluzione alternativa parziale, è possibile lasciare il campo Classe serializer vuoto per l'associazione personalizzata. In tal modo la generazione del nome della classe array non verrà eseguita nel descrittore di distribuzione e il servizio funzionerà correttamente. La classe Deserializer, e la possibilità di associare il deserializzatore in modalità personalizzata, non subiscono alcuna interferenza dovuta a questo problema.
- Quando si utilizza Esplora servizi Web con il Registro UDDI privato, Gestisci modulo Asserzioni editori di un nodo aziendale non eseguirà il caricamento nelle seguenti situazioni:
- Non si è registrati nel nodo del registro contenente il nodo aziendale.
- Non si è registrati nel nodo del registro contenente il nodo aziendale, ma il nodo aziendale è di proprietà dell'ID utente e password utilizzati per registrarsi nel registro.
- Si può verificare una condizione non prevista all'avvio di Esplora servizi Web. È possibile che venga visualizzata una finestra del browser contenente il messaggio di errore "Pagina non trovata". Questo problema può essere risolto riavviando solo Esplora servizi Web oppure WebSphere Studio e poi Esplora servizi Web.
- Non sarà possibile utilizzare Esplora servizi Web per eseguire query o pubblicazioni attraverso un'autenticazione di base abilitata da un registro UDDI. Un esempio di questo tipo di registro è un registro privato distribuito su un server con un'autenticazione di base attivata. Si noti che tutti i registri pubblici (IBM, Microsoft, SAP, NTT e XMethods) non presentano tale problema.
- Non è possibile eseguire una ricerca avanzata con Esplora servizi Web per rilevare aziende in un registro UDDI privato WAS configurato con backend Cloudscape, se una o più interfacce di servizio sono state specificate come parametro; in questo caso la finestra di stato visualizzerà:
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: Could not list all service providers. ------------------------------------------------------------------------------ Nested exception is:E_fatalError (10500) Serious technical error has occurred while processing the request. : Fault code=Client Fault string=Client Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=E_fatalError (10500) Serious technical error has occurred while processing the request.
- Il registro XMethods dispone di procedure che consentono di controllare l'eliminazione dei servizi Web pubblicati non accessibili o non funzionanti. Per evitare che venga eliminato un servizio Web pubblicato, assicurarsi che tutti i riferimenti URL all'interno dei file WSDL siano accessibili su Internet.
- Durante l'esecuzione di pubblicazioni o ricerche avanzate nella pagina UDDI di Esplora servizi Web, gli elementi dell'elenco a discesa per la selezione della lingua abbinata ad un nome o una descrizione vengono ordinati in base alle impostazioni della lingua del sistema operativo. In Windows, questo ordine viene gestito attraverso il Pannello di controllo. Per eseguire questa operazione:
- Aprire il Pannello di controllo
- Avviare l'applet del pannello di controllo Opzioni internazionali
- Nella scheda Generale della finestra di dialogo che viene aperta, viene visualizzato un elenco a discesa che consente di selezionare la lingua. Selezionare la lingua e fare clic su Applica e poi su OK.
- In Esplora servizi Web tali impostazioni diventano effettive al successivo caricamento della pagina. A questo scopo è sufficiente premere il pulsante Indietro, quindi Avanti nella barra degli strumenti principale.
Nota: le istruzioni riportate si riferiscono a Windows 2000. In Windows XP, la scheda cui si fa riferimento nel passo 3 viene denominata "Opzioni internazionali". Accanto all'elenco della lingua, vi è il pulsante Personalizza, premendo il quale, viene aperta una nuova finestra. La scheda visualizzata consente di selezionare il metodo di ordinamento desiderato.
Il registro di azienda UDDI SAP restituisce un messaggio E_fatalError relativo alla richiesta di ricerca di un'azienda per categoria con findQualifier uguale a "combineCategoryBags" (tModelKey uguale a UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2). Nella finestra di stato verrà visualizzato il messaggio di errore riportato di seguito. Tale problema si verifica solo con questo registro.
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: Could not list all service providers. ------------------------------------------------------------------------------ Nested exception is:A serious technical error has occurred while processing the request. : Fault code=Client Fault string=UDDI Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=A serious technical error has occurred while processing the request. at com.ibm.uddi4j.wsdl.client.UDDIWSDLProxy.findAllServiceProviders(UDDIWSDLProxy.java:1626) at FindBusWithQualifier.main(FindBusWithQualifier.java:35)
- I registri UDDI Microsoft Test e Production potrebbero non visualizzare nessun messaggio se in una ricerca per servizi vengono specificate molte interfacce di servizio valide. Il problema è noto a Microsoft che sta elaborando una soluzione appropriata.
- I report di asserzione pubblica restituiti dal registro di azienda UDDI SAP non contengono alcuno stato. Allo stesso modo, i report restituiti da SAP vengono eliminati dalla colonna di stato dell'asserzioni editori visualizzata in Gestisci modulo Asserzioni editori di Esplora servizi Web. Tale problema si verifica solo con questo registro.
- Quando si avvia Esplora servizi Web dalla procedura guidata Client dei servizi Web, il pulsante Avanti nella pagina Selezione WSDL (seconda pagina della procedura) è non correttamente abilitato. Premendo Avanti, la procedura rimane alla stessa pagina. Questo problema non influenza la funzionalità della procedura guidata o di Esplora servizi Web. Per avviare Esplora servizi Web, scegliere Fine.
- Non è supportata l'aggiunta di un progetto Web contenente un servizio Web in WebSphere Application Server e nel server Apache Tomcat. Le risorse di distribuzione generate nel progetto Web differiscono in base all'ambiente server.
- Quando vengono creati e distribuiti più servizi Web EJB o bean Java in un solo progetto Web, verificare che ogni servizio Web disponga di URI. Se due o più servizi Web condividono lo stesso URI, solo l'ultimo elencato nel file dds.xml file generato potrà essere utilizzato in fase di runtime SOAP del servizio Web.
- Se si seleziona la preferenza per la creazione di codice dei servizi Web "Abilita l'associazione basata su elementi", avendo selezionato la distribuzione ad un server WAS V4, è possibile che venga visualizzato il seguente elemento nel file ISD e dds.xml:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:some-name"
xml2JavaClassName="some-serializer"/>L'editor XML potrebbe segnalare l'errore riportato di seguito:
Il valore dell'attributo "xmlns:x" non è valido. I binding dello spazio dei nomi con prefisso potrebbero non essere vuoti.
Questa condizione non comporta problemi per il server WAS V4. Tuttavia, non tentare di distribuire questo dds.xml in un altro server che utilizza Xerces 2.x (XML4J 4.x) o successiva, ad esempio il server WAS V5). In caso contrario, si verificheranno analoghi errori di analisi Xerces quando il server caricherà il file dds.xml. È possibile generare nuovamente il file dds.xml selezionando il tipo di server appropriato nello scenario dei servizi Web. In questo modo verrà creato il file dds.xml adatto a quel tipo di server.
Inoltre, verrà visualizzato un errore di analisi Xerces simile quando si tenta di distribuire un servizio Web da tale file ISD. Per evitare questo problema, occorre modificare manualmente il file nel formato seguente:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
qname="some-name"
xml2JavaClassName="some-serializer"/>
- Quando viene richiamato un servizio Web creato da un bean Java o un EJB, potrebbe essere restituito un messaggio SOAPException con la seguente targetException:
"java.lang.IllegalArgumentException: Unable to instantiate ..."
In questo caso, il problema può essere dovuto al fatto che il metodo esposto come servizio Web contiene un bean Java senza costruttore pubblico come tipo restituito del parametro and/or. Il costruttore pubblico predefinito è necessario al runtime SOAP per costruire l'oggetto come parte del processo di deserializzazione.- I file di protezione, cl-ver-config.xml e sv-ver-config.xml, attualmente distribuiti nel progetto Web sono i file di WebSphere versione 4.0 e non corrispondono esattamente ai DTD. Tali file però funzionano correttamente su entrambe le versioni di WebSphere e cioè la versione 4.0 e 5.0, nonostante i messaggi di errore della convalida segnalino la necessità di dichiarare i file "xmlns:ds" o "xmlns:SOAP-SEC".
- Se la Configurazione server viene aperta in un editor, la procedura guidata Servizi Web potrebbe non riuscire ad avviare il server poiché il progetto Web relativo al servizio Web non è stato aggiunto alla Configurazione server. Per risolvere il problema è sufficiente chiudere l'editor di configurazione del server.
- Non modificare la preferenza di compatibilità con le versioni precedenti dei servizi Web -> utilizzo dello stile di associazione V4, se sono presenti caratteri di sottolineatura o altri caratteri non consentiti come identificatori Java come:
- nomi dell'attributo del bean durante la creazione di servizi Web da un bean Java o dagli EJB
- nomi degli elementi nei tipi complessi presenti nei file XSD durante la creazione di un proxy client dei servizi Web
Utilizzare, invece, lo stile di associazione V4.In caso contrario, se si dispone del bean Bean e dell'attributo qualsiasi_nome, e si specifica l'utilizzo dello stile di associazione V4, al runtime potrebbe verificarsi il seguente errore:
exception: [SOAPException: faultCode=SOAP-ENV:Client; msg=Unable to unmarshall mappings.BeanContentType. Unable to find setter method with method name setSomeName for class mappings.BeanContentType.]
- Il sever di controllo TCP/IP non funziona con il runtime SOAP su Linux. Qualsiasi tentativo di inserire il server di controllo tra un servizio Web e un client dei servizi Web (ad esempio, le JSP di esempio dei servizi Web, le JSP dei bean Java degli strumenti Web e il client di test universale), interferirà con le comunicazioni tra il client e il servizio. In particolare, il client verrà bloccato dalla prima risposta dal servizio. Per superare questa condizione nelle JSP di esempio o nell'UTC, chiudere tutti i browser, quindi avviare un nuovo browser esternamente a WebSphere Studio ed immettere l'URL delle JSP di esempio generate o del client di test universale.
Per controllare il traffico SOAP su Linux, utilizzare un altro strumento di controllo, ad esempio il tunnel TCP/IP incluso con il runtime di Apache SOAP, che può essere scaricato all'indirizzo http://ws.apache.org/soap/index.html.tool. Avviare il tunnel e richiamare un'operazione del client dei servizi Web. La richiesta e il traffico delle risposte dovrebbero essere visualizzati nel tunnel, ma il cliente verrà tuttavia sospeso. Arrestare il tunnel. In questo modo il client verrà sbloccato e l'operazione potrà essere portata a termine. Riavviare il tunnel prima di eseguire un nuovo richiamo.
- La procedura guidata Creazione servizi Web potrebbe avere esito negativo durante la generazione di WSDL se il nome host "localhost" non è definito nel computer. Se "localhost" non è definito è possibile anche che UTF non venga avviato correttamente.
In Windows, la seguente voce deve essere inserita nel file [INSTALL-DRIVE]\WINNT\system32\drivers\etc\hosts:
127.0.0.1 localhost
In Linux, la seguente voce deve essere inserita nel file /etc/hosts:
127.0.0.1 localhost
- Le URI presentano restrizioni relative ai caratteri stampabili US-ASCII. Per ulteriori informazioni, consultare RFC 2396.
Una volta compilata un'associazione personalizzata quando si creano servizi Java o Web EJB, le informazioni relative all'associazione, a eccezione dell'URL di ubicazione XSD, vengono memorizzate nel file ISD. Le informazioni vengono richiamate quando si creano servizi Web dal file ISD. Di conseguenza, quando si creano servizi Web da un file ISD, nella pagina Associazioni da Java a XML della procedura guidata, è necessario inserire la l'URL del percorso XSD manualmente.
- La generazione di WSDL con parametri complessi potrebbe provocare problemi con gli strumenti Microsoft che utilizzano WSDL. Tali strumenti non gestiscono in modo corretto le istruzioni XSD include e potrebbe quindi essere necessario integrare gli schemi XSD in un WSDL generato. A questo scopo, selezionare
Finestre > Preferenze > Servizi Web > Generazione codice > Utilizza schema integrato.Le procedure guidate Servizi Web sono ora completamente abilitate a generare associazioni basate su elementi, oltre alle normali associazioni basate su tipi, sempre che sia selezionata la casella di controllo "Abilita associazione basata su elementi". Tale casella di controllo si trova nella pagina delle preferenze a cui è possibile accedere dal dal menu principale:
Finestre > Preferenze > Servizi Web > Generazione codice.Per impostazione predefinita, tale preferenza non è abilitata; è tuttavia necessario selezionarla se si desidera realizzare l'interoperabilità tra il runtime di Apache/IBM SOAP e i runtime dei servizi Web di altri fornitori che inviano messaggi i cui elementi non dispongono delle proprietà "xsi:type". I runtime dei servizi Web di altri fornitori seguono diversi criteri nell'inclusione di proprietà xsi:type. In alcuni sono sempre incluse, altri mai, in altri ancora è prevista un'opzione di configurazione. Altri, infine, omettono le proprietà xsi:type per determinati tipi, come le matrici.
L'errore tipico generato dal runtime SOAP Apache/IBM è il seguente:
targetException=java.lang.IllegalArgumentException: No Deserializer found to deserialize a ':MyElement' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.
Se è stata selezionata la relativa funzione, vengono generate associazioni basate sugli elementi:
- nel file del descrittore di distribuzione per gli scenari bean/EJB Java dal basso verso l'alto e per gli scenari di struttura WSDL
- nel proxy degli scenari del client.
Le associazioni basate sugli elementi hanno la seguente struttura:
<isd:map
encodingStyle="encoding style"
xmlns:x="some-namespace"
qname="x:some-local-name"
xml2JavaClassName="some-deserializer-class-name"/>Le associazioni basate su elementi vengono generate per:
- ciascuna delle parti definite negli input wsdl:message
- ciascuna delle parti definite negli output wsdl:message, solo per gli scenari Struttura e Proxy
- ciascuno degli elementi principali o degli elementi locali dei tipi complessi a cui fanno riferimento le parti nel file WSDL
Le procedure guidate Servizi Web WSAD seguono le specifiche XSD e SOAP per determinare se in un'associazione basata su elementi il nome dell'elemento debba essere qualificato (ad esempio, disporre di uno spazio dei nomi) o non qualificato.
I servizi Web WSAD seguono le regole riportate in basso per la scelta tra nomi di elementi qualificati e non qualificati:
- I nomi di parte in WSDL producono nomi non qualificati.
- Gli elementi principali in XSD producono nomi qualificati.
- Gli elementi locali in XSD producono nomi non qualificati se lo schema specifica elementFormDefault="unqualified", l'impostazione predefinita se lo schema non possiede un attributo elementFormDefault.
- Gli elementi locali in XSD producono nomi qualificati se lo schema specifica elementFormDefault="qualified".
Alcuni runtime producono elementi non qualificati nei messaggi SOAP, nonostante uno schema abbia specificato l'utilizzo di elementi qualificati mediante l'attributo "elementFormDefault" dello schema XSD. In questi casi, è necessario intervenire manualmente sul WSDL o sul XSD del servizio per modificare l'attributo elementFormDefault in "unqualified".
Di seguito è riportato un esempio di associazione basata su elementi, non qualificata con spazio dei nomi:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:name"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>L'esempio che segue riporta invece un'associazione basata sugli elementi qualificata con uno spazio dei nomi:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="http://www.ibm.com/"
qname="x:name"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>Si noti che per un dato nome di elemento verrà generato una sola associazione. In altre parole, se lo schema utilizza lo stesso nome di elemento più di una volta per tipi differenti, solo uno degli elementi verrà selezionato, a caso, come elemento base dell'associazione. Gli altri elementi di tipi diversi che utilizzano lo stesso nome non verranno deserializzati. Ciò avviene anche nel caso in cui lo schema utilizzi lo stesso nome per un elemento e per un componente WSDL.
- Quando si inizia con un bean di servizio che restituisce una matrice Map o una matrice di Hashtable ed è attivata l'opzione di "associazione basata su elementi", il Proxy SOAP generato eseguirà un'associazione non corretta del tipo restituito ad una java.lang.String[]. Si verificherà un'eccezione ClassCastException durante il runtime. Per risolvere il problema, eseguire la procedura guidata del client del servizio Web con il WSDL appena creato e ripetere la generazione del proxy SOAP nel progetto del client.
- Durante la creazione di un servizio Web da un bean Java che utilizza altri bean Java con proprietà di tipo Vector, Hashtable o Map, XSD verrà generato con complexTypes contenenti tipi "Vector" e "Map" dallo spazio nomi "http://xml.apache.org/xml-soap". Poiché lo spazio nomi non contiene alcuno schema, il validator XSD produrrà errori e avvisi simili al seguente:
Tali errori ed avvisi non interferiranno con l'elaborazione di WSDL e XSD eseguita dalle procedure guidate dei servizi Web. I tipi "Map" e "Vector" verranno associati correttamente alle rispettive controparti Java. Tenere presente che altri fornitori potrebbero avere difficoltà nell'elaborazione di WSDL o XSD contenenti questi tipi perché http://xml.apache.org/xml-soap non è uno spazio nomi riconosciuto dalle specifiche WSDL 1.1 o SOAP 1.1. Per migliorare la interoperabilità, è possibile adattare le classi di raccolta Java, alle matrici e ai bean, e successivamente generare i servizi Web dagli adattatori.
- Error src-resolve: Cannot resolve the name 'xsd2:Vector' to a(n) type definition component.
- Warning src-import.0: Failed to read imported schema document 'null'.
- Per migliorare l'interoperabilità con i servizi Web Microsoft, il runtime DADX è stato aggiornato in modo che possano generare servizi Web in stile documento. Per attivare tale funzione, utilizzare la procedura guidata di configurazione DADX per aprire la pagina delle proprietà relativa a un gruppo DADX da utilizzare. Nella parte inferiore della pagina, verificare che il campo di immissione "Utilizza stile documento" sia impostato su true.
- Non è supportata la generazione di un proxy Java per le operazioni di chiamata DADX con più parametri di output.
- Quando si crea un servizio Web DADX, viene generalmente visualizzato il messaggio "IWAB0177E Errore nella generazione di WSDL da un file DADX" . Nella maggior parte dei casi questo messaggio indica un problema relativo al server e le relative informazioni sono disponibili nel log della console del server. Tenere inoltre presente quanto segue:
- È necessario che i file DAD (*.dad) siano ubicati nella directory del gruppo DADX. Questo è il modo in cui il runtime WORF localizza i file DAD.
- Se si tenta di generare un file DAD da un file di associazioni RDB a XML (.rmx), accertarsi che il file DAD sia ubicato nella stessa cartella del file DADX.
- Lo schema DADX non utilizza più il tag del documento WSDL per la documentazione. Questo tag è ora parte dello schema DADX. Ciò può provocare problemi di convalida con file DADX precedenti di cui non è stata eseguita la migrazione per ottenere lo schema aggiornato. Ad esempio, se il file DADX precedente conteneva il seguente XML:
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Provides queries for part order information at myco.com.
</wsdl:documentation>nel nuovo documento si avrà:
<documentation>
Provides queries for part order information at myco.com.
</documentation>
È possibile che si verifichino errori di compilazione se dopo aver generato WSDL, proxy ed esempi per un bean Java, viene modificato il bean Java (ad esempio, viene modificata la firma di uno dei relativi metodi). Se si elimina il proxy generato in precedenza, creando nuovamente WSDL, proxy ed esempi per il bean Java modificato, l'esempio appena creato potrebbe non essere compilato, dal momento che esso utilizza i dati del bean Java originale precedenti alla modifica.
Questi scenari prevedono che il server comunichi attraverso la porta 9080, in caso contrario sarà necessario aggiornare i seguenti file del proxy.
- HospitalProj/Java Source/proxy/soap/com/ibm/b2b/examples/insurance/InsuranceServiceBeanProxy.java
- HospitalProj/Java Source/proxy/soap/WSDLserviceProxy.java
Per ciascuno di questi file, modificare "http://localhost:9080..." in "http://localhost:NEW_PORT...", ricordando che NEW_PORT indica il numero di porta attraverso cui avvengono le comunicazioni del server.
Il driver DB2 db2java.zip deve essere aggiunto al percorso classi WebSphere ws.ext.dirs. Per aggiungere db2java.zip, procedere come segue:
- Passare alla prospettiva Server (Finestra > Apri prospettiva > Server).
- Nel riquadro Configurazione server, espandere Server.
- Fare doppio clic su WebSphere v.4.0 Test Environment. Verrà aperto l'editor Istanza.
- Nell'editor Istanza, scegliere la scheda Percorsi, quindi Aggiungi JAR esterni nella sezione Percorso classi specifico WebSphere (ws.ext.dirs), per aggiungere /home/db2inst1/sqllib/java12/db2java.zip al percorso WebSphere.
- Selezionare File > Salva (nome del file) per salvare le modifiche ed uscire dall'editor Istanza.
Per aggiornamenti alla documentazione dello scenario Hospital, visitare il WebSphere Developer Domain e scegliere Library.
Durante l'avvio di Universal Test Client dalla procedura guidata Servizi Web, l'URL del fornitore JNDI è impostato sulla porta predefinita 2809 di WebSphere v5. Se si utilizza un server WebSphere v4 o se è stato modificato il numero di porta, non sarà possibile eseguire la ricerca nella directory JNDI. Tentando di accedere a tale directory si otterrà il seguente messaggio di errore:
IWAD0403E Impossibile creare la struttura JNDI: rilevato CORBA.COMM_FAILURE durante la risoluzione del riferimento iniziale=WsnNameServicePer risolvere il problema:
- Fare doppio clic sul server che si sta utilizzando, in modo da visualizzarne le proprietà.
- Selezionare la scheda Porte.
- Copiare la porta bootstrap Orb.
- Aprire la finestra delle proprietà JNDI nel client di test universale.
- Incollare la porta bootstrap nella casella di immissione testo relativa all'URL del fornitore.
È possibile che non si riesca ad aprire il file JSP di esempio del servizio Web nel browser quando è in corso il ricaricamento da parte del server. Fare clic sull'icona Aggiorna nel browser per ricaricare il file JSP di esempio o per riavviare l'URL.
Generalmente gli strumenti non supportano output multipli in un servizio Web; ciò non vale per i servizi Web DADX, che possono supportare output multipli se si imposta la proprietà Utilizza gruppo di stile documento su true. In questo caso, se stile documento è impostato su true, gli output multipli vengono riuniti in un unico documento XML.
È stata aggiunta una nuova categoria di preferenze dei servizi Web denominata driver JDBC a cui è possibile accedere selezionando Finestra > Preferenze > Servizi Web. Anche se tale preferenza è disponibile in tutte le piattaforme, è stata concepita per l'utilizzo esclusivo in Linux. In Linux può risultare difficile determinare il percorso del file JAR che contiene i driver JDBC. Questa pagina delle preferenze è stata aggiunta per poter specificare il file JAR da utilizzare. Attualmente, solo il codice di convalida DADX utilizza le informazioni del file JAR.
I file DAD memorizzati nella directory WSinstall_dir\wstools\eclipse\plugins\com.ibm.etools.webservice_<version>\samples\DADX_examples devono esser modificati in due punti per rispettare la configurazione del sistema.
Accanto alla parte iniziale del file è possibile individuare una riga simile a quella riportata di seguito:
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
Se l'extender XML è stato memorizzato in un percorso diverso rispetto a c:\dxx è necessario modificare tale stringa in modo che riporti l'attuale percorso dell'extender XML. Questo vale anche per i sistemi Linux, in cui la posizione è solitamente /usr/IBMdb2xml.
La seconda parte del file DAD per cui è necessario l'aggiornamento è rappresentata dalla riga seguente:
<doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
Se l'extender XML è posizionato in una directory diversa, il percorso getstart.dtd deve essere conseguentemente modificato.
- Nella pagina Proprietà gruppo DADX dei servizi Web della procedura guidata Servizi Web, le modifiche potrebbero non avere effetto immediato. Di conseguenza, si consiglia di effettuare le modifiche alle proprietà del gruppo DADX utilizzando la Configurazione guidata gruppo DADX.
- Dopo la modifica e la convalida di un file DADX, potrebbe essere visualizzato un messaggio nella vista Attività che indica di rigenerare il progetto. Se si verifica tale situazione, fare clic con il pulsante destro del mouse sul progetto appropriato e fare clic su Rigenera progetto. Potrebbe essere necessario dover effettuare questa operazione una seconda volta per rimuovere il messaggio dalla vista Attività.
Le finestre a comparsa di Esplora servizi Web potrebbero non essere visualizzate correttamente se Mozilla e Netscape sono in esecuzione allo stesso tempo. Le finestre a comparsa comprendono la finestra Sfoglia WSDL e Sfoglia categoria. Per risolvere questo problema, utilizzare Mozilla o Netscape, ma non contemporaneamente.
Anche se le funzioni definite dall'utente sono elencate nella procedura guidata Generazione di DADX, attualmente non è possibile generare DADX dalle funzioni definite dall'utente. Il supporto è disponibile solo per la generazione di DADX dai file DAD, dalle procedure memorizzate e dalle istruzioni SQL. Selezionando una UDF verrà generata una semplice struttura DADX.
Se viene importato un file dei servizi Web da 4.0.x, è possibile che vengano visualizzati i seguenti messaggi di errore:
Errore La parte 'result' contiene un valore 'anyElement' non valido definito per un suo tipo. Le dichiarazioni dei tipi devono fare riferimento a valori validi definiti in uno schema.
Errore La parte 'return' contiene un valore 'findPatientResult' non valido definito per un suo elemento. Le dichiarazioni degli elementi devono fare riferimento a valori validi definiti in uno schema.
Errore La parte 'response' contiene un valore 'findPatientResponse' non valido definito per un suo elemento. Le dichiarazioni degli elementi devono fare riferimento a valori validi definiti in uno schema.Per risolvere il problema:
- Eliminare i file WSDL.
- Rigenerare i servizi Web eseguendo nuovamente la procedura guidata dei servizi Web.
Visualizza il file Readme principale
(C) Copyright IBM Corporation 2000, 2003. Tutti i diritti riservati.