• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 使用 Rational Application Developer 創建接收 SOAP 附件的 Web 服務

    發表于:2007-05-25來源:作者:點擊數: 標簽:
    了解如何使用 IBM Rational Application Developer 創建能接收包含附件(除消息主體中的正常內容外)的 SOA P 消息的 Web 服務。我們將使用一個簡單的示例,在此示例中,服務將接收主體中的文本消息以及作為附件的文本消息、jpeg 文件和 zip 文件。 引言 在
    了解如何使用 IBM® Rational® Application Developer 創建能接收包含附件(除消息主體中的正常內容外)的 SOAP 消息的 Web 服務。我們將使用一個簡單的示例,在此示例中,服務將接收主體中的文本消息以及作為附件的文本消息、jpeg 文件和 zip 文件。

    引言

    在本文中,您將使用 IBM Rational Application Developer(以下稱為 Application Developer)集成開發環境(Iintegrated Development Environment,IDE)來創建服務和客戶機,該服務將接收主體中的文本消息以及作為附件的文本消息、jpeg 文件和 zip 文件。此處提供該客戶機的目的是為了演示如何將帶附件的 SOAP 消息發送到 Web 服務,并通過示例說明連接到 Web 服務并向其發送消息的良好模式。

    此練習中創建的大部分項目構件都是通過使用 Application Developer 工具自動生成的,不過用于生成其中兩個項目的 WSDL 文件例外。盡管您可能希望通過使用 Application Developer 來提高效率,但仍然可以手動創建各個項目構件(只要您有足夠的時間)。通過分析生成的各個構件,您可以了解發送帶有附件的 SOAP 消息所需的技術。

    在此練習中,我們將從一個 WSDL 文件著手,該文件描述能接收帶有文本主體和文本、zip、.jpg 文件附件的消息。我們將使用該 WSDL 文件來創建服務和客戶機項目;其中包含所需的所有代碼,但為了說明一些其他的功能,我們將手動對代碼進行一些改進。特別要注意,我們將向生成的構件添加一些代碼,以向 Application Developer 控制臺輸出跟蹤消息,從而能夠了解系統的執行情況。此外,我們還將向服務應用程序添加一個 JAX-RPC 處理程序,以便演示如何使用一些簡單的 SOAP Attachments API for Java™ (SAAJ) 代碼來確認附件存在。該處理程序代碼并不是必需的,但它說明了在應用程序有直接發送消息之外的其他要求時可用于提供其他消息處理的技術。





    回頁首


    準備環境

    此部分描述準備環境的步驟。

    準備源代碼

    下載部分提供的 AttachmentsFiles.zip 文件包含了將在此練習中使用的六個文件:

    • AttachmentIBM.wsdl——用于生成 2 個項目的 wsdl 文件。
    • AttachmentIBMHandler.java——包含 SAAJ 代碼的可選文件,可用于確認消息包含了附件。
    • AttachmentIBMTest.jsp——這是另一個可選文件,其中包含調用我們創建的測試客戶機的若干代碼行。
    • AttachmentIBMBindingImpl.java——實現 AttachmentIBM 接口的類,包含提供此操作功能的代碼。此文件可在本練習中使用向導生成,但生成的版本并不包含所需的全部代碼,因此這個版本中包含我自己的自定義代碼,可以將其復制到生成的版本中。
    • fed.zip——作為附件使用的示例 zip 文件。
    • fed.jpg——作為附件使用的示例 jpg 文件。

    將這些文件解壓到一個文件夾中,如 C:\temp1,以便在此項目開發期間根據需要從此處將其導入到 Application Developer 中。

    注意:如果將 fed.jpg 文件和 fed.zip 文件放在 c:\temp1 之外的其他目錄中,則必須更改 AttachmentIBMTest.jsp 中對這些文件的引用。

    啟動 Application Developer

    啟動 Application Developer,最好使用新工作區。打開后,請執行以下步驟啟用 Web 服務工具:

    1. 選擇 Window => Preferences => Workspace => Capabilities。
    2. 單擊 Web Services DeveloperAdvanced J2EE。

    啟動服務器

    Servers 選項卡上,右鍵單擊 WebSphere Application Server v6 并選擇 Start。





    回頁首


    從 WSDL 文件創建服務

    此部分描述創建服務的步驟。

    為 Web 服務創建一個空白 Web 應用程序項目

    1. 選擇 File => New => Dynamic Web Project,以打開 New Project 向導。
    2. 在 New Dynamic Web Project 對話框中,在 Name 字段中鍵入 AttachmentService,接受其他字段的缺省值,并單擊 Finish,如圖 1 中所示:

      圖1. 為 Web 服務創建一個空白 Web 應用程序項目
      為 Web 服務創建一個空白 Web 應用程序項目

    將隨即創建具有圖 2 中所示的結構的新 Web 項目:


    圖 2. 新 Web 項目
    新 Web 項目

    在繼續進行服務開發前,請執行以下步驟,以將新項目部署到 WebSphere 測試服務器:

    1. Servers 選項卡上,右鍵單擊 WebSphere server,然后選擇 Add and Remove Projects。
    2. 選擇 AttachmentServiceEAR 并單擊 Add,然后單擊 Finish,如圖 3 中所示:

      圖 3. 可以部署的項目
      可以部署的項目

    生成新項目中的 Web 服務組件

    現在需要將新項目 AttachmentIBM.wsdl 添加到上面的項目中,以便能將其用于生成項目的 Web 服務組件。為此,請執行以下步驟:

    1. 展開 AttachmentsService 項目,右鍵單擊 WebContent 并選擇 Import => File System => Next。
    2. 在 Import 對話框中,瀏覽到解壓縮示例文件的文件夾中。在對話框左側,單擊所選擇的文件夾名稱(但不要單擊復選框)。將在右側顯示文件的內容。選中 AttachmentIBM.wsdl 并單擊 Finish,如圖 4 中所示:

      圖 4. 可以部署的項目
      可以部署的項目

    AttachmentIBM.wsdl 包含生成 Web 服務和使用該服務的客戶機所需的所有信息。讓我們對此文件的內容進行一下分析。雙擊 AttachmentIBM.wsd,以在 Application Developer 文本 XML 編輯器中打開它,然后單擊 Source 選項卡以查看代碼。有兩個部分對本練習特別重要。

    清單 1 給出了一個消息定義,用于描述在清單 2 定義的 sendAttachments 操作中發送的消息的內容。此消息非常有意義,因為 JAX-RPC 將使用其確定組成實現 sendAttachments 操作的方法的簽名的 Java 數據類型。


    清單 1. 消息定義
    <message name="attachmentMsg">
                <part name="textBody" type ="xsd:string"/>
                <part name="textAttachment" type="xsd:hexBinary"/>
                <part name="imageAttachment" type="xsd:hexBinary"/>
                <part name="zipAttachment" type="xsd:hexBinary"/>
                </message>
                

    通常,通過此定義將得到這樣的方法簽名:其第一個參數聲明為 Java String,所有其他參數都聲明為 Java 字節數組。但 wsdl 的 bindings 部分包含將更改此設置的信息,如清單 2 中所示。


    清單 2. wsdl bindings 部分
      <binding name="AttachmentIBMBinding" type="tns:AttachmentIBM">
                <soap:binding style="document"
                transport="http://schemas.xmlsoap.org/soap/http"/>
                <operation name="sendAttachments">
                <soap:operation soapAction=""/>
                <input>
                <mime:multipartRelated>
                <mime:part>
                <soap:body use="literal"/>
                </mime:part>
                <mime:part>
                <mime:content part="textAttachment" type="text/plain"/>
                </mime:part>
                <mime:part>
                <mime:content part="imageAttachment" type="image/jpeg"/>
                </mime:part>
                <mime:part>
                <mime:content part="zipAttachment" type="application/zip"/>
                </mime:part>
                </mime:multipartRelated>
                </input>
                <output>
                <soap:body use="literal"/>
                </output>
                </operation>
                </binding>
                

    bindings 部分包含確定消息內容特征的 MIME 聲明。

    第一個 mime:part 指 SOAP 消息的主體。會將其作為典型的 literal 編碼樣式元素處理。

    第二個 mime:part 部分將消息的 textAttachment 部分的 mime 類型定義為 text/plain。因為這樣,JAX-RPC 會導致將第二個參數作為 Java String 而不是 Java 字節數組生成。運行時,SOAP 引擎將從 SOAPMessage 檢索此 AttachmentPart,并將其作為 Java String 傳遞給操作。

    第三個 mime:part 部分將消息的 imageAttachment 部分的 mime 類型定義為 image/jpeg。因為這樣,JAX-RPC 會導致將第三個參數作為 Java java.awt.Image 而不是 Java 字節數組生成。運行時,SOAP 引擎將從 SOAPMessage 檢索此 AttachmentPart,并將其作為 Java Image 傳遞給操作。

    第四個 mime:part 部分將消息的 zipAttachment 部分的 mime 類型定義為 application/zip。因為這樣,JAX-RPC 會導致將第四個參數作為 Java javax.activation.DataHandler 而不是 Java 字節數組生成。運行時,SOAP 引擎將從 SOAPMessage 檢索此 AttachmentPart,并將其作為 Java DataHandler 傳遞給操作。此附件的 mime 類型無法由 JAX-RPC 直接映射到 Java 類型。如果 mime 類型不為 JAX-RPC 知道如何處理的少數類型之一,則會將附件映射到 javax.activation.Datahandler 類,該類必須由操作進行顯式處理。有關 mime 類型到 Java 類型的映射,請參見 JAX-RPC 文檔。

    現在,您已經了解了 wsdl 文件各個部分的含義,并知道了映射組件的預期行為,接下來讓我們使用此 wsdl 創建項目中所需的 Web 服務構件:

    1. 關閉編輯器。
    2. 右鍵單擊 AttachmentIBM.wsdl,然后選擇 Web Services => Generate Java bean skeleton。
    3. 將隨即啟動 Web Service 向導。在 Web Services 對話框上,選擇 Overwrite Files without warning 并單擊 Next,如圖 5 中所示:

      圖 5. Web Services 對話框
      Web Services 對話框

    4. 在 Object Selection 對話框中,接受缺省設置并單擊 Next,如圖 6 中所示:

      圖 6. Object Selection 對話框
      Object Selection 對話框

    5. 在 Service Deployment Configuration 對話框中,接受缺省設置并單擊 Next,如圖 7 中所示:

      圖 7. Service Deployment Configuration 對話框
      Service Deployment Configuration 對話框

    6. 在 Web Service Skeleton Java Bean Configuration 對話框中,接受缺省設置并單擊 Finish,如圖 8 中所示:

      圖 8. Web Service Skeleton Java Bean Configuration 對話框
      Web Service Skeleton Java Bean Configuration 對話框

    向導完成處理以后,您將注意到在項目中創建了幾個新文件。Application Developer 會在 Java 編輯器中打開新建的 AttachmentIBMBindingImpl.java 類。在了解 AttachmentIBMBindingImpl.java 文件之前,讓我們看看向項目添加了哪些文件。圖 9 顯示了 Project Explorer:


    圖 9. Project Explorer
    Project Explorer

    向下逐層展開到 AttachmentService => JavaResources => JavaSource 文件夾,將看到其中創建了一個新包 ibm.attachment。展開此文件夾,將看到兩個新類:

    • AttachmentIBM.java——這是經常被稱為服務器框架的 Java 接口。它聲明此 Web 服務中可用的各個方法,由服務器用于取消封送傳入 SOAP 消息的內容。
    • AttachmentIBMBindingImpl.java——實現 AttachmentIBM 接口的類,包含提供此操作功能的代碼。生成的方法是空的,因為要由開發人員負責提供滿足操作要求的代碼。稍后,我們將在此處插入一些代碼,以向 WebSphere 控制臺輸出一些消息,從而能監視此服務的測試執行情況。

    展開 WebContent => WEB-INF 文件夾,將看到另外兩個新文件:

    • webservices.xml——此文件包含服務的定義。通過分析此文件,可以看到將 AttachmentIBM.java 作為服務端點接口的引用和將 AttachmentIBMBindingImpl.java 類作為服務實現 Bean 的引用。
    • AttachmentIBM_mapping.xml——此文件描述從傳入 XML 流到服務操作的方法簽名中聲明的 Java 類型的映射。此文件的內容相當晦澀,但構造這些映射的規則在 JAX-RPC 規范中進行了描述。

    此外,對 web.xml 文件進行了一處更改,為 AttachmentIBMBindingImpl.java 類插入了 Servlet 聲明,以便在運行時能由 SOAP 引擎進行調用,如清單 3 中所示:


    清單 3. AttachmentIBMBindingImpl.java 類的 Servlet 聲明
                <servlet>
                <servlet-name>ibm_attachment_AttachmentIBMBindingImpl</servlet-name>
                <servlet-class>ibm.attachment.AttachmentIBMBindingImpl</servlet-class>
                <load-on-startup>1</load-on-startup>
                </servlet>
                

    我們已經對 Web 服務生成向導的結果進行了分析,接下來讓我們繼續我們的練習。向導創建了 AttachmentIBMBindingImpl.java 文件,并在 Java 編輯器中將其打開。通常會在此時開始進行服務操作的實際實現的編碼工作。不過,由于我們僅對傳遞附件感興趣,因此將僅添加一個控制臺消息,以顯示消息主體的內容和一些有關我們從客戶機應用程序向此服務傳遞的附件的信息(將在下一部分使用 Application Developer 向導生成此客戶機應用程序)。將清單 4 中的代碼添加到此類的 sendAttachments 方法(您可以自行鍵入,也可以從下載部分提供的 AttachmentIBMBindingImpl.java 文件中復制)。


    清單 4. 向 sendAttachments 方法添加的代碼
    System.out.println("entering AttachmentBindingImpl.sendimage()");
                System.out.println("The text Body is: " + textBody);
                System.out.println("The text Attachment is: " + textAttachment);
                System.out.println("Image properties are: " + imageAttachment.toString());
                // TBD - should probably do something with zip file !
                if (null != zipAttachment) {
                System.out.println("The Zip Attachment is received");
                } else {
                System.out.println("The Zip Attachment is not received");
                }
                System.out.println("exiting AttachmentBindingImpl.sendimage()");
                

    此類現在應該與以下所示類似:


    圖 10. 新的 AttachmentBindingImpl 類
    新的 AttachmentBindingImpl 類

    保存并關閉 AttachmentIBMBindingImpl.java 文件。

    向服務項目添加可選處理程序

    盡管我們已經正式完成了這個服務,但接下來還要向項目添加一個新類,以演示傳遞給服務的兩個文本消息中的一個實際上是作為附件傳遞的。我們將創建一個 JAX-RPC 處理程序來在服務器端解釋傳入請求消息,并使用 SOAP Attachments API for Java (SAAJ) 中的類對傳入消息進行檢查。我們定義的這個處理程序將查找 SOAP AttachmentParts,并在控制臺顯示所找到的任何部分的 mime 類型。

    我們將使用 Application Developer 來創建基本處理程序,然后將添加檢查 SOAP 消息的 SAAJ 代碼。我們的處理程序的代碼非常簡單??梢枣I入以下所示的代碼,或從隨本文提供的文件進行復制粘貼。

    讓我們首先創建基類,并分析生成的代碼:

    1. 在服務項目中,導航到 JavaResources => JavaSource 文件夾,并右鍵單擊 JavaSource。
    2. 選擇 New=>class,以啟動 New Class 向導。
    3. 在 New Java Class 對話框中,鍵入 ibm.attachment.handler 作為包名稱,鍵入 AttachmentIBMHandler 作為類名稱,然后單擊 SuperClass 字段旁邊的 Browse。
    4. 在 Superclass Selection 對話框中的 Choose a Type 字段鍵入 GenericHandler。在 Qualifier 字段中,從 javax.xml.rpc.handler 包選擇 GenericHandler 類,然后單擊 OK,如圖 11 中所示:

      圖 11. Superclass Selection 對話框
      Superclass Selection 對話框

    5. 回到 New Java Class 對話框,選中 Constructors from superclass,然后單擊 Finish,如圖 12 中所示:

      圖 12. 新 AttachmentBindingImpl 類
      新 AttachmentBindingImpl 類

    我們剛剛創建的處理程序只是一個框架,因此需要添加一些額外的代碼,以實現我們希望提供的功能。用于派生我們的處理程序的 GenericHandler 具有調用處理程序時由 SOAP 運行時調用的方法。其中的 handleRequest 方法將在傳入請求傳遞到 Web 服務前立即調用。這就允許 JAX-RPC 處理程序的開發人員在消息送達服務前進行任何其他消息操作或處理。在我們的例示例中,只是希望演示包含附件的消息。我們將使用數行簡單的 SAAJ 代碼來進行此工作:

    1. 首先,將清單 5 中的 Java import 語句添加的該類的頂部:

      清單 5. import 語句
      import javax.xml.namespace.QName;
                      import javax.xml.rpc.handler.GenericHandler;
                      import javax.xml.rpc.handler.MessageContext;
                      import javax.xml.rpc.handler.soap.SOAPMessageContext;
                      import javax.xml.soap.AttachmentPart;
                      import javax.xml.soap.SOAPMessage;
                      import java.util.Iterator;
                      

    2. 將清單 6 中所示的代碼添加到類的主體中,從而向類添加我們的 handleRequest 方法實現:

      清單 6. handleRequest 方法
                      public boolean handleRequest(MessageContext mc) {
                      System.out.println("entering handleRequest");
                      SOAPMessageContext smc = (SOAPMessageContext)mc;
                      SOAPMessage sm = smc.getMessage();
                      Iterator attachments = sm.getAttachments();
                      if (!attachments.hasNext()) {
                      System.out.println("No Attachments");
                      } else {
                      System.out.println("Has Attachments");
                      while (attachments.hasNext()) {
                      AttachmentPart attachment =
                      ( AttachmentPart)attachments.next();
                      System.out.println("Attachment Type is: "
                      + attachment.getContentType());
                      }
                      }
                      System.out.println("exiting handleRequest");
                      return true;
                      }
                      

      您將發現,我們的簡單處理程序將檢查 SOAPMessage,查找 AttachmentParts,并會輸出所找到的任何附件的 mime 類型。

    3. 保存并關閉 AttachmentIBMHandler.java 文件。

    現在已經向項目添加了處理程序,但還需要對項目進行配置,以在運行時使用該處理程序。需按照以下所示,向 webservices.xml 類添加一個 handler 部分,以實現此目標:

    1. 導航到 WebContent=>WEB-INF 文件夾,并右鍵單擊 webservices.xml,然后選擇 Open with => Web Services Editor。
    2. 進入 Handlers 選項卡,在 Handlers 部分單擊 Add。
    3. 在 Class Browser 對話框中,在 Browse for a Java class 字段中鍵入 AttachmentIBMHandler,從 Qualifiers 字段選擇 ibm.attachment.handler 包,并單擊 OK,如圖 13 中所示:

      圖 13. Class Browser 中的 AttachmentIBMHandler
      Class Browser 中的 AttachmentIBMHandler

    4. 在有些早期版本的 Application Developer 中,編輯器包含一個軟件錯誤,即使已將 Handler 類添加到文件中,也不會在 Handlers 部分顯示。保存并關閉編輯器,接下來我們將了解添加過程的工作情況。
    5. 右鍵單擊 webservices.xml 并選擇 Open with => Web Services Editor,從而再次打開 webservices.xml 文件。
    6. Handlers 選項卡上,應該看到此處理程序在 Handler 部分列出,如圖 14 中所示:

      圖 14. 已添加了處理程序
      已添加了處理程序

    7. 關閉 XML 編輯器。
    8. 為了準確了解向 webservices.xml 文件添加了什么內容,我們將在文本編輯器中打開此文件。右鍵單擊 webservices.xml,并選擇 Open with => XML Source Page Editor。將會發現在 port-component 部分向文檔添加了包含三行代碼的 handler 部分,如圖 15 中所示:

      圖 15. webservices.xml 的視圖
      webservices.xml 的視圖

    9. 關閉編輯器。服務項目現在已完成,應該與圖 16 中所示類似:

      圖 16. 已完成的項目
      已完成的項目

    發布到服務器

    有時候,更改了項目的部署描述符后,服務器可能不會注意到這個更改。為了將更改部署到服務器,請轉到 Servers 選項卡,右鍵單擊 WebSphere server,并選擇 Publish。發布需要一定的時間完成。





    回頁首


    從 WSDL 文件創建客戶機

    現在已經完成了服務,接下來將生成客戶機項目來測試新 Web 服務??梢允褂?Application Developer 中的 Web Services Explorer 測試我們的 Web 服務,但生成的客戶機項目中包含能作為 Web 服務調用模型的代碼。此外,Application Developer Client Generation 向導生成的客戶機項目還可作為客戶機項目設計的一個不錯的例子使用。

    生成 Web 服務客戶機組件

    我們將使用與 Web 服務項目相同的 wsdl 文件來通過 Application Developer 工具生成新的客戶機項目。

    1. 在 AttachmentService 中,右鍵單擊 AttachmentIBM.wsdl,并單擊 Web Services => Generate Client。在 Web Service Client 對話框中,從 Client proxy type 字段選擇 Java Proxy,選中 Overwrite files without warning,然后單擊 Next,如圖 17 中所示:

      圖 17. Web Service Client 對話框
      Web Service Client 對話框

    2. 在 Web Service Selection 頁中,接受缺省設置(所選定的 wsdl 文件)并單擊 Next,如圖 18 中所示。

      圖 18. Web Service Selection 頁
      Web Service Selection 頁

    3. 在 Client Environment Configuration 頁的 Client project 字段鍵入 AttachmentClient,并接受 ear 文件的缺省設置。單擊 Next,如圖 19 中所示:

      圖 19. Client Environment Configuration 頁
      Client Environment Configuration 頁

    4. 在 Web Service Proxy 頁中,接受缺省值,并單擊 Finish,如圖 20 中所示:

      圖 20. Web Service Proxy 頁
      Web Service Proxy 頁

    5. 向導完成處理時,將在 Dynamic Web Projects 下看到新建的 AttachmentClient 項目。打開此項目,并展開所有文件夾,以確定向導生成的內容,如圖 21 中所示:

      圖 21. 向導輸出
      向導輸出

    JavaSource 文件夾下的 ibm.attachment 包中包含一系列重要的類:

    • AttachmentIBM.java——這是表示服務本身的 Java 接口,提供了其操作的聲明。
    • AttachmentIBMBindingStub.java——這是實現 AttachmentIBM 接口的類。此類的代碼綁定到 Web 服務,并調用 Web 服務。
    • AttachmentIBMProxy.java——此類用于檢索 Web 服務的實例。此類中的代碼首先進行 JNDI 查詢,以確定是否可以獲得服務的實例。如果未找到服務,它將使用 AttachmentIBMServiceLocator 類來為其獲得服務的實例。
    • AttachmentIBMService.java——此 Java 接口定義用于查找服務的方法。它由 AttachmentIBMServiceLocator 類實現。
    • AttachmentIBMServiceLocator.java——此類包含查找服務和返回 AttachmentIBM 服務實例的代碼。

    另一個有意思的文件 AttachmentIBM_mapping.xml 位于 WebContent => WEB-INF 下。此文件與 AttachmentService 項目中的同名文件具有相同的作用:描述從 XML 流到服務操作的方法簽名中聲明的 Java 類型的映射。同樣,此文件的內容相當晦澀,但構造這些映射的規則在 JAX-RPC 規范中進行了描述。

    添加測試 JSP 文件

    測試 Web 服務前,還需要做最后一件事。需要提供使用生成的 AttachmentIBMProxy 與 Web 服務通信的代碼。本練習隨附的一個簡單 JSP 文件提供了此功能。我們將說明將此代碼導入到客戶機項目的過程,另外還將給出代碼,以便您能將其放入到自己的 JSP 中。

    1. 在 AttachmentClient 項目中,導航到 WebContent 文件夾,右鍵單擊該文件夾,并選擇 import => File System => Next。
    2. 在 Import 對話框中,瀏覽到放置示例代碼的文件夾,并選擇 AttachmentIBMTest.jsp 文件,然后單擊 Finish,如圖 22 中所示:

      圖 22. 向導輸出
      向導輸出

    針對希望提供自己的 JSP 的情況,清單 7 中顯示了我們在示例 JSP 中包含的簡單代碼:


    清單 7. 示例 JSP
    <%@page contentType="text/html;charset=UTF-8"%><HTML>
                <HEAD>
                <TITLE>Attachment Test </TITLE>
                </HEAD>
                <BODY>
                <H1>FedTest</H1>
                <jsp:useBean id="sampleAttachmentProxyid" scope="session"
                class="ibm.attachment.AttachmentIBMProxy" />
                <%
                try {
                String imageFileName = "c:/temp1/fed.jpg";
                String zipFileName = "c:/temp1/fed.zip";
                javax.activation.FileDataSource fds =
                new javax.activation.FileDataSource(zipFileName);
                javax.activation.DataHandler dh =
                new javax.activation.DataHandler(fds);
                java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
                java.awt.Image image = toolkit.createImage(imageFileName);
                sampleAttachmentProxyid.sendAttachments("Body Text",
                "Text Attachment", image, dh);
                } catch (Exception e) {
                %>
                Exception: <%=e.toString() %>
                <%
                }
                String doneString = "Done";
                %>
                <%=doneString %>
                </BODY>
                </HTML>
                

    務必注意,jsp 文件的主體中引用的 jpg 文件和 zip 文件的名稱和位置必須與您在本練習的第一步中部署這些文件時使用的名稱和位置匹配。

    AttachmentClient 項目現在已完成。此項目的內容應與圖 23 中所示相同:


    圖 23. 最終的項目
    最終的項目




    回頁首


    使用生成的客戶機測試服務

    在此部分,我們將測試服務并查看輸出。

    啟動測試

    1. 為了確保服務器已準備好進行測試,最好重新構建工作區。為此,請選擇 Project => Clean,然后選擇 Clean all projects 并單擊 OK。
    2. 應再次將更改部署到服務器。轉到 Servers 選項卡,右鍵單擊 WebSphere server 并單擊 Publish。
    3. 要啟動測試,請右鍵單擊 AttachmentClient 項目中的 AttachmentIBMTest.jsp 文件,并選擇 Run=>Run on Server。
    4. 在 Select a Server 對話框中,選擇 WebSphere server 并單擊 Finish,如圖 24 中所示:

      圖 24. Server Selection 頁
      Server Selection 頁

    這將打開一個瀏覽器,您可以在瀏覽器中看到來自 JSP 的輸出。由于 JSP 文件在顯示輸出前會調用 AttachmentIBMProxy,測試的結果應該在瀏覽器顯示 JSP 的輸出后很快在 Console 選項卡中顯示測試的結果。也就是說,不必在瀏覽器中進行任何單擊操作來完成測試。

    查看輸出

    請單擊 Console 選項卡,以查看測試的輸出,如圖 25 中所示:


    圖 25. 測試輸出
    測試輸出

    輸出表明,處理程序檢查了 SOAP 消息,發現了我們的三個附件,并輸出了每個附件的 mine 類型。您將看到 Web 服務的輸出顯示了兩個字符串(一個來自消息主體,一個來自附件)、一些圖像屬性以及表明存在 zip 附件的信息。(本文不討論如何使用包含 zip 文件的 DataHandler。)





    回頁首


    總結

    在本文中,我們說明了一項用于創建能接收包含附件(除消息主體中的正常內容外)的 SOAP 消息的 Web 服務的技術。在這個簡單的示例中,服務會接收主體中的文本消息以及作為附件的文本消息、jpeg 文件和 zip 文件。我們隨后在測試服務器上運行了該應用程序,并對其輸出進行了觀察。






    回頁首


    下載

    描述名字大小下載方法
    Sample code for this article AttachmentsFiles.zip 8KB  FTP|HTTP

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>