這個檔案含有足以永久和暫時影響 Web 服務的限制的綜合性清單。
支援的軟體和規格
Web 服務瀏覽器支援下列 Web 瀏覽器:
- Microsoft® Internet Explorer 6.0 或更新的版本
- Mozilla 1.2.1 或更新的版本
如果您在工作台之外,利用 Mozilla 來啟動 WORF 測試環境,建議您至少使用 Mozilla 1.3.1 版。
版本更早的 Mozilla 瀏覽器無法正確顯示呼叫 Web 服務的輸出和說明檔。
使用 Web 服務精靈所遇到的問題
- 如果您在建立 Web 服務時指定空 EAR(不含模組的 EAR),可能會產生異常狀況或錯誤。建議您在利用精靈建立 Web 服務時利用您所要選取的 EAR 來建立一或多個模組,或者,建議您讓精靈來為您建立該 EAR。
- 如果您選擇針對您的 Web 服務來自訂名稱空間至套件或套件至名稱空間的對映,然後在可讓您自訂該對映的精靈之頁面上按一下完成,則無法使用您的自訂對映。只有當您在該特定頁面上按一下完成時,才會發生這個錯誤。如果您按下一步來繼續進行精靈的下一個頁面,然後按一下完成,即可處理您的自訂對映。
- 如果您在使用任何 Web 服務精靈的過程中按一下取消,精靈可能會在工作區中產生檔案,並在 J2EE 部署描述子中產生 Web 服務項目。當您關閉精靈之後,您應該以手動方式刪除這些檔案。
使用 WebSphere® 執行時期環境所遇到的問題
- IBM® WebSphere Web 服務執行時期環境不能處理使用預設 Java™ 套件的 Java Bean。其結果是,伺服器啟動時將擲出異常狀況,以及 Web 服務在在執行時期無法運作。
- 當您利用 WebSphere 執行時期環境,從 Java Bean 或 EJB 建立 Web 服務時,請勿使用套件名稱以 Java 初始類型(如:int、float、double)開頭的複式類型 Bean。
否則,產生的 WSDL 檔案的綱目可能會不正確地將複式類型視為 Java 初始類型。
- 您不能混合 RPC 樣式訊息的 SOAP 編碼和文字編碼。不過,這就是 DADX 產生的 WSDL 文件的種類。因此,利用 RPC 對 DADX Web 服務所產生的 WSDL 檔,
無法用來適當地建立 WebSphere 用戶端。如果要排除這個問題,請使用 DOC 樣式來建立 DADX Web 服務。WebSphere 執行時期環境可以從這個 WSDL 來建立用戶端,而不會發生問題。如果要使用 DOC 樣式 DADX Web 服務,請將 DADX 群組的 group.properties 檔中之 useDocumentStyle 參數設成 true。
您也可以利用 DADX 群組配置精靈來完成這項作業。
- 當您從
Java Bean
或 EJB 建立 Web 服務時,如果 Java 或 EJB 的實作參照了位於不同套件的 Java 類別,
則產生的 WSDL(明確地說,是 WSDL 檔的 <schema> 區段)可能會缺少 <import> 陳述式。附註:這只會影響目標為 WebSphere Application Server 5.x 版的 Web 服務 - 它不會影響使用 WebSphere Application Server 第 6 版的 Web 服務。
- 當從 WSDL 檔案產生
Java 或 EJB Skeleton 時,如果您使用的 WSDL 檔案含有不具有標準 JAX-RPC 對映的 XML 類型(例如,
<choice> 群組),產生的 Skeleton 實作不會正確建立對應的 javax.xml.soap.SOAPElement。
所得結果是,Web 服務可能傳回形態異常的 SOAP 回應。
下列步驟可以修正這個問題:
- 開啟實作類別。
- 跳至建立 SOAPElement 實例的行(看起來應該類似如下:createSOAPElement("http://schems.ibm.com/wswrapper",">D")
- 移除 > 字元。
- 儲存後重新啟動 EAR 專案。
附註:這只會影響目標為 WebSphere Application Server 5.x 版的 Web 服務 - 它不會影響使用 WebSphere Application Server 第 6 版的 Web 服務。
- 在 Web 服務部署到 WebSphere 執行時期環境之後,如果您變更 Web 服務使用的其中一個類別,這些變更可能不會立即更新,且伺服器主控台中可能會出現 ClassCastException。
如果發生這種情況,請在「伺服器」視圖內的伺服器上按一下滑鼠右鍵,選取重新啟動專案,
接著選取其專案含有已變更之類別的 EAR。附註:這只會影響目標為 WebSphere Application Server 5.x 版的 Web 服務 - 它不會影響使用 WebSphere Application Server 第 6 版的 Web 服務。
- 如果您是使用 WebSphere 執行時期環境來建立 Web 服務用戶端,
該用戶端的部署描述子並無法用於 Universal Test Client 中。因此,用戶端 Proxy 的 JNDI 查閱無法在 Universal Test Client 中運作。如果要使用 UTC,您必須建構並使用 Locator 類別;或使用產生的 Proxy 類別,並將 useJNDI 設為 false(如此會在內部建構及使用 Locator)。請注意,如果未處理用戶端的部署描述子,則某些 Meta 資料(如 WS 安全和處理常式)將無法使用。安全性是這種用戶端配置的範例之一。請使用範例 JSP 而非 Universal Test Client 來測試 Proxy。
- 在 RPC/literal 中,不支援使用陣列:當建立 RPC/literal 服務時,方法簽章不能含有陣列。如果含有陣列,就無法利用產生的用戶端碼來呼叫服務。這個問題目前沒有暫行解決方法。可能的話,請嘗試使用 document/literal 或 RPC/encoded。
附註:這只會影響目標為 WebSphere Application Server 5.x 版的 Web 服務 - 它不會影響使用 WebSphere Application Server 第 6 版的 Web 服務。
- WSDL 匯入:WSDL import 陳述式只能使用絕對 URL,或相同目錄中的相對 URL。例如,不支援使用下列形式的相對匯入:<import namespace="http://someNamespace/" location="../someFile.wsdl"/>
- 當從 WSDL 檔產生 Skeleton EJB 時,如果 WSDL 檔利用 SOAP over JMS 作為傳輸,請確定路由器專案是 EJB 專案,不是 Web 專案。否則,當您執行建立 Web 服務精靈時,會出現錯誤訊息。
- 當產生 EJB Skeleton 時,如果在「服務部署配置」頁面中選取 J2EE 1.2 層次 Web 專案作為路由器專案,
請先確定已選取 Web 專案的相同 EAR 所包含的現有 1.1 層次 EJB 專案,再繼續執行精靈。
如果您要依賴精靈來自動建立 EJB 專案,精靈會建立 2.0 層次 EJB 專案,這與 1.2 層次 EAR 和 1.2 層次 Web 專案不相容。
- 當從 WSDL 檔產生 EJB Skeleton,且這個 WSDL 檔使用不含任何預設 JAX-RPC 對映的類型時,如果使用者試圖呼叫 Web 服務,就會傳回執行時期環境異常狀況。
問題在於執行時期在將 javax.xml.soap.SOAPElement 取消序列化時,發生困難。
java.xml.soap.SOAPElement 是在類型沒有任何相關聯的對映時使用的,因此,會作為文件片段來對映。
附註:這只會影響目標為 WebSphere Application Server 5.x 版的 Web 服務 - 它不會影響使用 WebSphere Application Server 第 6 版的 Web 服務。
- 當從 WSDL 檔產生 EJB Skeleton,且這個 WSDL 檔有帶著 inout 參數的作業時,當產生 EJB 的部署程式碼時,會出現錯誤。
問題在於 inout 參數是對映至 javax.xml.rpc.holders.Holder 類別。由於 java.xml.rpc.holders.Holder 不實作 java.io.Serializable,因此,它們會造成 EJB 部署錯誤。附註:這只會影響目標為 WebSphere Application Server 5.x 版的 Web 服務 - 它不會影響使用 WebSphere Application Server 第 6 版的 Web 服務。
使用 Apache Axis 1.0 執行時期環境時發生的問題
使用 IBM SOAP 執行時期環境時的永久限制
IBM SOAP 執行時期環境主要應該用在舊版相容性。我們強力建議您在所有的正式作業用途上,透過 IBM WebSphere 執行時期環境來使用 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 元素及含文字 XML 編碼的 Bean 的預設對映。
- 當配置自訂對映時,如果您試圖使用 SOAP 執行時期環境的序列化常式或解除序列化常式類別(也就是 org.apache.soap.encoding.soapenc 套件中的類別),
且收到「無法從這個專案載入選取的序列化常式/解除序列化常式類別」的錯誤訊息,這時 soap.jar 很可能不在您的 Web 專案建置路徑中。如果要更正這個問題,請取消精靈,利用「Web 專案內容」對話框來將 WS_installdir\wstools\eclipse\plugins\com.ibm.etools.webservice\run-time environment\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 驗證器會產生如下錯誤和警告:
- 錯誤 src-resolve:無法將 'xsd2:Vector' 名稱解析成類型定義元件。
- 警告 src-import.0:無法讀取匯入的綱目文件 'null'。
這些錯誤和警告不會干擾 Web 服務精靈正確處理 WSDL 和 XSD 的程序。"Map" 和 "Vector" 類型會正確對映至它們的 Java 對等項。請注意,其他供應商在處理含有這些類型的 WSDL 或 XSD 時,可能會有困難,因為 http://xml.apache.org/xml-soap 不是 WSDL 1.1 或 SOAP 1.1 規格所識別的名稱空間。
如果要改進交互作業能力,請考慮將 Java 集合類別改寫成陣列和 Bean,再從配接器建置 Web 服務。
- 從 WSDL 文件產生 Java artifact
- 這個支援僅限於每一 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 ID 之作業和組件名稱的 WSDL 文件建立的,它們就不會編譯。WSDL 作業和組件名稱必須是有效的 Java ID,才能順利建立 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 類別和自訂對映解除序列化常式的能力不會受到這個問題和暫行解決方法的影響。
XSD Bean 產生者有一個限制。它不能處理重複命名的元素。比方說,如果綱目的格式如下:
<xsd:schema>
<xsd:choice>
<xsd:element name="aElem" type="xsd:string">
<xsd:sequence>
<xsd:element name="bElem" type="xsd:string">
<xsd:element name="aElem" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:choice>
</xsd:schema>
接著,XSD Bean 產生作業會建立含有多個 setter(且其方法名稱都相同)的 Bean。如果序列中 aElem 的類型變更,
您會看到類似的問題,也就是有兩個 getter 各自傳回不同的類型,但具有相同的引數。
- 執行時期注意事項
- 如果您選取「啟用元素型對映」這個 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 版和 WebSphere 5.0 版中運作,不過,會產生驗證錯誤,指出必須宣告 "xmlns:ds" 或 "xmlns:SOAP-SEC"。
-
如果您建立一個使用同一個套件中二個不同複式類型的 Bean,當您從這個 Bean 建立 SOAP 型的 Web 服務時,將對每一個複式類型建立一個 XSD 檔案並給予相同的名稱空間。
這會導致同時在作業清單和 Web 服務瀏覽器驗證錯誤。
- ISD Web 服務
- 在建立 Java 或 EJB Web 服務時填入自訂對映之後,除了「XSD 位置 URL」以外的自訂對映資訊都會儲存在 ISD 檔中。當您從該 ISD 檔建立 Web 服務時,會擷取這項資訊。因此,當您從 ISD 檔建立 Web 服務時,請於精靈的「Web 服務 Java 至 XML 對映」頁面中以手動方式填入 XSD 位置 URL。
建立 Web 服務用戶端的限制
當您將 Web 服務用戶端部署到 EJB 專案時,Proxy 配置頁面可能會包括一個組合框,讓您選取要設為這個 Web 服務用戶端範圍的 EJB。
這是 JSR-109 所定義的一項需求,component-scoped-refs 元素的 component-name 必須符合模組中之 EJB 的 ejb-name。
當專案中至少有一個 EJB 時,不會發生任何錯誤。
不過,如果專案中沒有任何 EJB,Proxy 配置頁面中的組合框是可編輯的,預設值等於 WSDL 中的服務名稱加上 "EJB" 字尾。
另外,用戶端精靈也會顯示一個警告對話框,說明部署因 Web 服務用戶端的範圍未設為現有的 EJB 而無法完成。
使用者可以利用 webservicesclient.xml 中所用的 component-name 的相同名稱,建立一個 EJB 來修正這個問題。
不過,如果您選擇取消精靈輸出來捨棄建立用戶端,精靈就不會從 webservicesclient.xml 中移除不完整的 component-scoped-refs。
在重新部署之前,您應該手動移除不完整的 component-scoped-refs。
當產生 URL Web 服務或任何只含有 HTTP GET 和 POST 連結的 WSDL 的 Web 服務用戶端時,請在用戶端上使用 IBM SOAP 執行時期環境。
只要試圖使用 Axis 或 IBM WebSphere 執行時期環境,都會產生不完整的程式碼或內部錯誤(IWAB0234E 發生內部錯誤)。
當從 URL 產生 Web 服務時,產生的 WSDL 會有 HTTP GET 和 HTTP POST 連結,但沒有 SOAP 連結。Axis 和 IBM WebSphere 執行時期環境不支援 WSDL 中的 HTTP GET 和 POST 連結。只有 IBM SOAP 執行時期環境支援 HTTP 連結。如果需要 WSDL 連結的詳細資訊,請造訪 http://www.w3c.org/TR/wsdl
Web 服務瀏覽器問題
- 當 Web 服務瀏覽器載入使用多重行內綱目的 WSDL 檔時,系統會針對參照這些綱目的類型產生警告訊息。
警告訊息類似於:未解析 <qualified_type_name> 類型的參照。 這些是警告而非錯誤,
因此您可以放心忽略。
- 當您以「私密 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)
at FindBusWithQualifier.main(FindBusWithQualifier.java:35)
- SAP UDDI Business Registry 傳回的發佈者主張報告沒有包含任何狀態。
因此,Web 服務瀏覽器的「管理發佈者主張套表」中,SAP 傳回的報告的發佈者主張狀態直欄會空白。
只有 SAP UDDI Business Registry 有這個問題。
- 當試圖發佈商業、服務或 XMethods UDDI 登錄的服務介面時,會出現關於「SSL 訊息交換失敗」的錯誤訊息。這是 IBM 和 XMethods 正在探索的已知問題。
Web 服務瀏覽器無法建立與 SAP UDDI(測試)登錄、NTT 通訊登錄和 XMethods 登錄的安全 SSL 連線。
因此,任何需要使用者認證的作業都會失敗,且會出現下列訊息(探索之類不需要認證的作業會繼續運作):
登錄 |
錯誤 |
NTT 通訊登錄: |
NTT 通訊登錄:
IWAB0135E 發生非預期的錯誤。UDDIWSDLProxyException
取得 [userid: <userid> ] 的鑑別記號時,發生錯誤
巢狀異常狀況如下:org.uddi4j.transport.TransportException: 開啟 Socket 時發生錯誤:javax.net.ssl.SSLHandshakeException: 憑證過期
|
XMethods 登錄: |
IWAB0135E 發生非預期的錯誤。
UDDIWSDLProxyException
取得 [userid: <userid> ] 的鑑別記號時,發生錯誤
巢狀異常狀況如下:
org.uddi4j.transport.TransportException: 開啟 Socket 時發生錯誤:javax.net.ssl.SSLHandshakeException: 訊息交換失敗。
|
DADX Web 服務
當從 DADX 檔產生 WSDL 文件時,適用下列限制:
- 系統不支援產生具有多個輸出參數之 DADX 呼叫作業的 Java Proxy。
- 當您建立 DADX Web 服務時,有時會出現「IWAB0177E 從 DADX 檔產生 WSDL 時發生錯誤」訊息。 在大部分情況下,這則訊息表示一些資料庫相關的問題,且您應查閱伺服器主控台日誌以取得問題的詳細資料。同時,也請檢查下列項目:
- DAD (*.dad) 檔需要位於 DADX 群組目錄中。這是 WORF 執行時期環境找出 DAD 檔的方法。
- 如果您嘗試從「RDB 至 XML 對映」檔 (.rmx) 產生 DAD 檔,請確定該 DAD 檔和 DADX 檔位於相同的資料夾中。
在 DADX 群組中,您可以指定一個 JDBC Net Driver。
如果是 DB2®,Net Driver 類別是 COM.ibm.db2.jdbc.net.DB2Driver。
如果是舊版 DB2,就必須在伺服器類別路徑中加入 db2java.zip,這個 zip 檔含有驅動程式。不過,當使用 DB2 8.1 版和更新的版本時,伺服器類別路徑也必須加入 db2jcc.jar 檔。這個檔案通常位在 db2java.zip 檔的相同目錄中。請確定機器上的 DB2 用戶端層次和所連接的 DB2 伺服器的修正套件層次相同。
DADX Web 服務中的多重輸出:我們的工具通常不支援 Web 服務的多重輸出。
不過,在 DADX Web 服務的情況下,如果使用文件樣式群組內容設定為 true,就可以有多重輸出。在這個情況下,當文件樣式是 true 時,就會將多重輸出組合成單一 XML 文件。
DADX 產生支援:雖然「產生 DADX」精靈列出使用者定義的功能,但目前不支援從使用者定義的功能產生 DADX。
目前只支援從 DAD 檔、儲存程序和 SQL 陳述式來產生 DADX。
選取 UDF 會產生簡式 DADX Skeleton 檔。
利用資料來源資訊設定 DADX 群組如果要使用 WebSphere Application Server 來控管 DADX Web 服務,且 DADX 群組被配置成透過資料來源存取資料庫,則 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>
搭配 AXIS 執行時期環境使用 Tomcat 伺服器
如果要利用安裝在 Linux 上的 Axis 來使用含有 Web 應用程式的 Tomcat 4.1 和 4.0 伺服器,您可能會在 Web 服務精靈中遇到錯誤。如果伺服器已啟動且需要在 Web 服務精靈的某處重新啟動,精靈可能會當掉,因為 Axis 會使 Tomcat 伺服器無法停止。
您可以先停止伺服器再啟動 Web 服務精靈,並在產生測試 Web 服務應用程式的精靈頁面中取消選取「在伺服器中執行」,來暫時解決這個問題。
使用 Web 服務指令行的問題
- 含空格的目錄:請避免從目錄名稱含有空格的目錄中執行 WSDL2WebService。否則,不會編譯產生的 compile.bat(或 Linux 中的 compile.sh)。
- 在執行 EJB2WebService 來建立 EJB Web 服務之後,如果使用 splitWsdl 選項的話,無法在 「單元測試環境」或遠端伺服器中執行產生的 EAR。暫行解決方法是將 EJB 專案 META-INF 之下的整個 WSDL 目錄複製到路由器 Web 專案的 WEB-INF 中。
- 在利用含有本端匯入的 WSDL 執行 WSDL2WebService 來建立 EJB Web 服務之後,無法在「單元測試環境」或遠端伺服器中執行產生的 EAR。暫行解決方法是將 EJB 專案 META-INF 之下的整個 WSDL 目錄複製到路由器 Web 專案的 WEB-INF 中。
- 如果您利用 J2EE 1.4 將內含指令行工具所產生之 EJB 用戶端的 EAR 匯入工作區中,您會看到編譯錯誤。如果要修正這些錯誤,
請用滑鼠右鍵按一下 EJB 專案,然後選取內容。
前往 Java 建置路徑,然後選取程式庫標籤。
移除 EJBClientProject/imported_classes(類別資料夾)項目。新增類別資料夾 EJBServiceClient/imported_classes/Meta-inf/classess。
按一下確定。
- 如果您利用 J2EE 1.4 將內含指令行工具所產生之「應用程式用戶端」的 EAR 匯入工作區中,則在執行該用戶端時會發生 ClassNotFoundException 錯誤。如果要修正這些錯誤,
請用滑鼠右鍵按一下「應用程式用戶端」專案,然後選取內容。
前往 Java 建置路徑,然後選取程式庫標籤。
移除 ApplicationClientProject/imported_classes(類別資料夾)項目。新增類別資料夾 ApplicationClientProject/imported_classes/Meta-Inf/classess。
按一下確定。
匯入含 HTTP 基本鑑別的 WSDL 檔
當從有相關匯入項目且受到 HTTP 基本鑑別保護的 WSDL 檔產生 Skeleton 或用戶端時,使用者會見到一則無法解析 WSDL 檔的錯誤訊息,即使輸入的使用者 ID 和密碼正確也是如此。
問題在於這個使用者 ID 和密碼只能用來擷取原始 WSDL 檔,不能擷取它匯入的檔案。
如果要解決這個問題,使用者可以先將 WSDL 檔和所有匯入的檔案下載在工作台中,再從下載的 WSDL 檔產生 Skeleton 或用戶端。
看不到資源喜好設定
當使用 Apache Axis 1.0 執行時期環境時,Axis 發射器每次都會重新產生所有伺服器/用戶端 Java 檔、deploy.wsdd 和 undeploy.wsdd。
服務產生實務的 WSDL2Java 只有在 Skeleton 實作檔不存在時,才會產生 Skeleton 實作檔。如果這個實作已經存在,不會改寫它。
使用團隊開發環境時遇到的問題
在 ClearCase
® 團隊環境下共用 Web 專案時,如果所選的 Web 服務執行時期環境是 IBM WebSphere 或 Apache Axis 1.0,
則建立 Web 服務和 Web 服務用戶端時,系統會開啟數個
新增至程式碼控制對話框。要抑制這些對話框,請執行下列動作:
- 從「視窗」功能表,選取「喜好設定」。
- 展開左邊窗格中的團隊。選取 ClearCase。
- 在右邊窗格中,將標籤為「當新增新資源時」的下拉值變更為「自動新增至程式碼控制」。
- 按一下確定。
- 進至「」。
- 在開啟的對話框中,選取一個預設的活動。按一下確定。
Web 服務提要
在「建立、測試和驗證符合 WS-I 標準的 Web 服務提要」以及「從 WSDL 檔建立 Web 服務提要」中,如果您是使用 wsad_install/wstools/eclipse/plugins/com.ibm.etools.cs.wsdl.content_ver/examples 中的 HelloService.wsdl 檔,請根據不同的執行時期環境修改服務埠位置,如下所示:
IBM SOAP:
location="http://localhost:9080/HelloWorldSample/servlet/rpcrouter"
如果是 Apache Axis 或 WebSphere 執行時期環境
location="http://localhost:9080/HelloWorldSample/services/Hello_Port"
如果您要匯入自己的 wsdl 檔,請務必依照上述說明,根據所選的執行時期環境來適當地設定位置。
供應鏈管理範例無法執行
- 在供應鏈管理範例中,如果您需要變更預設埠 9080,您必須修改 SCM-Sample 專案中的 config.jsp 檔。這需要重新編譯。由於建置路徑遺漏 webservices.jar,您必須在作業清單中找出 2 個編譯錯誤。
- 這個編譯單元間接參照遺漏的 javax.xml.rpc.ServiceException 類型
- 無法解析 import javax.xml.rpc
如果要將 webservices.jar 新增至 SCM-Sample 的建置路徑中,請執行下列動作:
移至「SCM-sample ->內容」,選取 Java 建置路徑,按一下程式庫標籤,按一下新增變數,選取 WAS_50_PLUGINDIR,按一下延伸,
移至 lib,選取 webservices.jar,按一下確定,再按一下確定。