1.0 簡介
2.0 支援的軟體和規格
3.0 前一版的變更
4.0 已知的問題
4.1 Web 服務瀏覽器
4.2 私密 UDDI 登錄
4.3 與 IBM SOAP 執行時期交互作業的能力
4.4 從 DADX 檔產生 WSDL 文件
4.5 Web 工具 JSP 產生器
4.6 使用 Universal Test Client
4.7 在某些情況下,DADX Web 服務可以有多重輸出
4.8 JDBC 驅動程式喜好設定只供 Linux 使用
4.9 如果 XML Extender 沒有安裝在預設目錄中,需要更新 DAD 範例檔
4.10 DADX Web 服務問題
4.11 DADX 產生支援
4.12 從 4.0.x 匯入 Web services 檔之後所發生的 WSDL 錯誤
4.13 使用 Web 服務指令行的問題
4.14 在沒有現有伺服器的情況下建立 Web 服務
4.15 產生 Web 服務範例應用程式
4.16 匯入含 HTTP 基本鑑別的 WSDL 檔
4.17 使用 WebSphere 5.0.2 版執行時期的問題
4.18 利用資料來源資訊來設定 DADX 群組
4.19 利用 Universal Test Client 載入用戶端定位器
4.20 看不到資源喜好設定
4.21 使用 Apache Axis 1.0 執行時期的問題
4.22 無法編譯 Web 服務範例 JSP
4.23 德文 Web 服務指令行的問題
4.24 未定義 localhost 的錯誤
4.25 使用 IBM SOAP 執行時期的永久限制
4.26 Web 服務和用戶端使用不同執行時期
4.27 在 Web 服務用戶端精靈中按一下「完成」
4.28 Web 服務提要
Web 服務工具特性可讓您探索、建立及發佈 Java Bean、DADX、Enterprise Bean 和 URL Web 服務。 這個 Readme 檔會說明和下列 Web 服務工具功能相關聯的已知問題、限制以及解決方案。
- 從 Java Bean、DADX 文件、Enterprise Bean、ISD 檔和 URL 產生 WSDL 文件。
- 從 WSDL 文件產生 Java Proxy 或 Skeleton。
- 從 Java Bean、DADX、Enterprise Bean 或 URL 建立及部署 Web 服務。
- 探索及發佈 Web 服務。
- 從 Java Proxy 產生範例 Web 應用程式。
- 交互作業能力的問題。
Web 服務瀏覽器支援下列 Web 瀏覽器:
- Microsoft Internet Explorer 6.0 或更新的版本
- Mozilla 1.2.1 或更新的版本
這一版的 Web 服務工具可產生符合下列規格的程式碼:
- 簡式物件存取通訊協定 (SOAP) 1.1 版
- 廣泛描述、探索與整合 (UDDI) 2.0 版
- Web 服務定義 (WSDL) 1.1 版
- Web 服務檢驗語言 (WSIL) 1.0 版
這一版的 Web 服務工具支援下列項目:
- IBM WebSphere 5.0.2 版 Web 服務執行時期
- IBM SOAP 2.2 和 2.3 版執行時期環境。
- Apache Axis 1.0 執行時期
如果您在工作台之外,利用 Mozilla 來啟動 WORF 測試環境,建議您至少使用 Mozilla 1.3.1 版。 版本更早的 Mozilla 瀏覽器無法正確顯示呼叫 Web 服務的輸出和說明檔。
DADX 執行時期需要 DB2 7.2 修正程式 6 或更新的版本,或 DB2 8.1 或更新的版本。
以下是 5.1 版中的 Web 服務工具新特性:
- 支援 IBM WebSphere 5.0.2 版 Web 服務執行時期。 這是策略性的 IBM Web 服務執行時期,它支援 JSR-109 和 JAX-RPC。
- 支援 Apache Axis 1.0 執行時期。這個執行時期支援 JAX-RPC,適用於偏好針對開放式 Apache Axis 平台進行開發的使用者。
- 提供 Web 服務指令行工具,供使用者從 Java Bean、EJB 或 WSDL 檔建立 Web 服務,以及在 UDDI 登錄中發佈和取消發佈商業和服務。
- 將 WSDL 瀏覽器充分整合在 Web 服務瀏覽器中。
- 提供 Web 服務應用程式組合工具,其中包括:
- Web 服務編輯器和 Web 服務用戶端編輯器,用來編輯 JSR-109 和 IBM WebSphere 5.0.2 版部署描述子。
- 呼叫 EndpointEnabler 函數的蹦現動作。
- 呼叫 WebServiceDeploy 函數的蹦現動作。
- 說明會引導使用者利用喜好設定建立 WS-I 標準 Web 服務。使用者可以選擇讓 Web 服務精靈在建立 Web 服務時,需要、建議或忽略 WS-I 相容。
- 產生或使用前 Proxy WSIL Web 服務參照文件。
- 讓使用者能夠利用範例安全配置來更新 WebSphere 5.0.2 版部署描述子。
- 支援從 EJB 建立 Web 服務時,以 SOAP over JMS 為 SOAP 訊息的傳輸。
- 支援使用者定義的 UDDI 種類。
- 支援 Web 服務驗證。當設定喜好設定時,工具會驗證企業應用程式或其中的模組是否符合一組標準 JSP-109 規則。
- 當您以「私密 UDDI 登錄」使用「Web 服務瀏覽器」時,在下列情況下,系統不會載入企業節點的「管理發佈者主張表格」:
- 您未登入包含該企業節點的登錄節點。
- 您登入了包含該企業節點的登錄節點,但用來登入包含登錄的「使用者 ID/密碼」並不擁有該企業節點。
- 您將無法在啟用基本鑑別的 UDDI 登錄中,利用 Web 服務瀏覽器來查詢或發佈。 部署在開啟基本鑑別的伺服器中的私密登錄就是這種登錄的範例。 請注意,這個問題不會影響任何公開登錄(IBM、Microsoft、SAP、NTT 和 XMethods)。
- 當在 Web 服務瀏覽器中利用進階搜尋來尋找在 Cloudscape 後端所配置的 WAS 私密 UDDI 登錄中的企業,且將一或多個服務介面指定為參數時,搜尋會失敗,且狀態視窗會顯示:
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: 無法列出所有服務提供者。 ------------------------------------------------------------------------------ 巢狀異常狀況如下:E_fatalError (10500) 處理要求時,發生嚴重技術錯誤。 : Fault code=Client Fault string=Client Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=E_fatalError (10500) E_fatalError (10500) 處理要求時,發生嚴重技術錯誤。
- XMethods 登錄有現成的程序,可用來確認發佈的 Web 服務並刪除無法存取或運作的服務。如果要防止刪除發佈的 Web 服務,請確定 WSDL 檔內的所有 URL 參照都能在網際網路中存取。
SAP UDDI Business Registry 會依 findQualifier 等於 "combineCategoryBags"(tModelKey 等於 UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2)的種類要求傳回尋找企業的 E_fatalError。 狀態視窗會顯示下列錯誤訊息。 只有 SAP UDDI Business Registry 有這個問題。
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: 無法列出所有服務提供者。 ------------------------------------------------------------------------------ 巢狀異常狀況如下:處理要求時,發生嚴重技術錯誤。 : Fault code=Client Fault string=UDDI Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=處理要求時,發生嚴重技術錯誤。 在 com.ibm.uddi4j.wsdl.client.UDDIWSDLProxy.findAllServiceProviders(UDDIWSDLProxy.java:1626) 在 FindBusWithQualifier.main(FindBusWithQualifier.java:35)
- SAP UDDI Business Registry 傳回的發佈者主張報告沒有包含任何狀態。 因此,Web 服務瀏覽器的「管理發佈者主張套表」中,SAP 傳回的報告的發佈者主張狀態直欄會空白。 只有 SAP UDDI Business Registry 有這個問題。
- 當試圖發佈商業、服務或 XMethods UDDI 登錄的服務介面時,會出現關於「SSL 訊息交換失敗」的錯誤訊息。這是 IBM 和 XMethods 正在探索的已知問題。
- 登錄中的所有企業可能都可以看到「私密 UDDI 登錄」的發佈者主張。 一個企業可能可以看到和企業本身相關聯的發佈者主張,比方說,企業的金鑰既不是發佈者主張的來源金鑰也不是目標金鑰。
- 當單元測試 UDDI 登錄配置了 Cloudscape 資料庫後端系統時,依預設,依名稱方法尋找的 UDDI 會執行區分大小寫的搜尋。 這是針對 UDDI 規格來執行的,它是一項限制。
- 私密 UDDI 登錄只應配置 Cloudscape 後端系統來進行非常基本的測試(也就是說,請勿在正式作業中使用這個後端系統,因為目前複式查詢之類的動作會發生困難)。如果需要私密 UDDI 登錄的詳細資訊,請參閱 WAS 第 5 版 InfoCenter 中的 Network Deployment 文件。
- 在建立或更新 Linux 中的 Cloudscape 型單元測試 UDDI 登錄之後,伺服器主控台可能會出現紅色的警告,指出:
Cloudscape(<uuid> 實例)試圖啟動 <UDDI DB location> 資料庫,即使 Cloudscape(<uuid> 實例)可能仍在作用中也是如此。 每次只應有一個 Cloudscape 實例啟動資料庫。否則,可能會造成嚴重和不可回復的毀損,且可能已經發生。
這個警告是一個錯誤警報。請造訪下列網址來取得詳細資訊:
http://www-1.ibm.com/support/docview.wss?rs=636&context=SSCVRP&q=&uid=swg21051601&loc=en_US&cs=utf-8&lang=en+en
- 當使用 IBM SOAP 執行時期時,產生含有複式參數的 WSDL 可能會讓使用 WSDL 的 Microsoft 工具發生問題。Microsoft 工具無法適當處理 XSD include 陳述式,因此,可能需要將 XSD 綱目列入產生的 WSDL 中。 您可以選取「視窗 > 喜好設定 > Web 服務 > 產生程式碼 > 使用列入綱目」來完成這個動作。
現在,當使用 IBM SOAP 執行時期時,如果勾選了「啟用以元素為基礎的對映」的話,除了任何以正常類型為基礎的對映,Web 服務精靈也完全能夠產生以元素為基礎的對映。從 WSAD 主功能表中,您可以在下列喜好設定頁面找到這個勾選框:
視窗 > 喜好設定 > Web 服務 > 產生程式碼。如果沒有啟用這個喜好設定(這是預設值),Apache/IBM SOAP 執行時期無法與所傳送訊息的元素沒有 "xsi:type" 內容的其他供應商的 Web 服務執行時期交互作業。 其他供應商的 Web 服務執行時期內容會遵循各種 xsi:type 內容併入原則。 有些一律會併入它們。 有些則否。 有些會提供配置選項。 有些會略過特定類型(如陣列)的 xsi:types。
以下是 IBM/Apache SOAP 執行時期所產生的一般錯誤:
targetException=java.lang.IllegalArgumentException: 找不到利用編碼類型 'http://schemas.xmlsoap.org/soap/encoding/' 將 ':MyElement' 元素解除序列化的解除序列化常式。
啟用之後,會在下列各項中產生以元素為基礎的對映:
- 由下而上的 Java Bean/EJB 實務和 WSDL Skeleton 實務的部署描述子檔
- 用戶端實務中的 Proxy
以元素為基礎的對映形式如下:
<isd:map
encodingStyle="encoding style"
xmlns:x="some-namespace"
qname="x:some-local-name"
xml2JavaClassName="some-deserializer-class-name"/>下列各項目會產生以元素為基礎的對映:
- 每個 wsdl:message 輸入中所定義的每個組件。
- 每個 wsdl:message 輸出中所定義的每個組件,只適用於 Skeleton 和 Proxy 實務。
- WSDL 檔中的各組件所參照的每個複式類型中的每個根元素或區域元素
「WSAD Web 服務」精靈會遵循 SOAP 和 XSD 規格來決定應不應該限定(就是有名稱空間)以元素為基礎之對映中的元素名稱。
WSAD Web 服務精靈遵循這些規則來決定要不要限定元素名稱:
- WSDL 中的組件名稱會產生沒有限定的名稱。
- XSD 中的根元素會產生限定的名稱。
- 如果綱目指定 elementFormDefault="unqualified"(綱目沒有 elementFormDefault 屬性時的預設值),XSD 中的區域元素會產生沒有限定的名稱。
- 如果綱目指定 elementFormDefault="qualified",XSD 中的區域元素會產生沒有限定的名稱。
部分執行時期已知雖然綱目利用 XSD 綱目的 "elementFormDefault" 屬性來指定使用限定的元素,但仍會在 SOAP 訊息中產生沒有限定的元素。 在這個情況下,您可能需要手動編輯服務的 WSDL 或 XSD,將 elementFormDefault 改成 "unqualified"。
以下是以非名稱空間限定元素為基礎的對映範例:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:name"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>以下是以名稱空間限定元素為基礎的對映範例:
<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"/>請注意,一個給定的元素名稱只會產生一個以元素為基礎的對映。 也就是說,如果綱目重複使用不同類型的相同元素名稱,就只會選取其中一個元素(實際上是隨機選取)作為基礎來進行一個以元素為基礎的對映。 其他不同類型的同名元素無法解除序列化。 如果綱目將相同名稱用在元素和 WSDL 組件上,也是如此。
- 當開始使用會傳回對映或雜湊表陣列的服務 Bean,且已啟用「以元素為基礎的對映」選項時,產生的 SOAP Proxy 會不正確地將傳回類型對映至 java.lang.String[]。 在執行時期,會發生 ClassCastException。 如果要解決這個問題,請利用新建立的 WSDL 來執行 Web 服務用戶端精靈,再將 SOAP Proxy 重新產生在用戶端專案中。
- 為了改進與 Microsoft Web 服務的交互作業能力,已更新過 DADX 執行時期,因此,它們可以產生文件樣式 Web 服務。 如果要啟用這個特性,請利用 DAXD 配置精靈來開啟要使用的 DAXD 群組的內容頁面。 在內容頁面底端,請確定「使用文件樣式」輸入欄位已設定為 true。
- 系統不支援產生具有多個輸出參數之 DADX 呼叫作業的 Java Proxy。
- 當您建立 DADX Web 服務時,有時會出現訊息「IWAB0177E 從 DADX 檔產生 WSDL 時發生錯誤」。 在大部分情況下,這則訊息表示一些資料庫相關的問題,且您應查閱伺服器主控台日誌以取得問題的詳細資料。 同時,也請檢查下列項目:
- DAD (*.dad) 檔需要位於 DADX 群組目錄中。 這是 WORF 執行時期找出 DAD 檔的方法。
- 如果您嘗試從「RDB 至 XML 對映」檔 (.rmx) 產生 DAD 檔,請確定該 DAD 檔和 DADX 檔位於相同的資料夾中。
- DADX 綱目已不再將 WSDL 文件標示用在文件說明上。 現在,這個標示是 DASX 綱目的一部分。 這可能會使還沒有移轉使用更新綱目的舊版 DADX 檔發生驗證問題。 比方說,如果舊版 DADX 檔含有下列 XML:
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
提供 myco.com 的零件訂購資訊的查詢。
</wsdl:documentation>新的文件項目是:
<documentation>
提供 myco.com 的零件訂購資訊的查詢。
</documentation>
當從「Web 服務」精靈啟動 Universal Test Client 時,JNDI 提供者 URL 會設定為 WebSphere 第 5 版的預設埠 2809。 如果您使用 WebSphere 第 4 版伺服器,或您已變更了埠號,您將無法搜尋 JNDI 目錄。 如果您試圖存取 JNDI 目錄,會出現下列錯誤:
IWAD0403E 無法建構 JNDI 樹:當解析起始 reference=WsnNameService 時捕捉到 CORBA.COMM_FAILURE暫行解決方法如下:
- 按兩下您在使用的伺服器。這會呼叫伺服器內容。
- 選取「埠」標籤。
- 複製 ORB 引導埠。
- 在 Universal Test Client 中開啟 JNDI 內容視窗。
- 將引導埠貼在提供者 URL 文字輸入框中。
我們的工具通常不支援 Web 服務中的多重輸出。 不過,在 DADX Web 服務的情況下,如果使用文件樣式群組內容設定為 true,就可以有多重輸出。 在這個情況下,當文件樣式是 true 時,就會將多重輸出組合成單一 XML 文件。
已新增了新的 Web 服務喜好設定(視窗 > 喜好設定 > Web 服務)種類,稱為 JDBC 驅動程式。 雖然所有平台都可以取得這個喜好設定,但它只供 Linux 使用。 在 Linux 中,可能很難判斷含有 JDBC 驅動程式的 JAR 檔的位置。 因此,新增了這個喜好設定頁面,讓您能夠指定要使用的 JAR 檔。 目前,只有 DADX 驗證碼會使用這個 JAR 檔資訊。
可能需要修改 WSinstall_dir\wstools\eclipse\plugins\com.ibm.etools.webservice_<version>\samples\DADX_examples 目錄中的 DAD 檔來反映您的特定系統配置。
在檔案頂端附近有一行類似下面這行:
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
如果 XML Extender 已被載入 c:\dxx 以外的位置,就必須更新這個字串來反映實際的位置。 這也適用於 Linux 機器,在 Linux 機器中,這個位置通常是 /usr/IBMdb2xml。
- 在 Web 服務精靈的 Web 服務 DADX 群組內容頁面中,變更不會立即生效。 因此,建議您利用「DADX 群組配置」精靈來變更 DADX 群組內容。
- 編輯和驗證 DADX 檔之後,「作業」視圖可能會出現一則訊息說明需要重新建置專案。 如果出現這個情況,請用滑鼠右鍵按一下適當的專案,再按一下「重新建置專案」。 您可能需要執行這個動作兩次,才能從「作業」視圖中移除這個訊息。
雖然「產生 DADX」精靈列出使用者定義的功能,但目前不支援從使用者定義的功能產生 DADX。 目前只支援從 DAD 檔、儲存程序和 SQL 陳述式來產生 DADX。 選取 UDF 會產生簡式 DADX Skeleton 檔。
如果您已從 4.0.x 匯入 Web services 檔,可能會出現下列錯誤訊息:
錯誤。定義給 'result' 組件類型的 'anyElement' 值無效。 類型宣告必須參照綱目中所定義的有效值。
錯誤。定義給 'return' 組件元素的 'findPatientResult' 值無效。 元素宣告必須參照綱目中所定義的有效值。
錯誤。定義給 'response' 組件元素的 'findPatientResponse' 值無效。 元素宣告必須參照綱目中所定義的有效值。暫行解決方法如下:
- 刪除 WSDL 檔。
- 重新執行「Web 服務」精靈來重新產生 Web 服務。
- FileNStoPkg 選項:指令行中之 WSDL2WebService 的 -fileNStoPkg 選項目前無法運作。請在指令行中使用 -NStoPkg,並輸入每個對映。 另外一個選項是在需要名稱空間至套件對映時,使用 Web 服務精靈。
- 含空格的目錄:請避免從目錄名稱含有空格的目錄中執行 WSDL2WebService。否則,不會編譯產生的 compile.bat(或 Linux 中的 compile.sh)。
- 用戶端部署描述子和 WSDL 檔:在執行 Bean2WebService、EJB2WebService、WSDL2WebService 之後, 用戶端部署描述子(webservicesclient.xml、ibm-webservicesclient-bnd.xmi、ibm-webservicesclient-ext.xmi 和 _mapping.xml)會在 client-side/META-INF 之下。 如果使用者要建立受管理的用戶端應用程式,他們應該遵循下列程序:
- 如果要以 EJB 或 J2EE 應用程式用戶端的形式來執行受管理的用戶端,使用者必須將所有部署描述子套裝在保存檔的 META-INF 之下, 並將服務端的 wsdl(如果服務是在 Web 儲存器中,就是在 WEB-INF/wsdl 之下,如果服務是在 EJB 儲存器之中,就是在 META-INF/wsdl 之下)複製到用戶端專案的 META-INF/wsdl 中。
- 如果要在 Web 儲存器內執行受管理的用戶端,使用者必須將所有部署描述子套裝在用戶端保存檔的 WEB-INF 中(在 WebSphere Studio 中,通常是以 WAR 或 Web 專案的形式)。 WSDL 檔也必須從服務端複製到 WEB-INF/wsdl。 使用者也必須手動編輯 webservicesclient.xml(使用文字編輯器,如果是在 WebSphere Studio 中,則是 XML 編輯器),將所出現的每個 META-INF 都改成 WEB-INF。
含有底線的類別名稱:當從 Java Bean 或 EJB 建立 Web 服務時,如果服務 Bean 的類別名稱含有底線,且後續字元是小寫(如 test.Simple_bean),就不能在 WebSphere Application Server 中啟動這項服務。 暫行解決方法是使用不含底線的服務 Bean 名稱,或在底線之後使用大寫字母(如 test.Simple_Bean)。
- 當在沒有現存 Web 伺服器的情況下,在工作區中執行建立 Web 服務的實務時,按第三頁的「上一步」會停用「下一步」按鈕。 暫行解決方法是取消精靈作業,重新啟動精靈。 如果要避免這個問題,請先建立伺服器和配置,再啟動 Web 服務實務,或在沒有現存 Web 伺服器的情況下,避免按第三頁的「上一步」。
- 當使用者在工作台中,用滑鼠右鍵按一下 Java 檔時,「Web 服務」功能表下的產生範例應用程式蹦現動作會產生 IBM SOAP Proxy 的 Web 服務範例 JSP。 如果要產生其他 Web 服務執行時期(IBM WebSphere 5.0.2 和 Apache Axis 1.0)的 Web 服務範例 JSP,請用滑鼠右鍵按一下 WSDL 檔,選取「Web 服務」功能表下的產生用戶端蹦現動作。 當執行這個精靈時,請選取測試產生的 Proxy。
當從有相關匯入項目且受到 HTTP 基本鑑別保護的 WSDL 檔產生 Skeleton 或用戶端時, 使用者會見到一則無法解析 WSDL 檔的錯誤訊息,即使輸入的使用者 ID 和密碼正確也是如此。 問題在於這個使用者 ID 和密碼只能用來擷取原始 WSDL 檔,不能擷取它匯入的檔案。
如果要解決這個問題,使用者可以先將 WSDL 檔和所有匯入的檔案下載在工作台中,再從下載的 WSDL 檔產生 Skeleton 或用戶端。
- 沒有 WSDL 支援:不支援將 WSDL 加入執行於測試環境或遠端伺服器環境的 WebSphere 5.0.2 版中所部署之 Web 服務的端點 URL 來取得所部署 Web 服務的 WSDL 檔。 您可以在 Java Bean Web 服務的 Web 專案之 WebContent/WEB-INF/wsdl 下,或在 EJB Web 服務的 EJB 專案之 ejbModule/META-INF/wsdl 下,找到產生的 WSDL 檔。 如果需要從 Web 專案提供 WSDL,使用者可以參照在 Web 專案之 WebContent/wsdl 下的 WSDL 檔副本,或在 WebContent 之下建立他們自己的位置,再從 Web 專案提供 WSDL。
- 有公用程式 JAR 或多個來源資料夾:當從 Java Bean 或 EJB 建立 Web 服務時,如果 Web 專案中有多個來源資料夾,或 Bean 在 EAR 檔內的公用程式 JAR 中,可能會在模組中產生不必要的檔案。 由於這些產生的檔案已在模組中(在公用程式 JAR 中,或在另一個來源資料夾中),因此,您可能需要刪除它們,才能編譯專案以及使 Web 服務正常運作。 其他暫行解決方法是將來源資料夾合併成一個,或將公用程式 JAR 中的 Bean 複製到來源資料夾中。
- 在 RPC/literal 中,不支援使用陣列:當建立 RPC/literal 服務時,方法簽章不能含有陣列。 如果含有陣列,就無法利用產生的用戶端碼來呼叫服務。 這個問題目前沒有暫行解決方法。 可能的話,請嘗試使用 document/literal 或 RPC/encoded。
- 在 document/literal 中,不支援方法超載:當建立 document/literal 服務時,不支援方法超載(方法名稱相同,輸入參數不同)。 這個問題目前沒有暫行解決方法。 可能的話,請嘗試使用 RPC/literal 或 RPC/encoded。
- WSDL 匯入:WSDL import 陳述式只能使用絕對 URL,或相同目錄中的相對 URL。 比方說,不支援使用下列形式的相對匯入:
<import namespace="http://someNamespace/" location="../someFile.wsdl"/>- 在 portType 元素之前的 binding 元素:當從有 binding 元素在 portType 元素之前的 WSDL 檔產生用戶端 Proxy 或 Skeleton 時,會出現「從 WSDL 檔產生 Java 檔和部署描述子時,發生錯誤(詳細資料:作業名稱重複)」。
- 抽象名稱:當以使用抽象元素或類型的作業從 WSDL 檔產生 Skeleton 時,不會編譯產生的 JavaBeans。
- 不含預設 JAX-RPC 對映的類型:當以 inout 參數類型沒有任何預設 JAX-RPC 對映的作業來從 WSDL 檔產生 Skeleton 時,不會編譯產生的 JavaBeans。 問題在於從 javax.xml.soap.SOAPFactory 建立 javax.xml.soap.SOAPElement 時,它會擲出 javax.xml.soap.SOAPException。 實作 Bean 不會捕捉或重新擲出這個異常狀況,因此,不會編譯它。
- 輸入和輸出的綱目類型相同:當從輸入/輸出訊息以及錯誤訊息使用相同 XML 綱目類型的 WSDL 檔產生 Skeleton 時,在執行時期,產生的成品無法運作。 如果要解決這個問題,請勿在輸入/輸出訊息和錯誤訊息之間共用 XML 綱目類型定義。
- 含 minOccurs 和 maxOccurs 的 XSD 元素參照:當從 WSDL 檔產生 Skeleton 時,請勿以指定了 minOccurs 和 maxOccurs 值 (<element ref="..." minOccurs="0" maxOccurs="unbounded"/>) 的使用者來使用 XSD 元素參照。 使用這樣的元素會在伺服器啟動時產生 java.util.MissingResourceException。
- 產生的 Bean 與服務 Bean 有不同的 API: 如果從 Java Bean 或 EJB 建立 Web 服務時,發射器產生的 Bean 與服務 Bean 有不同的 API,可能會出現類似下列中的執行時期錯誤:
方法未定義。
找不到相符的 Java 作業。
以下是與產生的 Bean 有不同 API 的服務 Bean 範例:
- 含公用欄位的 Bean
- 取得元名稱是 getBooleanValue 而不是 isBooleanValue 的 Boolean 欄位
- 含有大寫方法名稱的方法名稱
document/literal 開啟 wrap 選項:當利用 document/literal 由下而上建立 Web 服務時,依預設,會開啟 wrap 選項。 如果您有多項類型不同的輸入或完全沒有輸入,交互作業能力可能會有問題。 暫行解決方法是使用 RPC/literal。 Java Bean 含有小寫名稱或底線:當您從檔案名稱含有小寫或底線之後是小寫的 Java Bean 建立 Web 服務時,會出現下列錯誤:
從 WSDL 檔產生 Java 檔和部署描述子時,發生錯誤,含 getOutputStream() IOException 的詳細資料。不同的安全配置:請勿在相同模組/專案中產生含有不同安全配置的 Web 服務。請在每個 Web 服務上使用個別的專案。
如果利用 WebSphere Application Server 5.0 版來控管 DADX Web 服務,DADX 群組的 group.properties 檔應該使用下列 initialContextFactory 內容:
initialContextFactory=com.ibm.websphere.naming.WsnInitialContextFactory另外,含有 DADX 群組之專案的 web.xml 檔應該新增下列內容。(假設資料來源 JNDI 名稱是 jdbc/hospital。)
<resource-ref id="ResourceRef_1058550453092">
<res-ref-name>jdbc/hospital</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>CONTAINER</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
當 Universal Test Client 無法預載 WebSphere 5.0.2 版或 Axis 執行時期所產生的用戶端載入器類別時,這是因為服務 Web 專案中的 Java Bean 類別名稱與用戶端 Web 專案中的 SEI 類別名稱相同。 如果要暫時解決這個問題,請執行下列動作:
- 從工作區中移除用戶端 Web 專案
- 用滑鼠右鍵按一下用戶端 Web 專案,再按一下「刪除」。
- 找出 EAR 專案中的 application.xml,按兩下檔案來開啟應用程式部署描述子編輯器。 選取用戶端 Web 專案模組,按一下「移除」。 請關閉編輯器和儲存變更。
- 在不同 EAR 下建立用戶端 Web 專案,EAR 專案名稱必須按照字母順序,在服務 EAR 專案名稱之前。 比方說,如果服務 EAR 專案名稱是 "DefaultEAR",請建立稱為 "ClientEAR" 的新 EAR 專案名稱。
- 重新執行 Web 服務精靈。
當利用 WebSphere 5.0.2 版和 Axis 執行時期來建立 Web 服務時,看不到改寫檔案、建立資料夾和自動移出檔案喜好設定。 建立資料夾一律可以執行,永遠不會啟用自動移出檔案。
當使用 WebSphere 5.0.2 版執行時期時,一律會改寫 WSDL 檔、SEI 和部署成品(序列化常式和解除序列化常式)。 一律不會改寫開發成品(服務 Bean、複式類型 Bean、保留區和 Helper 類別)。 不過,如果有部署描述子的話,使用者一律會收到改寫部署描述子的警告。 使用者可以選擇「確定」來改寫部署描述子,繼續執行實務,也可以選擇「取消」來避免改寫描述子。
當使用 Apache Axis 1.0 執行時期時,Axis 發射器每次都會重新產生所有伺服器/用戶端 Java 檔、deploy.wsdd 和 undeploy.wsdd。 服務產生實務的 WSDL2Java 只有在 Skeleton 實作檔不存在時,才會產生 Skeleton 實作檔。 如果這個實作已經存在,不會改寫它。
利用 Apache Axis 1.0 執行時期建立 Web 服務必須使用 Axis 1.0 所提供的 Java2WSDL 和 WSDL2Java 發射器。 Axis 1.0 中的 document/literal 和 document/literal (wrapped) 支援有問題,因此,當利用 Apache Axis 1.0 執行時期來建立 Web 服務時,使用者應該使用 RPC/encoded。
當定義套件和名稱空間之間的自訂對映時,在按一下新增按鈕之後,表格中會出現錯誤的預設套件和名稱空間,使用者應該改寫這些預設值,輸入他們自己的套件和名稱空間對映。
當從 WSDL 產生 Web 服務 Skeleton 或 Proxy,且 WSDL 的一個 <service> 元素和 <port> 元素同名時,請勿使用範例 JSP 作為測試用戶端。 產生的範例 JSP 含有錯誤,不會進行編譯。 在伺服器上執行範例 JSP 的任何嘗試都會在瀏覽器中出現無法載入範例 JSP 的「錯誤 500」,在伺服器主控台中出現 Servlet 儲存器無法編譯範例 JSP 的異常狀況。
當在德文 Windows 中執行指令行時,在命令提示模式輸出中,某些字元會顯示為 "?"。這個字元很可能是德文的母音變化。
在產生 WSDL 期間,如果電腦中沒有定義主機名稱 "localhost",Web 服務建立精靈可能會失敗。 如果沒有定義 "localhost",UTC 也可能無法順利啟動。
在 Windows 中,[INSTALL-DRIVE]\WINNT\system32\drivers\etc\hosts 檔中必須有下列項目:
127.0.0.1 localhost
在 Linux 中,/etc/hosts 檔中必須有下列項目:
127.0.0.1 localhost
IBM SOAP 執行時期主要應該用在向下相容。 強力建議您在所有正式作業的用途上,搭配 IBM WebSphere 5.0.2 執行時期來使用 Web 服務精靈。 當搭配 IBM SOAP 執行時期來使用 Web 服務精靈時,使用者可能會遇到下列永久限制:
- 從 Java Bean 產生 WSDL 文件
- 由於從 char 或 java.lang.Character 到 WSDL XSD 的預設對映不存在,因此 char 和 java.lang.Character 需要您輸入自訂對映。
- 在服務 Bean 的所有輸入參數中,基本封套類型 java.lang.Boolean、java.lang.Byte、java.lang.Short、java.lang.Integer、java.lang.Long、java.lang.Float 和 java.lang.Double 都不能和其對應的各個初始類型 boolean、byte、short、int、long、float 和 double 並存。 比方說,如果服務 Bean 中的任何位置同時出現了 java.lang.Integer 和 int 作為輸入參數類型, 這個服務 Bean 就無法轉變成完整的 Web 服務。 當您試圖利用 Web 服務精靈從這類型的服務 Bean 建立 Web 服務時,除非您沒有在精靈的「Web 服務 Java Bean 方法」頁面中選取包含初始類型或封套類型的方法,否則將會出現一則警告訊息。 可是,您必須確定這些方法在第一次使用「Web 服務 Java Bean 方法」頁面時就未被選取。如果您發現該警告可能會產生不完整的 Web 服務,請回到這個頁面,並清除產生問題的方法。 在這個情況下,精靈應該重新啟動,使得第一次使用「Web 服務 Java Bean 方法」頁面時就能選取適當的方法。
- 不支援多維陣列。 Java 的替代方案是在維度之間插入 Java Bean。 比方說,它不用 MyType[][],其 MyArray 有 MyType[] 類型內容的 MyArray[] 型樣能夠運作。
- 如果方法的輸入引數清單包含混合的「DOM 元素」與簡式 Bean 類型, 則它需要一或多個自訂對映的項目。 「Web 服務定義語言」(WSDL) 1.1 版的規格支援對所有輸入組件(參數)使用單一編碼樣式。 簡式物件存取通訊協定 (SOAP) 2.2 版執行時期沒有含初始類型之 SOAP 編碼的 DOM 元素及含 Literal XML 編碼的 Bean 的預設對映支援。
- 當配置自訂對映時,如果您試圖使用 SOAP 執行時期的序列化常式或解除序列化常式類別(如 org.apache.soap.encoding.soapenc 套件中的類別), 且收到「無法從這個專案載入選取的序列化常式/解除序列化常式類別」的錯誤訊息,這時 soap.jar 很可能不在您的 Web 專案建置路徑中。 如果要更正這個問題,請取消精靈,利用「Web 專案內容」對話框來將 WS_installdir\wstools\eclipse\plugins\com.ibm.etools.webservice\runtime\soap.jar 新增至 Web 專案的建置路徑中,再重試 Web 服務精靈。
- 不支援巢狀複式類型的自訂對映。 雖然巢狀類型會出現在精靈的對映頁面中,但這些類型的自訂對映會被忽略。
- 當從介面含有抽象 Java 類型的 Java 類別建立 Web 服務時,「Web 服務 Java 至 XML 對映」頁面可能會不正確地將抽象類型的解除序列化常式欄位設定為 org.apache.soap.encoding.soapenc.BeanSerializer。 在執行時期,這會失敗,因為 BeanSerializer 類別中的解除序列化常式程式碼無法建立抽象類型的實例。 如果要避免這個情況,必要的話,請選取「自訂對映」選項,將解除序列化常式欄位改成為了將抽象類型解除序列化而撰寫的類別名稱。
- Web 服務工具目前不支援從含有巢狀內部類別(就是定義在最上層類別內的內部類別)的 Java Bean 建立 Web 服務。 如果要解決這個問題,您應該將內部類別移至個別 Java 檔的最上層類別。
- 當從 Java Bean 建立 Web 服務,且這個 Java Bean 使用含有 Vector、Hashtable 或 Map 類型之內容的其他 Java Bean 時,會從名稱空間 "http://xml.apache.org/xml-soap" 中,利用含有 "Vector" 和 "Map" 類型的 complexTypes 來產生 XSD。 由於這個名稱空間目前沒有任何綱目,因此,XSD 驗證器會產生如下錯誤和警告:
這些錯誤和警告不會干擾 Web 服務精靈正確處理 WSDL 和 XSD 的程序。 "Map" 和 "Vector" 類型會正確對映至它們的 Java 對等項。 請注意,其他供應商在處理含有這些類型的 WSDL 或 XSD 時,可能會有困難,因為 http://xml.apache.org/xml-soap 不是 WSDL 1.1 或 SOAP 1.1 規格所識別的名稱空間。 如果要改進交互作業能力,請考慮將 Java 集合類別改寫成陣列和 Bean,再從配接器建置 Web 服務。
- 錯誤 src-resolve:無法將 'xsd2:Vector' 名稱解析成類型定義元件。
- 警告 src-import.0:無法讀取匯入的綱目文件 'null'。
- 從 WSDL 文件產生 Java 成品
- 這個支援僅限於每一 input 或 output 元素有一 part。 它不支援一則輸入或輸出訊息中有多個邏輯 part。 系統會處理第一個這類 part,其餘的則會被忽略。
- 當從使用 xsd (http://www.w3.org/2001/XMLSchema) 名稱空間中的 base64Binary 類型之 WSDL 產生 Web 服務 Skeleton 或 Proxy 時, Web 服務執行時期實際上會用 soapenc (http://schemas.xmlsoap.org/soap/encoding/) 名稱空間中的 xsi:type base64。 一般而言,這兩個類型可以自由互換。 不過,訊息和綱目的類型差異可能會使某些 SOAP 通訊協定執行時期拒絕訊息。 如果發生這個情況,您可以自行撰寫類似 Apache SOAP 的 Base64Serializer 的序列化常式,但這會撰寫 xsd:base64binary,而不是 soapenc:base64。
- 如果 Java Bean Skeleton 是從包含不是有效的 Java 識別碼之作業和組件名稱的 WSDL 文件建立的,它們就不會編譯。WSDL 作業和組件名稱必須是有效的 Java 識別碼,才能順利建立 Java Bean Skeleton。
- 依預設,當產生 WSDL 時,Web 服務精靈會使用 "http" URI,不過,其他工具所產生的某些 WSDL 文件可能會偶而使用所用架構不是 "http"(如 "urn")的 Web 服務、SOAP 動作或目標名稱空間 URI。 當從含有非 http URI 的 WSDL 產生 Proxy 或 Skeleton 時,Web 服務精靈可能會將 URI 對映至 Java 套件 "com.example",而不是對映至更有意義的套件。 在某些情況下,Web 服務精靈可能會無法完整地處理這類 URI,且會產生「IWAB0234E 發生內部錯誤。」的錯誤
- 當從 WSDL 產生 Java Proxy 和 Java Skeleton 時,這時您可以選擇將 XSD 內部類型 boolean、byte、short、int、long、float 和 double 對映至 "java.lang" Wrapper 類型(如 java.lang.Integer),而不是對映至 Java 初始類型(如 int)。 依預設,Web 服務精靈會對映至 Java 初始類型。 如果要另行將精靈對映至 "java.lang" Wrapper 類別,請開啟「Windows -> 喜好設定 -> Web 服務 -> 產生程式碼」,再勾選「將簡式 XML 資料類型對映至 java.lang Wrapper 類別」。
- 當從 Java Bean 或 EJB 建立 Web 服務而從 Java 類型至 XSD 類型的自訂對映時,Bean 類別欄位會自動設為 Java 類型的完整名稱,無法編輯。 當自訂對映 Java 陣列時,Bean 類別名稱會採用陣列形式(如 "java.lang.String[]"),且會以相同形式產生在 ".isd" 和 "dds.xml" 部署描述子檔案中。 SOAP 執行時期無法正確處理這個形式的類別名稱,會產生類似下列錯誤:
SOAP 服務 http://tempuri.org/webservice.AddressBook 發生部署錯誤:類別名稱 java.lang.String[] 無法解析:java.lang.String[]
因此,您無法在伺服器端自訂對映 Java 陣列的序列化常式。 局部的暫行解決方法是將自訂對映的 Serializer 類別欄位保留空白。 這會抑制在部署描述子中產生陣列類別名稱,讓服務能夠運作。 請注意,Deserializer 類別和自訂對映解除序列化常式的能力不會受到這個問題和暫行解決方法的影響。
- 執行時期注意事項
- 如果您選取「啟用元件型對映」這個 Web 服務產生程式碼喜好設定,且您選擇要部署在 WebSphere Application Server 第 4 版中,ISD 檔和 dds.xml 中可能會出現下列項目:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:some-name"
xml2JavaClassName="some-serializer"/>XML 編輯器可能會設定下列錯誤的旗標:
"xmlns:x" 屬性值無效。附加字首的名稱空間連結不能是空的。
這對 WebSphere Application Server 第 4 版沒有影響。 不過,請勿嘗試將這個 dds.xml 部署在使用 Xerces 2.x (XML4J 4.x) 或更新版本(如 WebSphere Application Server 第 5 版)的其他伺服器中。 否則,當伺服器載入 dds.xml 檔時,會出現類似的 Xerces 剖析錯誤。 您應該透過 Web 服務實務和選取正確的伺服器類型來重新產生 dds.xml。 這會產生這個伺服器類型的正確 dds.xml。
另外,當試圖部署這個 ISD 檔的 Web 服務時,也會出現類似的 Xerces 剖析錯誤。 解決方案是將檔案手動編輯成下列格式:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
qname="some-name"
xml2JavaClassName="some-serializer"/>
- 當呼叫從 Java Bean 或 EJB 建立的 Web 服務時,如果出現含 targetException 的 SOAPException,比方說:
"java.lang.IllegalArgumentException: 無法建立實例 ..."
問題可能是顯現成 Web 服務的方法含所包含 Java Bean 沒有作為參數和/或傳回類型的公開預設建構子。 必須有公開預設建構子,SOAP 執行時期才能將物件建構成解除序列化程序的一部分。- 目前部署在 Web 專案的安全檔 cl-ver-config.xml 和 sv-ver-config.xml 是 WebSphere 4.0 版的檔案,不完全符合 DTD。 但這兩個檔案能在 WebSphere 4.0 版和第 5.0 版中運作,不過,會產生驗證錯誤,指出必須宣告 "xmlns:ds" 或 "xmlns:SOAP-SEC"。
- 如果在編輯器中開啟伺服器配置,Web 服務精靈可能會因 Web 服務 Web 專案沒有新增至伺服器配置中而無法啟動伺服器。 關閉伺服器配置編輯器就可以解決這個問題。
- ISD Web 服務
- 在建立 Java 或 EJB Web 服務時填入自訂對映之後,除了「XSD 位置 URL」以外的自訂對映資訊都會儲存在 ISD 檔中。當您從該 ISD 檔建立 Web 服務時,會擷取這項資訊。因此,當您從 ISD 檔建立 Web 服務時,請於精靈的「Web 服務 Java 至 XML 對映」頁面中以手動方式填入 XSD 位置 URL。
如果您從 Java Bean 或 EJB 建立 Web 服務,且選擇 IBM SOAP 作為服務執行時期,選擇 Apache Axis 1.0 作為用戶端執行時期,可能會出現下列錯誤:
找不到 WSDL
如果要避免這個問題,請先建立 Web 服務,不要選擇產生 Proxy。 之後,再從產生的 WSDL 檔建立 Web 服務用戶端。
當您執行 Web 服務用戶端精靈時,如果使用者按一下「用戶端環境配置」頁面中的「完成」按鈕,會出現下列錯誤:
無法解析 "null"
暫行解決方法是按這一頁和下一頁的「下一步」,再按「完成」。
在「建立、測試和驗證 WS-I 標準 Web 服務提要」和「從 WSDL 檔提要建立 Web 服務」中, 如果您使用 wsad_install/wstools/eclipse/plugins/com.ibm.etools.cs.wsdl.content_5.1/examples 中的 HelloService.wsdl 檔, 請依照下列方式,根據不同的執行時期來修改服務埠位置:
IBM Soap:
location="http://localhost:9080/HelloWorldSample/servlet/rpcrouter"
Apache Axis 或 WebSphere 5.0.2 執行時期
location="http://localhost:9080/HelloWorldSample/services/Hello_Port"
如果您匯入自己的 wsdl 檔,請確定已依照上述說明,根據所選執行時期來適當設定位置。
(C) Copyright IBM Corporation 2000, 2003. All Rights Reserved.