走在架構(gòu)師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項目管理 Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
                介紹:
                    面向服務(wù)架構(gòu)(SOA,Services-oriented architecture)和Web Services已經(jīng)變成了當(dāng)前行業(yè)的熱點(diǎn)話題。XFire正是在這種情況下產(chǎn)生的。它能夠使POJO發(fā)布為最少的Web Services,而只需要付出最小化的努力。從而,它使希望使用這項技術(shù)的初級開發(fā)者的學(xué)習(xí)曲線變得平緩。同時,由于它兼容最新標(biāo)準(zhǔn)和提供了豐富的API,XFire為高級用戶提供了更多的大好機(jī)會。
                    步驟清單:   

                   1、 檢查Java類的方法和默認(rèn)構(gòu)造函數(shù)確保為public

               2、 增加XFire servlet相關(guān)條目到web.xml中

               3、 創(chuàng)建services.xml,把它放到WEB-INF/classes/META-INF/xfire目錄下

               4、 增加XFire和第三方包到你的Web應(yīng)用的WEB-INF/lib文件夾中


                    實(shí)際例子:
           0. 定義 web.xml
                <servlet>
                  <servlet-name>XFireServlet</servlet-name>
                  <display-name>XFire Servlet</display-name>
                  <servlet-class>org.codehaus.xfire.transport.http.XfireConfigurableServlet
                   </servlet-class>
              </servlet><servlet-mapping>
                  <servlet-name>XFireServlet</servlet-name>
                  <url-pattern>/servlet/XFireServlet/*</url-pattern>
              </servlet-mapping>    
              <servlet-mapping>
                  <servlet-name>XFireServlet</servlet-name>
                  <url-pattern>/services/*</url-pattern>
              </servlet-mapping>

           1. 定義接口           

          public interface IBankingService { 

              public String transferFunds(
                  String fromAccount, String toAccount, double amount, String currency);
                 
          }

          2.定義實(shí)現(xiàn)

          import java.text.NumberFormat;
          import java.text.DecimalFormat;

          /** XFire WebServices sample implementation class.
          */
          public class BankingService implements IBankingService {
             
              //Default constructor.
              public BankingService(){   
              }
             
              /** Transfers fund from one account to another.
              */
              public String transferFunds(
                  String fromAccount, String toAccount, double amount, String currency){
                 
                  String statusMessage = "";
                               
                  //Call business objects and other components to get the job done.
                  //Then create a status message and return.
                  try {
                      NumberFormat formatter = new DecimalFormat("###,###,###,###.00");      
                      statusMessage = "COMPLETED: " + currency + " " + formatter.format(amount)+
                      " was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;
                  } catch (Exception e){
                      statusMessage = "BankingService.transferFunds(): EXCEPTION: " + e.toString();
                  }
                  return statusMessage;
              }
             
          }

          3. 定義 web 描述
          <beans xmlns="http://xfire.codehaus.org/config/1.0">
           
            <service>
              <name>Banking</name>
              <namespace>mybank</namespace>
              <serviceClass>com.mybank.xfire.example.IBankingService</serviceClass>
              <implementationClass>com.mybank.xfire.example.BankingService</implementationClass>
            </service> 
           
          </beans>
          4.部署獲得WSDL
              WSDL的URL應(yīng)該是:http://localhost:8080/websvc/services/Banking?wsdl。
          5. 開發(fā)客戶端
          //Create a metadata of the service     
                  Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);       
                  log.debug("callSoapServiceLocal(): got service model." );
            
                  //Create a proxy for the deployed service
                  XFire xfire = XFireFactory.newInstance().getXFire();
                  XFireProxyFactory factory = new XFireProxyFactory(xfire);     
             
                  String serviceUrl = "http://localhost:8080/websvc/services/Banking";
                 
                  IBankingService client = null;
                  try {
                      client = (IBankingService) factory.create(serviceModel, serviceUrl);
                  } catch (MalformedURLException e) {
                      log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());
                  }   
                        
                  //Invoke the service
                  String serviceResponse = "";
                  try {
                      serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency);
                 } catch (Exception e){
                      log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());                
                      serviceResponse = e.toString();
                  }       





          本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請注明出處,如有版權(quán)問題請及時通知。由于博客時間倉促,錯誤之處敬請諒解,有任何意見可給我留言,愿共同學(xué)習(xí)進(jìn)步。
          posted on 2007-12-19 22:37 Jack.Wang 閱讀(1749) 評論(4)  編輯  收藏 所屬分類: 開發(fā)技術(shù)

          Feedback

          # re: XFire 應(yīng)用 2007-12-20 08:26 sitinspring
          做個記號,有空細(xì)看.  回復(fù)  更多評論
            

          # re: XFire 應(yīng)用 2007-12-20 09:05 Grails
          啊 Client有這么復(fù)雜啊
          client = new Client(new URL("http://localhost:8080/websvc/services/Banking?wsdl"));
          Object[] results = client.invoke("transferFunds", new Object[] {});
          這樣應(yīng)該就可以了吧?  回復(fù)  更多評論
            

          # re: XFire 應(yīng)用 2007-12-20 11:04 屹礫
          先看看...  回復(fù)  更多評論
            

          # re: XFire 應(yīng)用 2007-12-20 11:12 esmiles
          現(xiàn)在XFire不是不更新了嗎?不是合并后進(jìn)入Apache組織了嗎?
          能否介紹一下。  回復(fù)  更多評論
            

          主站蜘蛛池模板: 高安市| 大关县| 柘荣县| 若羌县| 崇明县| 年辖:市辖区| 锡林郭勒盟| 板桥市| 平江县| 民勤县| 延庆县| 厦门市| 浦江县| 泗洪县| 大渡口区| 临夏市| 遂平县| 兴宁市| 监利县| 邹平县| 龙江县| 昔阳县| 广南县| 汶上县| 兴城市| 易门县| 乐平市| 石林| 巫山县| 石楼县| 公安县| 张家川| 东台市| 西畴县| 介休市| 巴林右旗| 榆树市| 集贤县| 浮梁县| 汕尾市| 湘阴县|