無聊人士

          搬家==》www.soapui.cn

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            32 隨筆 :: 0 文章 :: 60 評論 :: 0 Trackbacks
          白衣同志是個好同志,“刨蟲”啊,俺現在用的O/R Broker就是白衣“刨”出來的!

          今天準備睡覺,發現白衣同志blog上在推薦“Web Service Framework:XFire”( http://www.aygfsteel.com/calvin/archive/2005/12/04/22390.html).嘿嘿,受夠了axis,終于解放了。

          xfire的user's guide做得很漂亮,俺這種E盲都能看個半懂。quick start看完,直接跳到spring一章,順帶拿手上的一個測試工程做測試,HelloXfire。

          xfire 要加的包一大堆,guide上“Dependency Guide”這一章純粹是在糊弄人,我的工程是webwork2.1.7(freemarker2.3.4)+spring1.2.5+ hibernate3.0.5+oracle8.1.7的東西,原來的jar不算,新加了一堆進去,最后所有的包加進來有19MB,暈啊!
          antlr-2.7.5H3.jar
          aopalliance.jar
          asm.jar
          asm-attrs.jar
          cglib-nodep-2.1_2.jar
          classes12.jar
          commons-codec-1.3.jar
          commons-collections-3.1.jar
          commons-dbcp-1.2.1.jar
          commons-fileupload.jar
          commons-io-1.1.jar
          commons-lang-2.1.jar
          commons-logging.jar
          commons-pool-1.2.jar
          concurrent-1.3.4.jar
          cos-multipart.jar
          dom4j-1.6.jar
          freemarker.jar
          groovy-all-1.0-jsr-04.jar
          hibernate3.jar
          javamail-1.3.2.jar
          jaxen-1.1-beta-8.jar
          jdom-1.0.jar

          jencrypt.jar
          jta.jar
          log4j-1.2.9.jar
          lucene-1.4.3.jar
          nls_charset12.jar
          ognl.jar
          oscache-2.2.jar
          oscore.jar
          quartz-1.5.0.jar
          quartz-oracle-1.5.0.jar
          quartz-weblogic-1.5.0.jar
          spring.jar
          spring-xwork-integration.jar
          stax-1.1.2-dev.jar
          stax-api-1.0.jar
          stax-utils-snapshot-20040917.jar

          velocity-dep.jar
          webflow-2.1.7.jar
          webwork-2.1.7.jar
          webwork2-spring.jar
          xfire-all-1.0-M6a.jar
          xwork.jar
          activation-1.0.2.jar
          commons-beanutils-1.7.0.jar
          wsdl4j-1.5.1.jar


          user's guide上說得比較清楚,下載下來的zip里面也有一個spring的example。
          首先是在web.xml中做配置,除了原來spring、webwork的,加上
           1    <context-param>
           2        <param-name>contextConfigLocation</param-name>
           3        <param-value>classpath:beans.xml,classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
           4    </context-param>
           5    <servlet>
           6        <servlet-name>xfire</servlet-name>
           7        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
           8    </servlet>
           9    <servlet-mapping>
          10        <servlet-name>xfire</servlet-name>
          11        <url-pattern>/xfire/*</url-pattern>
          12    </servlet-mapping>


          然后在WEB-INF下面放一個xfire-servlet.xml文件,實際上就是一個spring的配置文件
           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
           3<beans>
           4    <!-- START SNIPPET: xfire -->
           5    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
           6        <property name="urlMap">
           7            <map>
           8                <entry key="/echo" value-ref="echo" />
           9                <entry key="/HelloWorld" value-ref="HelloWorld" />
          10                <entry key="/AccountManager" value-ref="AccountManager-xfire" />
          11            </map>
          12        </property>
          13    </bean>
          14    <bean id="echoBean" class="com.yninfo.rules.services.impl.EchoImpl" />
          15    <!-- Declare a parent bean with all properties common to both services -->
          16    <bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          17        <property name="serviceFactory" ref="xfire.serviceFactory" />
          18        <property name="xfire" ref="xfire" />
          19        <property name="serviceBean" ref="echoBean" />
          20        <property name="serviceInterface" value="com.yninfo.rules.services.Echo" />
          21    </bean>
          22    <bean id="HelloWorld" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          23        <property name="serviceFactory" ref="xfire.serviceFactory" />
          24        <property name="xfire" ref="xfire" />
          25        <property name="serviceBean" ref="HelloService" />
          26        <property name="serviceInterface" value="com.yninfo.rules.services.HelloWorld" />
          27    </bean>
          28    <bean id="AccountManager-xfire" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          29        <property name="serviceFactory" ref="xfire.serviceFactory" />
          30        <property name="xfire" ref="xfire" />
          31        <property name="serviceBean" ref="AccountManager" />
          32        <property name="serviceInterface" value="com.yninfo.rules.services.AccountManager" />
          33    </bean>
          34    <!-- END SNIPPET: xfire -->
          35</beans>
          36
          值得注意的是“serviceBean”,按user's guides上給的例子是“service”,結果是報錯,大意說service這個屬性沒有setter。
           1public class ServiceBean
           2    implements InitializingBean, ApplicationContextAware
           3{
           4
           5    private Object service;
           6    /**
           7     * Gets the object which backs this service.
           8     * @return
           9     */

          10    public Object getServiceBean()
          11    {
          12        return service;
          13    }

          14}

          我做測試的三個例子,echo是抄xfire examples上的,HelloWorld是一個groovy的例子
          <?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="GroovyScriptFactory" class="org.springframework.beans.factory.script.groovy.GroovyScriptFactory">
                  
          <property name="expirySeconds" value="20" />
              
          </bean>

              
          <bean id="HelloService" factory-bean="GroovyScriptFactory" factory-method="create">
                  
          <constructor-arg index="0" value="classpath:com/yninfo/rules/services/impl/HelloWorldImpl.groovy" />
              
          </bean>
          </beans>
          而AccountManager,則是標準的spring+hibernate的東西。
           1    <bean id="AccountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
           2        <property name="transactionManager" ref="TransactionManager" />
           3        <property name="transactionAttributes">
           4            <props>
           5                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
           6                <prop key="load">PROPAGATION_REQUIRED,readOnly</prop>
           7                <prop key="*">PROPAGATION_REQUIRED</prop>
           8            </props>
           9        </property>
          10        <property name="target">
          11            <bean class="com.yninfo.rules.services.impl.AccountManagerImpl">
          12                <property name="accountDAO" ref="AccountDAO" />
          13            </bean>
          14        </property>
          15    </bean>

          配置完成后,啟動tomcat,用http://192.168.0.100:8080/rules/xfire/echo?wsdl可以看到wsdl的描述。

          在vs2005里面,建了個j#的工程(略)。。。

          注:手誤,把圖覆蓋了,只好全部刪掉

          posted on 2005-12-05 03:20 mmwy 閱讀(7740) 評論(12)  編輯  收藏 所屬分類: Others

          評論

          # re: 接觸xfire 2005-12-05 09:27 mingo
          感覺和burlap差不多  回復  更多評論
            

          # re: 接觸xfire 2005-12-05 10:56 江南白衣@ITO
          Spring的Refrence里Remoting 一章也加入了XFire,看來也是決定放低axis,和XFire曖昧了:)  回復  更多評論
            

          # re: 接觸xfire 2006-03-10 23:05 Flier Lu
          XFireExporter 這種方式太繁瑣了,直接用 Java 5 annotation 或 commons-attributes 用起來舒服得多,只需要對服務接口做直接定義即可
          /**
          * Common Server Variables
          *
          * @@WebService(name = "ServerVariables", serviceName = "ServerVariables", targetNamespace = "http://flier.yeah.net/")
          * @@SOAPBinding(style = SOAPBindingAnnotation.STYLE_RPC)
          */
          public interface ServerVariables
          {
          /**
          * @@WebMethod(operationName = "GetMachineName", action="urn:GetMachineName")
          * @@.return WebResult("machineName")
          */
          string GetMachineName();
          }

          spring 中也僅需要增加對此 bean 得管理

          <bean id="serverVariables" class="net.yeah.flier.ws.impl.ServerVariablesImpl" singleton="true">

          所有的 dirty work 可以一次性配置進去

          詳細的說明可以參考我的一篇文章

          使用 xfire 快速發布 WebService
          http://www.aygfsteel.com/flier/archive/2006/03/10/34730.html  回復  更多評論
            

          # re: 接觸xfire 2006-04-26 14:10 pc
          再研究一下 收藏了  回復  更多評論
            

          # re: 接觸xfire 2006-07-27 20:44 xx
          你好,我運行xfire自帶的bookservice例子咋老出這個錯誤呢?

          java.lang.NullPointerException
          at com.caucho.xml.QAttributedNode.getAttributeNodeNS(QAttributedNode.java:146)
          at com.ibm.wsdl.util.xml.DOMUtils.getAttributeNS(Unknown Source)
          at com.ibm.wsdl.util.xml.DOM2Writer.printNamespaceDecl(Unknown Source)
          at com.ibm.wsdl.util.xml.DOM2Writer.printNamespaceDecl(Unknown Source)
          at com.ibm.wsdl.util.xml.DOM2Writer.print(Unknown Source)
          at com.ibm.wsdl.util.xml.DOM2Writer.serializeAsXML(Unknown Source)
          at com.ibm.wsdl.extensions.schema.SchemaSerializer.marshall(Unknown Source)
          at com.ibm.wsdl.xml.WSDLWriterImpl.printExtensibilityElements(Unknown Source)
          at com.ibm.wsdl.xml.WSDLWriterImpl.printTypes(Unknown Source)
          at com.ibm.wsdl.xml.WSDLWriterImpl.printDefinition(Unknown Source)
          at com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source)
          at com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source)
          at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.write(WSDLBuilder.java:181)
          at org.codehaus.xfire.wsdl11.builder.WSDLBuilderAdapter.write(WSDLBuilderAdapter.java:40)
          at org.codehaus.xfire.DefaultXFire.generateWSDL(DefaultXFire.java:104)
          at org.codehaus.xfire.transport.http.XFireServletController.generateWSDL(XFireServletController.java:325)
          at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:116)
          at org.codehaus.xfire.transport.http.XFireServlet.doGet(XFireServlet.java:107)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:115)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
          at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
          at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:178)
          at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
          at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:268)
          at com.caucho.server.port.TcpConnection.run(TcpConnection.java:389)
          at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:492)
          at com.caucho.util.ThreadPool.run(ThreadPool.java:425)
          at java.lang.Thread.run(Thread.java:536)

            回復  更多評論
            

          # re: 接觸xfire 2006-07-27 22:18 xx
          上面是我發的,我剛剛調用webservice是成功的,但是在IE中輸入:http://localhost:8080/test/BookService?WSDL就出現上面的錯誤。。。為啥?  回復  更多評論
            

          # re: 接觸xfire 2006-07-27 22:19 xx
          wsdl4j-1.5.2.jar 包也有,啥原因呢?  回復  更多評論
            

          # re: 接觸xfire 2006-07-28 17:25 xx
          我繼續,把Resin換成tomcat就可以顯示wsdl文件的內容了,resin的沖突?  回復  更多評論
            

          # re: 接觸xfire 2006-07-29 01:32 mmwy
          我也遇到過,在tomcat里面正常,扔resin下面,wsdl出不來,別的都正常。
            回復  更多評論
            

          # re: 接觸xfire 2006-09-03 21:43 bellone.wu
          請教xfire有沒有超時的機制呢...

          burlap沒有.soap 里有超時機制.  回復  更多評論
            

          # re: 接觸xfire 2006-09-21 16:07 wmuu
          今天試了下,wsdl出不來別的正常,半天沒找到原因。最后把web.xml里頭的log4j去掉就正常了。  回復  更多評論
            

          # re: 接觸xfire 2006-12-08 15:12 hellen
          我現在也有用oracle8.1.7和hibernate3做項目呢,我用的驅動就是oracle8.1.7下面的classes12.jar,可是在eclipse下數據庫能連上,可是就是生不成hibernate文件,報這個錯an error occurrend during generating artifacts
          我在csdn上發貼了,麻煩你告訴我一下唄
          http://community.csdn.net/Expert/topic/5215/5215576.xml?temp=.6507227  回復  更多評論
            

          主站蜘蛛池模板: 虹口区| 鲁山县| 会东县| 望奎县| 临夏县| 建德市| 昭平县| 玉树县| 五家渠市| 内丘县| 芦山县| 米脂县| 恩平市| 鱼台县| 万载县| 溧水县| 剑阁县| 福建省| 裕民县| 平原县| 同仁县| 缙云县| 雅安市| 翁牛特旗| 黄陵县| 宜兰县| 五大连池市| 墨竹工卡县| 渑池县| 昆明市| 南华县| 繁峙县| 闽清县| 通化县| 睢宁县| 怀来县| 株洲县| 威海市| 磐石市| 陈巴尔虎旗| 长岭县|