引言 首先,下載 HelloWorldApp.zip ,將其解壓縮,得到 HelloWorld.ear ,然后單擊右側的步驟 1,開始以下六個步驟。
圖 1.在 HTTP 和 JMS 上使用 SOAP 訪問 EJB Web 服務

如果想繞過創建和修改 Web 服務這一步,可以下載HelloWorldApp.zip (如果您還沒有下載的話)并解壓縮得到 HelloWorldSolution.ear 。然后按照下面的步驟來測試這個方案:
- 將
HelloWorldSolution.ear 文件導入到 Application Developer V5.1.1 工作區。
- 選擇 File => Import。
- 選擇 EAR File 然后單擊 Next。
- 在 Enterprise Application Import 窗口,定位到保存 EAR 文件的位置。
- 選擇 HelloWorldSolution.ear,然后單擊 Open。
- 設置 Project Name 為 HelloWorld。
- 單擊 Finish。
- 將
webservices.jar 文件添加到 HelloWorldWebRouter 的構建路徑中。
- 在 J2EE Perspective's Project Navigator 視圖下,右鍵單擊 HelloWorldWebRouter 模塊,選擇 Properties。
- 在左側欄中選擇 Java Build Path。
- 在左側欄中選擇 Libraries 選項卡。
- 單擊 Add Variable。
- 向下滾動,選擇 WAS_50_PLUGINDIR 變量然后單擊 Extend...。
- 選擇 file lib => webservices.jar 然后單擊 OK。
- 單擊 OK。
- 將
webservices.jar 文件添加到 HelloWorldJMSRouter 的構建路徑中。
- 在 J2EE Perspective's Project Navigator 視圖下,右鍵單擊 HelloWorldWebRouter 模塊,選擇 Properties。
- 在左側欄中選擇 Java Build Path。
- 在左側欄中選擇 Libraries 選項卡。
- 單擊 Add Variable。
- 向下滾動,選擇 WAS_50_PLUGINDIR 變量然后單擊 Extend...。
- 選擇 file lib => webservices.jar 然后單擊 OK。
- 單擊 OK。
- 為通過 JMS 傳輸 SOAP 配置服務器(參閱步驟 2.為通過 JMS 傳輸 SOAP 配置 WebSphere Application Server 測試環境)。
- 測試 Web 服務(參閱步驟 6.為兩種傳輸方法測試 Web 服務客戶機)。
步驟 1.導入 HelloWorld 企業應用程序 HelloWorld Enterprise Application Archive(EAR)這個文件包含一個 EJB 模塊——HelloWorldEJB。這個模塊里有一個無狀態會話 bean——HelloWordSSB。該 bean 有一個 getMessage() 方法,調用這個方法時會返回一個字符串“Hello World”。下載 HelloWorld.ear 按照下面步驟將 EAR 文件導入到 Application Developer 工作區。
- 將
HelloWorld.ear 文件導入到 Application Developer 工作區。
- 選擇 File => Import。
- 選擇 EAR File,然后單擊 Next。
- 在 Enterprise Application Import 窗口,定位到保存 EAR 文件的位置,然后選擇
HelloWorld.ear 文件。
- 設置 Project Name 為 HelloWorld(缺省值)。
- 單擊 Finish。
步驟 2.為通過 JMS 傳輸 SOAP 配置 WebSphere Application Server 測試環境 要為 Web 服務實現提供 SOAP/JMS 支持,必須創建所需的 JMS 資源(隊列(Queue)、隊列連接工廠(Queue Connection Factories)和偵聽器端口(Listener Ports))來處理和響應傳入的消息。下面的步驟介紹了如何為實現 HelloWorld Web 服務配置所需的 JMS 資源。
- 創建新的 Server Configuration。
- 打開 Server Perspective 和 TestServer settings 窗口。
- 選擇 Window => Open Perspective => Other。
- 選擇 Server 然后單擊 OK。
- 在 Server Perspective's Server Configuration 視圖(在屏幕的左下方)中,展開 Servers 并雙擊 TestServer。
- 在 Server Settings 窗口中,選擇 JMS 選項卡以打開 WebSphere JMS Provider Options。
- 創建一個隊列:
- 在 Server Settings => JMS Server Properties 下單擊 Add。
- 在彈出的 Add Queue Name 窗口中,設置 Name 為“HWInboundQ”。
- 單擊 OK。
- 在 Server Settings => JMS Server Properties => JMS Provider 下選中 MQ Simulator for Java Developers 單選框。
- 為入站隊列創建一個隊列連接工廠(QCF)。
- 為出站隊列創建一個出站 QCF。(為通過 JMS 傳輸 SOAP 發送一個響應消息,這個條目是必需的而且一定要如下所示。)
- 為傳入消息創建一個 JMS Destination。
- 在 Server Settings 窗口中,選擇 EJB 選項卡查看其他 EJB 容器設置中的偵聽器端口。
- 添加一個 JMS 偵聽器端口。
- 在 Server Configuration 窗口中,選擇 Environment 選項卡查看 Environment Options。
- 將
urlprotocols.jar 文件添加到服務器的類路徑中。
- 保存對 Server Configuration 的修改然后關閉編輯器。
- 選擇 File => Save。
- 如果有提示,單擊 Yes 合并對服務器配置的修改。
- 關閉編輯器。
我們已經為 SOAP/JMS 成功配置了 WebSphere Application Server V5.1 測試環境。
步驟 3.為通過 JMS 傳輸 SOAP 創建一個無狀態會話 EJB Web 服務 在這一步里,我們使用 Application Developer 創建一個新的 EJB 模塊來將 SOAP/JMS 路由到無狀態會話 bean Web 服務的實現。然后使用工具創建 Web 服務實現本身。在步驟 4 中將為 SOAP/JMS 和 HTTP/JMS 修改 Web 服務實現。
Application Developer 在 EJB 模塊中創建消息驅動 Bean(MDB)。這個 EJB 模塊獨立于無狀態會話 bean Web 服務實現模塊。如果有必要,這個 MDB 會通過隊列來處理傳入消息、調用 Web 服務并發送響應消息。MDB 的創建是在 Application Developer 創建 Web 服務實現的過程中隱式地進行。但是,包含結果 MDB 的 EJB 模塊必須在為 SOAP/JMS 創建 Web 服務實現之前創建。
根據本教程的目的,我們將創建一個新的 EJB 模塊——HelloWorldJMSRouter,它將 SOAP/JMS 請求路由到 HelloWordSSB Web 服務實現。
- 在工作區中打開 J2EE Perspective。
- 創建 JMS Router Module。
- 在 Project Navigator 視圖中,右鍵單擊 HelloWorld Enterprise Application。
- 選擇 New => Other。
- 在新彈出窗口的左側欄中單擊 EJB。
- 在新彈出窗口的右側欄中單擊 EJB Project。
- 單擊 Next。
- 選擇 Create 2.0 EJB Project bullet (缺省地被選中)。
- 單擊 Next。
- 輸入“HelloWorldJMSRouter”作為 Project name。
- 單擊 Finish。
- 如果有提示,單擊 OK 修改服務器配置并向 Server Configuration 中添加 Router Module。
- 為 HelloWorld 無狀態會話 Bean 創建 EJB Web 服務。
- 在 Web services 窗口中:
- 在 Service Deployment Configuration 窗口中:
- 檢查 Server 是否被設置為 TestServer,如果還沒有,選擇 Edit。
- 選擇 Existing Servers => Test Server。
- 單擊 OK。
- 向下滾動 Router Project 然后選擇“HelloWorldJMSRouter”。
- 單擊 Next。
要點:如果使用的是 Application Developer V5.1 (為 WAS 5.0.2 開發的),它會在同一個 EJB 模塊中創建一個 MDB 作為無狀態會話 bean Web 服務實現。因此,不需要創建新的 EJB Project ,Router Project 會被設置為 HelloWordEJB。在 Application Developer V5.1 中啟用 SOAP/JMS 選項和創建 MDB 時必須這樣做,這個 MDB 可以通過 HelloWorldEJB Module 的隊列來處理傳入消息。
所得的服務部署配置條目如圖 9 所示。
Figure 9. Service deployment configuration - EJB Web service圖 9.服務部署配置 - EJB Web 服務

- 在 Web service EJB Selection 窗口中:
- 單擊 Browse EJB beans。
- 選擇無狀態 EJB Bean
HelloWorldSSB 。
- 單擊 OK。
- 輸入 JMS URI Properties,該屬性被用作 JMS 服務端點 URL。這些屬性的大部分會自動填充。
- 在 Web service Java Bean Identity 上:
- 單擊 Next 接受缺省設置。
- 在為 WS-I compliance 彈出的 Web 服務警告窗口中單擊 Details 以瀏覽關于啟用 JMS 的警告。
- 單擊 Ignore。(該警告是必然出現的。)
- 單擊 Finish。
步驟 4.a.修改 Web 服務部署描述符來為 Web 路由器模塊創建端口組件和綁定 在這一步,將為 SOAP/HTTP 傳輸訪問 HelloWorld Web 服務實現創建一個新的端口組件和綁定配置
- 在 J2EE Perspective Project Navigator 視圖 中:
- 展開 HelloWorldEJB => ejbmodule => META-INF。
- 雙擊 webservices.xml 打開 Web services Editor。
- 為便于瀏覽,雙擊 Web services Editor 選項卡使編輯器最大化。
- 在 Web services Editor 窗口中,選擇 Port Components 選項卡,查看 Port Component 的設置。在 Port Components 下,單擊 Add 創建一個新的缺省的“Port component”。
- 高亮顯示新創建的端口組件。
- 如果必要的話,向下滾動右側欄到 Port Component implementation details。
- 設置 Port Component Name 為“HelloWorld”。
- 對 WSDL Port 條目:
- 設置 Namespace URI 為“http://ejb.webservices.test.ibm.com”。
- 設置 Local part 為“HelloWorld”。
- 設置 Service endpoint interface 為
com.ibm.test.webservices.ejb.HelloWorldSSB 。
- 選中 EJB Link 單選框。
- 向下滾動然后選擇 HelloWorldSSB 作為 Service Implementation bean (缺省選中)。
所得的端口組件條目如圖 11 所示:
圖 11.Web 服務編輯器 - 端口組件。

- 在 Web services Editor 中,選擇 Bindings 選項卡以瀏覽 Web 服務綁定。
- 在 Web service Description Bindings 部分高亮顯示 HelloWorldSSBService。
- 如果有必要,在右側欄向下滾動到 Port Component Binding。
- 單擊 Add。
- 在 Port Component binding 對話框窗口中:
- 向下滾動選擇 HelloWorld 作為 PC Name Link。
- 向下滾動并設置 Session 為 Scope。
- 單擊 OK。
所得的端口組件綁定對話框條目如圖 12 所示:
圖 12.Web 服務編輯器 - 端口組件綁定對話框

- 保存所作的修改并關閉 Web services Editor。
- 選擇 File => Save。
- 關閉 Editor。
- 修改
ibm-webservices-bnd.xmi 文件中缺省的 pcBindings 配置信息。在 J2EE Perspective Project Navigator 視圖中:
- 展開 HelloWorldEJB => ejbmodule => META-INF。
- 雙擊 ibm-webservices-bnd.xmi 來打開 XML Editor。
- 選擇 Source 選項卡。
- 刪除安全綁定元素。
原來的 pcBindings 條目:
clearcase/" target="_blank" >cccccc border=1>
<pcBindings xmi:id="PCBinding_1068756918823" pcNameLink="HelloWorld"
wsdlServiceQnameNamespaceLink="" wsdlServiceQnameLocalnameLink="" scope="Session">
<securityRequestReceiverBindingConfig xmi:id="SecurityRequestReceiverBindingConfig_1068756918823"/>
<securityResponseSenderBindingConfig xmi:id="SecurityResponseSenderBindingConfig_1068756918823"/>
</pcBindings>
|
修改后的 pcBindings 條目:
<pcBindings xmi:id="PCBinding_1068756918823" pcNameLink="HelloWorld"
wsdlServiceQnameNamespaceLink="" wsdlServiceQnameLocalnameLink=""
scope="Session">
*** 這里刪除了以下元素 ***
</pcBindings>
|
- 保存修改并關閉 XML Editor。
- 選擇 File => Save。
- 關閉 Editor。
這些是 Web 服務部署描述符所需的全部修改。
步驟 4.b.使用必要的端口和綁定配置修改 Web Services Description Language(WSDL)文件 在這一步,將使用所需的端口和綁定定義來修改 HelloWorldSSB.wsdl 文件,以利于 SOAP/HTTP 對 HelloWorld Web 服務實現的請求。
- 在 J2EE Perspective Project Navigator 視圖中:
- 展開 HelloWorldEJB => ejbmodule => META-INF => wsdl。
- 雙擊 HelloWorldSSB.wsdl 打開 WSDL Editor。
- 為便于瀏覽,雙擊 HelloWorldSSB.wsdl 選項卡使編輯器最大化。
- 選擇 Graph 選項卡查看 Graphical WSDL 表示。
- 在 Services Section 中:
- 右鍵單擊 HelloWorldSSBService service definition
- 選擇 Add Child => port。
- 在新彈出的 New Port 窗口中,設置 Name 為“HelloWorld”。
- 單擊 OK。
- 在 Services Section 中:
- 右鍵單擊 HelloWorld port definition。
- 選擇 Set Binding。
- 選擇 Create a new binding bullet。
- 在彈出的 Specify Binding 窗口中,設置綁定 Name 為“HelloWorldSoapBinding”。
- 單擊 Finish。
所得的指定綁定條目如圖 13 所示。
圖 13.WSDL 編輯器 - 端口定義指定綁定

- 在左下側框的 Port Definition 中,向下滾動,為 HelloWorld port 設置 intf:HelloWorldSoapBinding 作為 Binding。
- 在 Services Section 中:
- 在 Services Section 中:
- 右鍵單擊 HelloWorld port definition。
- 選擇 Add Extensibility Element => wsdlsoap:address。
- 在 Services Section 中:
- 展開 HelloWorld port definition。
- 選擇前面創建的 wsdlsoap:address
- 在左下側框的 wsdlsoap:address 段中:
- 單擊 Value field 中的第一條“http://www.ibm.com”進行編輯。
- 將值設置為“http://localhost:9080/HelloWorldWebRouter/services/HelloWorld”。
HelloWorldWebRouter 將是 Web Router Module 的上下文根,Web Router Module 將在步驟 4.c 中創建。
- 在 Web services Editor 中,選擇 Source 選項卡,查看 Source Editor。
- 從 HWSSBPortComponentSoapBinding 將 wsdlsoap:binding 和 wsdl:operation 的信息復制到 HelloWorldSoapBinding,如下所示:
<wsdl:binding name="HWSSBPortComponentSoapBinding" type="intf:HelloWorldSSB">
***從這里開始復制元素****
</wsdl:binding>
<wsdl:binding name="HelloWorldSoapBinding" type="intf:HelloWorldSSB">
***將復制的元素粘貼到這里***
</wsdl:binding>
|
- 將 HelloWorldSoapBinding 中 wsdlsoap:binding 元素的傳輸元素由 JMS 更改為 HTTP,如下所示:
<wsdl:binding name="HelloWorldSoapBinding" type="intf:HelloWorldSSB">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/jms"/>
...
</wsdl:binding>
|
- 保存對 HelloWorldSSB.wsdl 所作的修改并關閉 WSDL Editor。
- 選擇 File => Save。
- 關閉 Editor。
以上這些是對 SOAP/JMS 和 SOAP/HTTP 請求 HelloWorld Web 服務實現所需的 HelloWorldSSB.wsdl 文件所做的全部修改。
步驟 4.c.在 HTTP 路由器模塊上創建 SOAP 在這一步里,創建附加的 Web 路由器模塊來處理對 HelloWorld Web 服務實現的傳入 HTTP 請求。
- 在 J2EE Perspective Project Navigator 視圖中:
HelloWorldWebRouter Web 模塊創建完成,開始處理 SOAP/HTTP 請求。
還可以選擇使用 endptEnabler 命令行工具來創建 HelloWorldWebRouter 模塊。 WebSphere Application Server 5.1 為開發 Web 服務實現提供了一個如同 Web 服務客戶機的命令行工具—— endptEnabler。endptEnabler 命令行工具提供一個便利的向支持 Web 服務的應用程序( EAR 文件 )添加一個或多個路由模塊的方法。每一個路由模塊都被創建并支持 JMS 或 HTTP 的 服務端點。例如,要創建如上所述的相同的 HTTP 端點,可以使用如下的命令行:
endptEnabler -properties mypropsfile.props HelloWorld.ear
|
本教程的屬性文件包含以下條目:
mypropsfile.props
HelloWorldEJB.transports=http
HelloWorldEJB.http.routerModuleName=HelloWorldWebRouter
HelloWorldEJB.http.contextRoot=/HelloWorldWebRouter
|
本教程并沒有詳細描述 endptEnabler 命令行工具。要獲取有關endptEnabler 和 命令行選項的詳細信息,請參閱 WebSphere Application Server Info Center。endptEnabler 應該在支持 Web 服務的應用程序部署之前就運行于 WebSphere Application Server 5.1。
步驟 5.從相應的 WSDL 生成 Web 服務客戶機 在這一步,將創建 Test Client 來測試我們的 Web 服務。
- 在 J2EE Perspective Project Navigator 中:
- 右鍵單擊 HelloWorld 項目。
- 選擇 New => Other。
- 在新彈出窗口的左側欄中,單擊 Web services。
- 在新彈出窗口的右側欄中,單擊 Web service Client。
- 單擊 Next。
- 在 Web services 窗口中:
- 選擇 Java Proxy 作為 Client proxy type(缺省選中)。
- 選擇 Test Generated Proxy。
- 單擊 Next。
所得的 Web 服務客戶機選擇結果如圖 16 所示:
圖 16.Web 服務客戶機代理配置

- 在 Client Environment Configuration 窗口中:
- 選擇 Use Defaults bullet(缺省選中)。
- 設置或輸入“HelloWorldWebJMSClient”作為 Client Web Project。
- 單擊 Next。
所得的 Web 服務客戶機條目如圖 17 所示:
圖 17.Web 服務客戶機環境配置

- 在 Web service Selection Page 窗口中:
- 選擇 Browse 來定位
HelloWorldSSB.wsdl 文件。
- 選擇 HelloWorldEJB => ejbmodule => META-INF => wsdl => HelloWorldSSB.wsdl。
- 單擊 OK。
- 單擊 Next。
- 在 Web service Proxy Page 中:
- 選擇 Generate Proxy (缺省選中)。
- 單擊 Next。
- 在 Web service Client Test 窗口中:
我們已經成功的生成了一個 Web 服務測試客戶機,使用 SOAP/JMS 和 SOAP/HTTP 這兩種傳輸機制來調用 HelloWorld Web 服務實現。
步驟 6.為兩種傳輸方法測試 Web 服務客戶機
- 在 J2EE Perspective Project Navigator中:
- 展開 HelloWorldWebJMSClient=>WebContent => sample => HelloWorldSSBProxy。
- 右鍵單擊 TestClient.jsp。
- 選擇 Run on Server。
- 選擇 Use an existing Server bullet(缺省地被選中)。
- 從前面配置好的服務器列表中選擇 TestServer(缺省選中)。
- 單擊 Finish。將啟動 TestServer,打開 Web Browser 并調用
http://localhost:9080/HelloWorldWebJMSClient/sample/HelloWorldSSBProxy/TestClient.jsp 。
所得的服務器選擇條目如圖 19 所示。
圖 19.Web 服務測試客戶機服務器選擇

- 雙擊 Web Browser 選項卡。最大化 Web Browser 以便于瀏覽。
- 在 Web Browser 中:
- 在 Methods 框中單擊getEndpoint。
- 在 Inputs 框中單擊 Invoke。
調用 getEndPoint 操作所得結果如圖 20 所示。
圖 20.Web 服務測試客戶機 getEndpoint 調用

Result 框中包含著 JMS 端點 URL 字符串。
- 在 Web Browser 中:
- 在 Methods 框中單擊 getMessage。
- 在 Inputs 框中單擊 Invoke。
在 Result 框中顯示“Hello World”信息。圖 21 顯示了調用測試客戶機 getMessage 操作所得的結果。
圖 21.Hello World

接下來,測試在 HTTP 上使用 SOAP 的 Web 服務。
- 在 Web Browser 的 Methods 框中,單擊 setEndpoint(String)。
- 要在 HTTP 上使用 SOAP 調用 Web 服務,請在 Inputs 框的端點方框中輸入
http://localhost:9080/HelloWorldWebRouter/services/HelloWorld" 。
- 在 Web Browser 中,單擊 Invoke。
注意:要在 JMS 上使用 SOAP 調用 Web 服務,URL 應該設置為 jms:/queue?destination=jms/HWQ&connectionFactory=jms/HWQCF&targetService=HWSSBPortComponent" 。
- 在 Web Browser 中:
- 在 Methods 框中單擊 getEndpoint。
- 在 Inputs 框中單擊 Invoke。
- 在 Result 框中包含 HTTP 端點的 URL。
- 在 Web Browser 中:
- 在 Methods 框中單擊 getMessage。
- 在 Inputs 框中單擊 Invoke。
- 在 Result 框中顯示“Hello World”信息。
我們已經成功的測試了 Web 服務實現和使用 SOAP/JMS 和 SOAP/HTTP 傳輸機制來調用 Web 服務的功能。
故障診斷提示和技巧 問題:
測試應用程序和初始化 TestClient.jsp 時,會發生如下的異常:
[11/12/03 15:40:20:535 EST] 2c057c0b WebGroup
E SRVE0026E: [Servlet Error]-[]: java.lang.NullPointerException
at org.apache.jsp._Method._jspService(_Method.java:100)
at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
....
....
|
解答:
沒有把 urlprotocols.jar 文件添加到服務器類路徑。參見步驟 2.為通過 JMS 傳輸 SOAP 配置服務器的步驟 11。
問題:
生成 Web 服務時,彈出一個窗口顯示如下信息:“IWAB044E unable to get URL for project P/HelloWorldEJB”。
解答:
取消操作,關閉所有打開的編輯器和 Server Configuration 窗口。重新生成 Web 服務。如果問題依然存在,則工作區可能處于不一致狀態。請嘗試重新啟動 Application Developer V5.1.1。
問題:
啟動 HelloWorldEJB.jar 文件時,EJB 模塊啟動失敗或是在控制臺上紀錄如下錯誤信息:
[11/13/03 17:01:50:743 EST] 4194ef52 WSServerImpl
E WSWS1013E: Error: Found illegal scope: binding file=, portComponentName=HelloWorld, scope=.
[11/13/03 17:01:51:484 EST] 4194ef52 WSServerImpl
E WSWS1035E: Exception caught in createService:
context info: wsbFileName=META-INF/ibm-webservices-bnd.xmi
implClassName=com.ibm.test.webservices.ejb.HelloWorldSSB
wsdlFileName=META-INF/wsdl/HelloWorld.wsdl
wsdlContext=<WorkSpaceDir>\HelloWorldEJB\ejbModule
\WEB-INF\wsdl\HelloWorld.wsdl portComponentName=HelloWorld.
[11/13/03 17:01:52:175 EST] 4194ef52 WSServerImpl
E WSWS1002E: Error processing web services deployment descriptor
for module: HelloWorldEJB.jar with error: com.ibm.ws.exception.
RuntimeError: WSWS1013E: Error: Found illegal scope: binding file=,
portComponentName=HelloWorld, scope=.
at com.ibm.ws.webservices.component.WSServerImpl.findPortBinding(WSServerImpl.java:679)
at com.ibm.ws.webservices.component.WSServerImpl.createService(WSServerImpl.java:780)
|
[11/13/03 17:10:13:977 EST] 4e3735c8 WSServerImpl
E WSWS1035E: Exception caught in createService:
context info: wsbFileName=META-INF/ibm-webservices-bnd.xmi
implClassName=com.ibm.test.webservices.ejb.HelloWorldSSB
wsdlFileName=META-INF/wsdl/HelloWorldSSB.wsdl wsdlContext=<WorkSpaceDir>
\HelloWorldEJB\ejbModule\WEB-INF\wsdl\HelloWorldSSB.wsdl portComponentName=HelloWorld.
[11/13/03 17:10:14:458 EST] 4e3735c8 WSServerImpl
E WSWS1002E: Error processing web services deployment descriptor for module: HelloWorldEJB.jar
with error: com.ibm.ws.exception.RuntimeError:
There is no deployment descriptor defined for HelloWorld RequestReceiver
at com.ibm.ws.webservices.component.WSServerImpl.createRequestReceiverConfig(WSServerImpl.java:1131)
at com.ibm.ws.webservices.component.WSServerImpl.createService(WSServerImpl.java:867)
at com.ibm.ws.webservices.component.WSServerImpl.ejbMetaDataCreated(WSServerImpl.java:1448)
at com.ibm.ws.webservices.component.WSServerImpl.metaDataCreated(WSServerImpl.java:391)
|
ibm-webservices-bnd.xmi 文件包含一個無效范圍或為端口組件 配置的缺省設置—— portComponentName=HelloWorld。檢查 HelloWorldEJB => ejbmodule => META-INF => ibm-webservices-bnd.xmi 文件中的如下條目:
<pcBindings xmi:id="PCBinding_1068756918823" pcNameLink="HelloWorld"
wsdlServiceQnameNamespaceLink="" wsdlServiceQnameLocalnameLink="" scope="">
<securityRequestReceiverBindingConfig
xmi:id="SecurityRequestReceiverBindingConfig_1068756918823"/>
<securityResponseSenderBindingConfig
xmi:id="SecurityResponseSenderBindingConfig_1068756918823"/>
</pcBindings>
|
解答:
刪除安全綁定元素并用下面修改過的條目替換上面的相應條目。參閱步驟 4.a.修改 Web 服務的部署描述符來為 Web 路由模塊創建端口組件和綁定中的步驟 7。
<pcBindings xmi:id="PCBinding_1068756918823" pcNameLink="HelloWorld"
wsdlServiceQnameNamespaceLink="" wsdlServiceQnameLocalnameLink="" scope="Session">
</pcBindings>
|
問題:
為 JMS URL 設置端點時, setEndpoint 函數將 URL 修改為無效的 JMS URL。調用 getMessage 操作時,引發如下錯誤:
WSWS3013E: The JMS endpoint URL is missing one or more of the following required properties:
connectionFactory, destination, targetService
|
例如,設置 endPointURL 為:
jms:/queue?destination=jms/HWQ&connectionFactory=jms/HWQCF&targetService=HWSSBPortComponent
|
端點被錯誤的設置為:
jms:/queue?destination=jms/HWQ&connectionFactory=jms/HWQCF&targetService=HWSSBPortComponent
|
在生成的客戶機代碼里,檢查 Result.jsp 文件中的 markup 方法,該方法是否修改了傳遞到 setEndpoint(String) 的字符串并且將字符串中出現的 '&' 全部替換為"&" ,如下面的代碼段所示: 清單 1.測試客戶機代碼
public static String markup(String text) {
if (text == null) {
return null;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
switch (c) {
case '<':
buffer.append("<");
break;
case '&':
buffer.append("&");
break;
case '>':
buffer.append(">");
break;
case '"':
buffer.append(""");
break;
default:
buffer.append(c);
break;
}
}
return buffer.toString();
}
|
解答:
修改客戶機代碼,以使 JMS URL 設置正確并且當將端點設置到 JMS URL 時不會發生錯誤??梢孕薷拇a,將 buffer.append("&"); 替換為 buffer.append('&'); ,或者刪除 case '&': 子句,還可以注釋掉相關的代碼,如下所示: 清單 2.修改后的測試客戶機代碼
public static String markup(String text) {
if (text == null) {
return null;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
switch (c) {
case '<':
buffer.append("<");
break;
/*Comment this section out for JMS URLs*/
//case '&':
// buffer.append("&");
// break;
case '>':
buffer.append(">");
break;
case '"':
buffer.append(""");
break;
default:
buffer.append(c);
break;
}
}
return buffer.toString();
}
|
修改代碼后,就可以通過改變端點來實現在 JMS 和 HTTP 端點 URL 之間的替換。
結束語 本教程演示了如何使用 Application Developer V5.1.1 和 WebSphere Application Server 5.1 Test Environment 來開發和測試一個名為 HelloWorld 的服務實現,該服務通過 SOAP/JMS 和 SOAP/HTTP 傳輸無狀態 Bean。Application Developer 縮短了通過 JMS 和 HTTP 傳輸機制實現對 SOAP 的支持所需的時間。
參考資料
- Web services for J2EE, V1.0 [JSR-109]
- Java API for XML-Based RPC (JAX-RPC) [JSR-101]
- 使用 WebSphere V5 工具和技術開發和部署 Web 服務——第 1 部分:創建和測試 Web 服務
- 在 WebSphere Studio Application Developer V5.1 中為 J2EE Web 服務提供支持——第 1 部分:服務器環境
- IBM 紅皮書:WebSphere V5.1 Application Developer V5.1.1 Web 服務手冊
- WebSphere Application Server 信息中心
關于作者
Tendai Chinoda 是 IBM Business Partner Technical Support WebSphere Competency Center 的軟件工程師。為 IBM WebSphere 家族產品的首要商業伙伴(Business Partners) 提供開發者到開發者(developer-to-developer) 的技術支持和啟動服務。Tendai 通過了 Application Developer V5.1 的 IBM Certified Solution Developer- Web Services Development、 WebSphere Application Server AE V4 的 IBM Certified Systems Expert- Administration 、IBM Certified System Administrator-WebSphere Application Server V 以及 Sun Certified Programmer-Java 2 Platform 等認證。他的專長和興趣包括 WebSphere Application Server V4 and V5 系統管理和體系結構、 WebSphere Studio Application Developer V5 J2EE、 Web 服務開發、WSDL、SOAP、JMS、JCA和JDBC等??梢酝ㄟ^ tendai@us.ibm.com 與 Tendai 聯系。 |

下載
描述 |
文件類型 |
文件大小 |
下載方式 |
HelloWorldApp.zip |
zip |
126 KB |
HTTP  |
|