posts - 297,  comments - 1618,  trackbacks - 0
          早前的一篇文章,今天才發表,貼上來,:)
          請勿轉載
          原文出處:http://tech.it168.com/j/2007-09-26/200709260923046.shtml

          XFire是與Axis 2并列的新一代Web Service框架,通過提供簡單的API支持Web Service各項標準協議,幫助你方便快速地開發Web Service應用。

          相對于Axis來說,目前XFire相對受歡迎,加上其提供了和Spring集成的支持,在目前的Web Service開源社區擁有眾多的追隨者。并且因為XFire為Spring提供的支持,使得我們可以很容易在Spring中使用XFire構建Web Service應用。

          XFire與Axis2相比具有如下特征:

          l         支持一系列Web Service的新標準--JSR181、WSDL2.0 、JAXB2、WS-Security等;

          l         使用Stax解釋XML,性能有了質的提高。XFire采用Woodstox 作Stax實現;

          l         容易上手,可以方便快速地從pojo發布服務;

          l         支持Spring、Pico、Plexus、Loom等容器;

          l         靈活的Binding機制,包括默認的Aegis,xmlbeans,jaxb2,castor;

          l         高性能的SOAP 棧設計;

          l         支持Spring、Pico、Plexus、Loom等容器。

          XFire與Axis1性能的比較如下:

          l         XFire比Axis1.3快2-6倍;

          l         XFire的響應時間是Axis1.3的1/2到1/5。

          XFire在WebService框架中開始較晚,它從現有的框架中借鑒了許多優秀的理念,力爭將Web Service的應用開發難度降到最低。此外,還提供了各種綁定技術、支持多種傳輸協議,對WebService體系中許多新的規范提供了支持。

          下面讓我們來看一個XFire于Spring集成的helloWorld的簡單例子。

          一.實現的功能和特點

              本例具有如下功能和特點:

          1) 基于J2EE平臺的Web Service服務;

          2) 開發方便,配置簡單;

          3) 與spring無縫集成。

          XFire是完全基于流數據處理進行工作的系統,這意味著XFire不是將整個SOAP文檔緩存在內存中,而是以管道的方式接收SOAP流數據。這種工作方式的轉變帶來了可觀的性能回報,同時節省了內存的占用。

            XFire從管道中接收一個SOAP請求到返回一個SOAP響應,會經歷一系列的階段。在管道調用的任何一個階段,XFire都可以添加一些額外的Handler,在對消息進行加工處理后再傳入到下一個階段中。在SOAP請求消息對Web Service發起真正調用之前,分別會經過傳輸、預轉發、轉發、策略實施、用戶信息處理、預調用、服務調用等階段。

          二.開發環境

              筆者的開發環境描述如下:

          1) jdk: 1.5版本;

          2) Tomcat:5.5.20;

          3) MyEclipse:5.1.1 GA。

          三.開發步驟

          1. 工程與環境的建立

          在MyEclipse中新建Web工程,名為webservice_helloworld。選擇該工程后,點擊右鍵選擇MyEclipse->Add Web Service Capabilities,彈出Add Web Service Capabilities對話框,點擊“Next”,彈出Project Library Configuration對話框,默認選擇Core Libraries,點擊“Finish”按鈕,完成XFire核心包的添加。為了后續的客戶端的測試,還需讀者加入commons-httpclient.jar包到WEB-INF/lib下。

          部署后可看到此時WEB-INF/lib的jar包列表如下:

          activation-1.1.jar、commons-beanutils-1.7.0.jar、commons-codec-1.3.jar、commons-httpclient.jar、commons-logging-1.0.4.jar、jaxen-1.1-beta-9.jar、jaxws-api-2.0.jar、jdom-1.0.jar、jsr173_api-1.0.jar、mail-1.4.jar、saaj-api-1.3.jar、saaj-impl-1.3.jar、spring-1.2.6.jar、stax-api-1.0.1.jar、wsdl4j-1.5.2.jar、wstx-asl-3.0.1.jar、xbean-2.1.0.jar、xbean-spring-2.5.jar、xfire-aegis-1.2.2.jar、xfire-annotations-1.2.2.jar、xfire-core-1.2.2.jar、xfire-java5-1.2.2.jar、xfire-jaxws-1.2.2.jar、xfire-jsr181-api-1.0-M1.jar、xfire-spring-1.2.2.jar、XmlSchema-1.1.jar

          為了后續的開發和測試,在src目錄下分別建立test和webservice目錄,分別用于存放測試文件和webservice的相關類。

          2.Web Service實現的編寫

              在本例中,我們只是做一個helloWorld的簡單例子。Web Service服務端提供一個根據輸入的名字信息回復相應的helloWorld信息的。例如,當名字為“阿蜜果”時,恢復信息為“hello,阿蜜果”。下面讓我們一步一步來開始進行編碼。

          1)web.xml的配置

          一般情況下,我們通過HTTP作為Web Service的傳輸協議,這樣我們只需啟動一個Web服務器(如Tomcat,在本例中使用的是Tomcat5.5.20),這樣客戶端就可以通過HTTP訪問到Web Service服務。為了集成Spring容器,XFire專門提供一個XFireSpringServlet,我們可以在web.xml中配置該Servlet,將Spring容器中定義的Web Service在某個URI下發布。

          為了能正確使用XFire,需在web.xml中進行相應配置,在該文件中配置XFire的servletservlet-mapping。同時因為本實例需要將XFire集成到Spring中,因而需要在web.xml文件中加載Spring的相應配置文件。在本實例中,我們首先在WEB-INF下建立兩個配置Spring配置文件,一個為applicationContext.xml,該文件用來定義本工程的bean,一個為xfire-servlet.xml,用來配置XFire的相關bean。修改后的web.xml的內容如下所示:

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
              
          <display-name>XFireService</display-name>
              
          <!-- begin Spring配置 -->
              
          <context-param>
                 
          <param-name>contextConfigLocation</param-name>
                 
          <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>
              
          </context-param>
              
          <listener>
                 
          <listener-class> org.springframework.web.context.ContextLoaderListener
                 
          </listener-class>
              
          </listener>
               
          <listener> 
                 
          <listener-class>     org.springframework.web.util.IntrospectorCleanupListener
                 
          </listener-class>
              
          </listener>
              
          <!-- end Spring配置 -->

              
          <!-- begin XFire 配置 -->
              
          <servlet>   
                 
          <servlet-name>xfire</servlet-name>   
                 
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
              
          </servlet>   
              
          <servlet-mapping> 
                 
          <servlet-name>xfire</servlet-name>
                 
          <url-pattern>*.ws</url-pattern>
              
          </servlet-mapping>
              
          <servlet>
                 
          <!-- 配合Spring容器中XFire一起工作的Servlet-->
                 
          <servlet-name>xfireServlet</servlet-name>
                 
          <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
              
          </servlet>
              
          <servlet-mapping>
                 
          <servlet-name>xfireServlet</servlet-name>
                 
          <!-- 在這個URI下開放Web Service服務 -->
                 
          <url-pattern>/service/*</url-pattern>
              
          </servlet-mapping>
              
          <!-- end XFire 配置 -->
          </web-app>

              2)Web Service的接口類HelloWorld.java和對應實現類HelloWorldImpl.java

          為了用Web Service完成HelloWorld功能,我們首先在src/webservice目錄下建立接口類HelloWold.java。它僅包含一個sayHelloWorld(String name)的方法,其詳細內容如下:

          package webservice;

          /**
           *HelloWorld的接口類.
           
          */

          publicinterface HelloWorld 
          {
              
          /**
               *對名字為name的人打招呼.
               *@paramname名字
               *@return返回打招呼的字符串
               
          */

              String sayHelloWorld(String name);
          }

          我們還需要建立一個對應的實現類,來實現sayHelloWorld的功能,該實現類即為HelloWorldImpl.java。該類的詳細內容如下:
          package webservice;
          /**
           *HelloWorld的實現類.
           
          */

          publicclass HelloWorldImpl 
          implements HelloWorld {
              
          public String sayHelloWorld(String name) {
                 String helloWorld 
          = "hello," + name;
                 
          return helloWorld;
              }

          }

          3)Spring配置文件applicationContext.xmlxfire-servlet.xml的配置

          首先我們在applicationContext.xml文件中配置對應的bean——HelloWorldBean,該xml文件的內容如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
              "http://www.springframework.org/dtd/spring-beans.dtd"
          >
          <beans>
              
          <bean id="HelloWorldBean" class="webservice.HelloWorldImpl"/>
          </beans>

               這個配置文件很簡單,在此不詳述。

          XFire為Spring提供了方便易用的導出器XFireExporter,借助該導出器的支持,我們可以在Spring容器中將一個POJO導出為Web Service。HelloWorld是業務服務類,在此擁有一個sayHelloWorld的方法,我們希望將此方法開放為Web Service。在實際應用中,如果某個類具有眾多的方法,而其中的某些方法不需要開放為Web Service的情況下,我們可以定義一個窄接口,該接口中只需定義那些開放為Web Service的業務方法。

          將一個業務類所有需要開放為Web Service的方法通過一個窄接口來描述是值得推薦的作法,這讓Web Service的接口顯得很“干凈”。其次,XFire的導出器也需要服務接口的支持,因為它采用基于接口的動態代理技術。

          窄接口中的方法在真實的系統中可能需要引用其它的業務類或DAO獲取數據庫中的真實數據,為了簡化實例,我們在此簡化了實例。

          下面讓我們看看在xfire-servlet.xml文件中導出器的設置,該文件內容如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
              "http://www.springframework.org/dtd/spring-beans.dtd"
          >
          <beans>
              
          <!-- 引入XFire預配置信息 -->
              
          <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
              
          <!—定義訪問的url-->
              
          <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
                 
          <property name="urlMap">             
                     
          <map>                 
                        
          <entry key="/HelloWorldService.ws">                  
                            
          <ref bean="HelloWorldService" />                 
                        
          </entry>             
                     
          </map>         
                 
          </property>     
              
          </bean>     

              
          <!-- 使用XFire導出器 -->
              
          <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
                 
          <!-- 引用xfire.xml中定義的工廠 -->
                 
          <property name="serviceFactory" ref="xfire.serviceFactory" />
                 
          <!-- 引用xfire.xml中的xfire實例 -->
                 
          <property name="xfire" ref="xfire" />
              
          </bean>
              
          <bean id="HelloWorldService" parent="baseWebService">
                 
          <!-- 業務服務bean -->
                 
          <property name="serviceBean" ref="HelloWorldBean" />
                 
          <!-- 業務服務bean的窄接口類 -->
                 
          <property name="serviceClass" value="webservice.HelloWorld" />
              
          </bean>
          </beans>

          在上面的配置中,我們可以看到,在該配置文件中引入了xfire.xml這個Spring配置文件。它是在XFire核心JAR包中擁有一個預定義的Spring配置文件,它定義了XFire在Spring中必須用到的一些Bean和資源,需要引入這個預定義的配置文件。從該配置文件中可以看出,我們通過XFireExporter將業務類導出為Web Service,對于任何導出器,我們都需要引入XFire環境,即serviceFactoryxfire,這是標準的配置。ServiceFactory是XFire的核心類,它可以將一個POJO生成為一個Web Service。

          在本實例中,我們通過定義一個baseWebService,其余的webService配置都將該bean作為父bean,這樣可以簡化Spring的配置,不需要多次引入serviceFactory和xfire。

          3. Web Service的測試

              在上一步操作完成之后,我們的這個簡單的Web Service已經編寫完畢,下面讓我們來看看自己的勞動成果吧。

              在瀏覽器中輸入地址:http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl,我們可以看到HelloWorldService對應的WSDL信息,閱讀這個WSDL文檔,我們可以知道HelloWorld的sayHelloWorld方法已經被成功地發布為Web Service了。只要拿到這個WSDL就可以開發相應的客戶端調用程序了。

          XFire為訪問服務端Web Service提供了各種方便的方式:我們一般根據服務地址和窄接口類創建客戶調用程序。

            在不能獲得服務窄接口類的情況下,XFire允許我們通過WSDL文件生成客戶端調用程序,通過指定服務接口的方式調用服務。

          1)通過WSDL文件生成客戶端調用程序

          首先我們通過http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl我們可以獲得WSDL文件HelloWorldService.wsdl,并將其放在src目錄下面,接著我們通過程序訪問該WSDL文件,并調用需測試的方法。此時測試類WebServiceClientTest.java的內容如下所示:

          package test;

          import org.codehaus.xfire.client.Client;
          import org.springframework.core.io.ClassPathResource;
          import org.springframework.core.io.Resource;
          import webservice.HelloWorld;

          /**
           *Copyright2007GuangZhouAmigo.
           *Allrightreserved.   
           *HelloWorld的webservice的測試類.
           *
          @author<a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
           *@version1.0
           *Creationdate:2007-9-16-下午05:36:05
           
          */

          publicclass WebServiceClientTest 

              HelloWorld helloWorld 
          = null;

              publicstaticvoid main(String[] args) 
          throws Exception {
                 WebServiceClientTest test 
          = new WebServiceClientTest();
                 test.testClient();
              }
           
              
              publicvoid testClient() 
          throws Exception {
                 String wsdl 
          = "HelloWorldService.wsdl"//對應的WSDL文件
                 Resource resource = new ClassPathResource(wsdl); 
                 Client client 
          = new Client(resource.getInputStream(), null); //根據WSDL創建客戶實例
                 
                 Object[] objArray 
          = new Object[1];
                 objArray[
          0= "阿蜜果";
                 
          //調用特定的Web Service方法
                 Object[] results = client.invoke("sayHelloWorld", objArray);
                 System.out.println(
          "result: " + results[0]);
              }

          }

          運行該類,可得到如下輸出結果:

          result: hello,阿蜜果

          可看出運行結果正確。

          2)根據服務地址創建客戶端調用程序

              接著讓我們來看一個根據服務地址創建客戶端調用程序的例子。我們可以通過測試類來測試Web Service的正確性,下面讓我們來看一個簡單的測試類,首先我們在src/test目錄建立WebServiceClientTest.java文件,并在src目錄下建立客戶端調用的Spring配置文件client.xml。在client.xml配置文件中我們定義了一個testWebServicebean,該bean訪問wsdlDocumentUrlhttp://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdlWSDL。該xml文件的詳細內容如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
              "http://www.springframework.org/dtd/spring-beans.dtd"
          >
          <beans>
              
          <bean id="testWebService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
                 
          <property name="serviceClass">          
             
          <value>webservice.HelloWorld</value>       
                 
          </property>      
                  
          <property name="wsdlDocumentUrl">         
          <value>http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl</value>       
                  
          </property>      
               
          </bean>
          </beans>

               在WebServiceClientTest.java文件中獲得HelloWorld,并調用它的sayHelloWorld方法來完成測試,該類的詳細內容如下所示:

          package test;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import webservice.HelloWorld;

          /**
           *HelloWorld的webservice的測試類.
           
          */

          publicclass WebServiceClientTest 

              HelloWorld helloWorld 
          = null;

              publicstaticvoid main(String[] args) 
          {
                 WebServiceClientTest test 
          = new WebServiceClientTest();
                 test.testClient();
              }
           

              publicvoid testClient() 
          {
                 ApplicationContext ctx 
          = new ClassPathXmlApplicationContext(
                        
          "client.xml");
                 helloWorld 
          = (HelloWorld) ctx.getBean("testWebService");
                 System.out.println(helloWorld.sayHelloWorld(
          "阿蜜果"));
              }

          }

              在啟動webservice_helloworld工程的情況下,運行WebServiceClientTest類,可看到控制臺包含如下信息:

              hello,阿蜜果

              由此可看出調用Web Service成功。

          四.總結

              與Axis相比,在實施Web Service時XFire更加簡潔高效,并且XFire對Spring提供了強大的支持,可以非常方便地在Spring中使用XFire實施Web Service,因此XFire在短短的時間里成為了受Web Service開發者喜愛的框架。

            XFire為客戶端提供了多種訪問Web Service的方式,如果可以獲取客戶端的窄接口類,則可以采用窄接口類調用Web Service。如果僅能獲取WSDL,XFire也可以采用動態反射的機制調用Web Service。XFire為Eclipse提供了一個可以根據WSDL生成客戶端存根代碼的插件,相信XFire也將為其它非Java語言提供類似的插件。

          技術可用性的一個很大的標準是它是否方便測試,XFire提供多種方式進行Web Service的測試,簡單方便,給Web Service開發人員的測試工作帶來了福音。

          在本文中,筆者通過一個簡單的helloWorld的Web Service例子,詳細地說明了用XFire+Spring構建Web Service時配置文件的相關配置,以及測試的各種方法,也讓讀者見識了XFire與Spring的無縫集成,希望對讀者學習XFire有點幫助。

          posted on 2007-09-26 09:39 阿蜜果 閱讀(53673) 評論(70)  編輯  收藏 所屬分類: Web Service


          FeedBack:
          # re: 使用XFire+Spring構建Web Service
          2007-09-27 10:49 | 千里冰封
          用EJB的方式也可以構建webservice
          不過, spring聽說是很牛的  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service
          2007-09-27 11:23 | 易初風云
          可以,請問一下java遠程調用方法共有多少種方式呢?那種比較好呢?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service
          2007-09-27 12:53 | 千里冰封
          多少種方式?不太清楚,找到自己適用的就可以了  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service
          2007-09-27 17:37 | cnjar
          1)通過WSDL文件生成客戶端調用程序

          不如直接這樣:
          Client client = new Client(new URL("http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl"));  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2007-09-28 17:56 | bigheadbird
          我按照你 的例子寫的,卻完全沒有反應,提示找不到資源,想問一下,可需要
          add spring capabilities?我這種情況可能是什么原因?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2007-09-28 17:59 | bigheadbird
          我是在Web Service的測試這里就沒有反應。
            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2007-09-29 09:43 | bigheadbird
          我找到原因了,applicationContext.xm 文件名我少寫了個p,暈死,我知道了 ,不用add spring capabilities。  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2007-09-29 11:24 | Bruce
          能不能把目錄結構列出來。。。俺是初學者  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2007-09-29 11:35 | 阿蜜果
          @Bruce
          本篇與下篇的例子的目錄結構請參見:
          http://www.aygfsteel.com/amigoxie/gallery/image/9492.html  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2007-09-29 11:39 | Bruce
          謝謝!謝謝!偶現在就去看!  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2007-09-29 11:43 | Bruce
          好用了,謝謝阿蜜果:)
            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2007-11-05 10:31 | dong2590
          java.lang.NoSuchMethodError: javax.xml.namespace.QName.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V

          我按照你的寫了..可是在Tomcat啟動時就報這種錯誤..網上有說這種錯誤.不過很模糊..希望能指導一下.謝謝.
          我用的是JDK1.4.MyEclipse5.0,Tomcat5.0的.  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2007-11-05 13:00 | 阿蜜果
          用Tomcat5.5才行,貌似5.0不行  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2007-11-05 15:00 | dong2590
          @阿蜜果
          我到原因了~是JAR包沖突的問題~Javax.xml.namespace.QName的方法定義太舊,用xfile的lib里面的stax-api-1.0.1.jar和stax-utils-20040917.jar
          并刪除舊的javax.xml.namespace.QName如jaxrpc.jar問題就好了..但是現在又出來個新的問題~
          我在web.xml作了如下配置:
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/xfire-servlet.xml</param-value>
          </context-param>
          但是在Tomcat啟動時.卻報錯.
          ERROR DispatcherServlet:227 - Context initialization failed
          org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/XFire-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/XFire-servlet.xml]
          java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/XFire-servlet.xml]

          我這就搞不懂了~為什么會去到WEB-INF下面去找?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-03-17 09:42 | zqj

          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.handler.SimpleUrlHandlerMapping' defined in ServletContext resource [/WEB-INF/xfire-servlet.xml]: Can't resolve reference to bean 'HelloWorldService' while setting property 'urlMap[/HelloWorldService.ws]'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'HelloWorldService' defined in ServletContext resource [/WEB-INF/xfire-servlet.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'HelloWorldService' defined in ServletContext resource [/WEB-INF/xfire-servlet.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V


          啟動和一直報以上ERROR  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2008-03-24 17:28 | 阿飛
          Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/ws/commons/schema/resolver/URIResolver

          at org.codehaus.xfire.client.Client.initFromDefinition(Client.java:262)
          at org.codehaus.xfire.client.Client.<init>(Client.java:236)
          at org.codehaus.xfire.client.Client.<init>(Client.java:246)
          at com.info.gh.webservice.example1.WebServiceClientTest.testClient(WebServiceClientTest.java:56)
          at com.info.gh.webservice.example1.WebServiceClientTest.main(WebServiceClientTest.java:45)

          請問老報上面的錯誤,是什么原因呀  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-03-24 17:28 | jackie
          你好姐姐,我也向你要一份工程 關于webservice的工程,關于webservice的工程我都想要,還有能給我一起傳基本關于webservice的書嗎?


          我的郵箱: jackie-zheng@163.com

          現在這里謝謝了  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-03-24 17:33 | jackie
          為什么我按照你的步驟建工程的時候怎么就沒有xfire-servlet。xml這個文件呢?  回復  更多評論
            
          # Class not found: webservice.HelloWorld[未登錄]
          2008-03-28 10:09 | lixin
          能不能給您的工程了,我做的發布不起來!謝謝  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-04-16 16:59 | yangpan
          log4j:WARN Please initialize the log4j system properly.
          2008-4-16 16:56:36 org.apache.catalina.core.StandardContext start
          嚴重: Error listenerStart
          2008-4-16 16:56:36 org.apache.catalina.core.StandardContext start
          嚴重: Context [/webservice] startup failed due to previous errors  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-04-16 17:02 | yangpan
          @yangpan
          我是按照 你 的方法做的.可是編譯的時候就報了上面的錯誤...
          我找了很久沒有找到...你幫我看看...  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2008-04-16 20:40 | 阿蜜果
          @阿飛
          錯誤很清楚呢,有jar包沒有包括進去。
          @jackie
          我待會給你發一份
          @yangpan
          留個郵箱吧!也發一份給你  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-04-17 10:13 | yangpan
          ,,謝謝...
          yangpanwww@126.com

          阿密果,你真的是太好了,,,,愿意交我這個朋友不...
          我的QQ:609865047

            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-04-17 15:01 | yangpan
          還有.....我對比了我們 lib\下的所有 的.jar 包 發現xfire-spring-1.2.2.jar jsr173_api-1.0.jar 這兩個我lib里沒有 (可能就是這個原因)

          還有,你上面說" 點擊右鍵選擇MyEclipse->Add Web Service Capabilities,彈出Add Web Service Capabilities對話框,點擊“Next”,彈出Project Library Configuration對話框,默認選擇Core Libraries,點擊“Finish”按鈕,完成XFire核心包的添加。" 我按照做了,,,lib下沒有一個包, lib里的包是我在網上下的xfire-1.1.1,我全拷貝進lib里了,但 里面有沒有上面的.jar包.

          我用的是MyEclipse6.0,Tomcat5.5.
          呵呵..你耐耐心,,幫我看看.....謝謝咯......  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-04-17 17:43 | yangpan
          喔,,...上面的問題我知道可,,
          我加了log4j.properties 后...
          出現 Document root element "beans", must match DOCTYPE root "null" 錯誤..我的是spring2.0
          applicationContext.xml:
          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"" target="_new" rel="nofollow">http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

          而且我也把 XFire Core lib 中有Spring1.2.6 也刪除了
          網上都被我找遍了,,還是沒有發現....
          大姐,幫幫我.....
            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-04-17 18:05 | yangpan
          親愛的阿蜜果
          上面的Spring配置文件applicationContext.xml和xfire-servlet.xml

          是怎么結合在一起的......

          上面的錯誤我解決了,,但又有一個錯誤:

          org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'webservice.example2.UserServiceImpl' is defined



          嗚~~~~~~~我都搞了三天了,,,,你就幫幫我了,,,

          快幫你的 項目 給我....我

            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-04-18 11:22 | yangpan

          嗚~~~~~~~~~~~~~

          錯誤找到咯,,,,,,,三天啊. 嗚~~~~~~~~~

          是我的.xml 寫錯了文件

          我該罵..你們罵我吧  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-05-22 15:31 | Nic
          我的ContextLoaderListener 這個監聽器加載的時候有問題 是不是缺少某個JAR包???。能給我發一份嗎?我的郵箱是:morosefingerling@gmail.com 不勝感激  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-05-22 17:56 | Nic
          我的問題解決了。。不知道大家是不是和我遇到的問題一樣,簡單說一下:
          我用的是MyEclipse6.0
          一、用Eclipse Add Web Service Capabilities 這樣使用的是Spring1.2的包,而我使用的是Spring2.0 這樣產生了沖突。刪除1.2的就OK了
          二、web.xml中 <param-value>/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/xfire-servlet.xml</param-value>才能找到對應的文件,xfire-servlet.xml文件放在工程的/WEB-INF/xfire-servlet.xml和,/WEB-INF/classes/xfire-servlet.xml 下。
          希望對大家有幫助,還是要多謝阿蜜果。有空可以聊聊天啊 16640813 :)  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-06-04 18:29 | 小貓
          繼續研究種  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-06-20 10:27 | lhy
          能不能發份代碼我看看,我按照你寫的還是沒配出來,搞了好幾天了,郁悶啊
          郵箱:li_hy2004@163.com
          謝謝了  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-06-23 10:15 | lhy
          我的問題解決了,和nic一樣是spring包的問題,沒想到xfire的包里已經有spring的包了,我又加了spring2.0的包-_-!
          多謝阿蜜瓜^^  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-07-20 09:53 | lifeng
          為什么我刪了那個spring1.x的包就不行呢,說org/codehaus/xfire/spring/xfire.xml不存在。。。還要做什么改動嗎?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2008-09-08 16:30 | jane
          文章簡介實用.一試成功.真是舒服的體驗過程.  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-09-19 14:22 | 楊培海
          阿米果老師,Xfire怎么傳遞數組?。?nbsp; 回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-11-18 16:53 | 湯帥
          請問在創建客戶端的時候必須要有一個HelloWorld這個類嗎?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-12-09 21:53 | dmx
          Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/Credentials
          at java.lang.Class.getDeclaredConstructors0(Native Method)
          at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
          at java.lang.Class.getConstructor0(Unknown Source)
          at java.lang.Class.getConstructor(Unknown Source)
          at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:108)
          at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
          at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
          at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
          at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
          at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
          at org.codehaus.xfire.client.Client.invoke(Client.java:336)
          at org.codehaus.xfire.client.Client.invoke(Client.java:368)
          at test.WebServiceClientTest.testClient(WebServiceClientTest.java:25)
          at test.WebServiceClientTest.main(WebServiceClientTest.java:14)


          幫我看看怎么回事好么?謝謝!  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2008-12-10 20:20 | dmx
          @dmx
          版主 救助啊  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2009-04-15 19:05 | fire1
          這個問題 是由于application.xml文件的頭部信息不兼容  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2009-05-13 16:56 | A.biao
          Retrieving document at 'null'.
          log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.xml.XmlBeanDefinitionReader).
          log4j:WARN Please initialize the log4j system properly.

          Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity
          at java.lang.Class.getDeclaredConstructors0(Native Method)
          at java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
          at java.lang.Class.getConstructor0(Class.java:2640)
          at java.lang.Class.getConstructor(Class.java:1629)
          at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:108)
          at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
          at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
          at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
          at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
          at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
          at org.codehaus.xfire.client.Client.invoke(Client.java:336)
          at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)
          at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
          at $Proxy0.sayHelloWorld(Unknown Source)
          at test.WebServiceClientTest.testClient(WebServiceClientTest.java:27)
          at test.WebServiceClientTest.main(WebServiceClientTest.java:18)

          按啊蜜果老師的教程做到測試時就報這個錯誤了!能幫幫我找出什么原因嗎?
          還有那個 Retrieving document at 'null'.
            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2009-05-15 16:47 | nihao
          2009-5-15 8:46:04 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
          信息: Loading XML bean definitions from class path resource [client.xml]
          2009-5-15 8:46:04 org.springframework.context.support.AbstractRefreshableApplicationContext refreshBeanFactory
          信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=3043939]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [testWebService]; root of BeanFactory hierarchy
          2009-5-15 8:46:04 org.springframework.context.support.AbstractApplicationContext refresh
          信息: 1 beans defined in application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=3043939]
          2009-5-15 8:46:04 org.springframework.core.CollectionFactory <clinit>
          信息: JDK 1.4+ collections available
          2009-5-15 8:46:04 org.springframework.context.support.AbstractApplicationContext initMessageSource
          信息: Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@f62373]
          2009-5-15 8:46:04 org.springframework.context.support.AbstractApplicationContext initApplicationEventMulticaster
          信息: Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@7c6768]
          2009-5-15 8:46:04 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
          信息: Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [testWebService]; root of BeanFactory hierarchy]
          Retrieving document at 'null'.  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2009-07-14 16:49 | birbe
          Could not open ServletContext resource [/WEB-INF/xfire-servlet.xml] 是怎么回事,另外 為什么訪問地址是http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl 其中 webservice_helloworld不知道是怎么回事  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2009-07-14 17:01 | tanglong
          阿米果姐姐,小弟我是初學著,能不能也給我發一份啊 我的郵箱是
          tanglongjava@163.com  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇[未登錄]
          2009-07-22 17:11 | tang
          出現如下同樣問題:

          2007-11-05 15:00 | dong2590

          @阿蜜果
          我到原因了~是JAR包沖突的問題~Javax.xml.namespace.QName的方法定義太舊,用xfile的lib里面的stax-api-1.0.1.jar和stax-utils-20040917.jar
          并刪除舊的javax.xml.namespace.QName如jaxrpc.jar問題就好了..但是現在又出來個新的問題~
          我在web.xml作了如下配置:
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/xfire-servlet.xml</param-value>
          </context-param>
          但是在Tomcat啟動時.卻報錯.
          ERROR DispatcherServlet:227 - Context initialization failed
          org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/XFire-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/XFire-servlet.xml]
          java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/XFire-servlet.xml]

          我這就搞不懂了~為什么會去到WEB-INF下面去找??
          為什么呢?
          能加我QQ嗎?QQ:52016639==>驗證提示:唐  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2009-12-16 19:00 | Will云
          按照你的教程還是比較容易的,只是我想問下,xfire-servlet.xml這個文件是不是只能放在webinf下?因為我一改位置,就會報錯,而applicationcontext.xml換了位置就沒問題的  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2010-01-14 14:10 | changchang9977
          你把工程發給我一份吧!郵箱:changchang9977@sina.com  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2010-03-16 16:30 | 云運
          我最后需要把wsdl文件發給別人的,我怎么才能找到或得到這個wsdl文件呀?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2010-03-16 16:31 | 云運
          很急的,我的QQ:929304944,能給我發到我的Q郵箱嗎?或加我的Q。  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2010-06-22 18:41 | greenfish
          我把第一個例子自己練習了下,有這個錯誤。。
          Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not find operation with name sayHelloWorld
          at org.codehaus.xfire.client.Client.invoke(Client.java:366)
          at test.WebServiceClientTest.testClient(WebServiceClientTest.java:31)
          at test.WebServiceClientTest.main(WebServiceClientTest.java:20)

          請問咋回事呢。。我實在不知道怎么做了。。呵呵,麻煩幫我看看。。謝謝~  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2011-03-25 09:27 | 小GG
          fff  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2011-05-31 16:36 | 問天
          我今天看了下你寫的東西,我個人感覺你寫的東西對我有用, 因為我現在也需要寫個第三接口,能不能把發份完整的項目給我,好讓我琢磨琢磨下

          郵箱:kavinjuan183@sina.com
          謝謝  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2011-09-02 11:12 | pande
          很好的教程,一看就會。  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2011-09-22 11:19 | 老瓜
          @阿蜜果
          你好,能加入12375544這個QQ群嘛,500人的技術群,你這樣的高手不多見啊,歡迎你加入一塊聊技術啊  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2011-10-14 09:20 | youknow
          我的項目要用到webservice,我自己調試了么有成功,可以給我提供下項目源碼。讓我參考下嗎,謝謝。
          郵箱是ityouknow@126.com  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2011-11-16 12:31 | JIANCHIC
          對@cnjar
            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2011-11-28 11:10 | 小哦哈給你
          @jackie
          需要自己建的!那個文件相當于另外一個spring配置文件,只是把他分解出來了!  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2012-06-14 23:04 | 淮少
          你怎么解決的,說明下啊@yangpan
            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2012-07-07 23:34 | 馬云
          好文章~  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2012-09-06 15:51 | 小草
          你把工程發給我一份嗎,非常感謝!郵箱:381802454@qq.com  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2013-03-02 14:29 | 張虹劍
          @tanglong
            回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2013-03-02 14:29 | 張虹劍
          給我也發一份呀  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2013-05-01 19:30 | wxd
          請問與spring集成后,某個Web Service的命名空間和方法名是什么?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2013-05-03 10:51 | wxd
          @wxd
          我太笨了,可以通過訪問
          http://localhost:8080/*.ws?wsdl
          上面給出了命名空間和方法名

          非常感謝博主的這幾篇博文幫助我完成項目,貌似博主還是女生,真厲害~  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2013-10-28 17:41 | 劉東旭
          liu478048060@163.com
          不知道您現在還有這個項目嗎?
          有的話能給一份作為學習參考嗎?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2013-10-28 17:42 | 劉東旭
          liu478048069@163.com
          不知道您現在還有這個項目嗎?
          有的話能給一份作為學習參考嗎?
          不好意思 剛才的品論郵箱弄錯了
          liu478048069@163.com  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2014-06-13 16:08 | 張黎明
          請問一下大神,這種方式加上頭驗證信息怎么處理?網絡上大部分是使用service.xml配置,不知道xfire-servlet.xml 中能否進行配置?  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2014-08-03 10:25 | jiuzuizhiren
          可以把源碼發到我的郵箱嗎?liaowenxiong@sina.com 或者 QQ離線發送給我,QQ:1036450138 謝謝了  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2014-11-27 10:37 | 菜鳥新手

          Client client = new Client(new URL("http://localhost:8083/myAppName/services/taskReveiceService?wsdl"));


          Exception in thread "main" java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl.getInputEncoding()Ljava/lang/String;  回復  更多評論
            
          # org.codehaus.xfire.XFireRuntimeException
          2015-05-25 20:46 | lqmnm1213

          String wsdl = "HelloWorldService.wsdl"; //對應的WSDL文件
          Resource resource = new ClassPathResource(wsdl);
          Client client = new Client(resource.getInputStream(), null);


          Exception in thread "main" org.codehaus.xfire.fault.XFireFault: Server returned error code = 404 for URI : http://localhost:8080/XFireSpring/HelloWorldService.ws. Check server logs for details
          at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
          at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:83)
          at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
          at org.codehaus.xfire.client.Client.invoke(Client.java:336)
          at org.codehaus.xfire.client.Client.invoke(Client.java:368)
          at test.WebServiceClientTest.testClient(WebServiceClientTest.java:54)
          at test.WebServiceClientTest.main(WebServiceClientTest.java:28)
          Caused by: org.codehaus.xfire.XFireRuntimeException: Server returned error code = 404 for URI : http://localhost:8080/XFireSpring/HelloWorldService.ws. Check server logs for details
          at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:130)
          at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
          at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
          at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
          at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
          ... 5 more  回復  更多評論
            
          # re: 使用XFire+Spring構建Web Service(一)——helloWorld篇
          2015-08-08 18:39 | 卉卉
          能不能也給我發份呢!!謝謝了!!!zhangfeifei89757@qq.com  回復  更多評論
            
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296377
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 博客| 客服| 湖州市| 泽普县| 定州市| 双鸭山市| 肃宁县| 独山县| 涿鹿县| 肥东县| 灵山县| 资兴市| 丹凤县| 大理市| 昌吉市| 织金县| 理塘县| 福贡县| 平乐县| 滁州市| 宽甸| 仁寿县| 昂仁县| 天台县| 满洲里市| 屏东县| 横峰县| 尼勒克县| 永福县| 乡宁县| 绥阳县| 安吉县| 炉霍县| 闻喜县| 通江县| 万州区| 南投市| 大丰市| 繁昌县| 明溪县| 金华市|