無聊人士

          搬家==》www.soapui.cn

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            32 隨筆 :: 0 文章 :: 60 評論 :: 0 Trackbacks

          受白衣同志的當,上了xfire的賊船,拋棄了axis,嗚!

          xfire 1.0終于final了,試用了一下,,感覺同1.0M6相比,使用變化不大。

          看看user guide,照著examples下的例子,基本上hello xfire不成問題。

          1、jar包

          同以往一樣,xfire user guide中的Dependency Guide.html還是說得不明不白,除了讓人發暈,沒有太大的實際意義。

          SNAG-0000.jpg

          注:
          1)XmlSchema-1.0.jar、jakatra commons httpclient/codec只有在Dynamic Client中才需要用。
          2)采用quick start、examples/book中用的service.xml配置方法時,xbean-spring與spring有兼容問題,我用1.2.7、2.0M2的spring時,總是報addPropertyValue(String,Object)之類的異常,換成1.2.6以后一切正常。用examples/spring例子中的配置方法時,沒有出現這種情況。

          2、quick start、examples/book

          這種做法很簡單,好象也不太合我的胃口,就沒仔細折騰。
          (1)在web.xml中配置一下

           1  <servlet>
           2    <servlet-name>XFireServlet</servlet-name>
           3    <display-name>XFire Servlet</display-name>
           4    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
           5  </servlet>
           6
           7  <servlet-mapping>
           8    <servlet-name>XFireServlet</servlet-name>
           9    <url-pattern>/servlet/XFireServlet/*</url-pattern>
          10  </servlet-mapping>
          11
          12  <servlet-mapping>
          13    <servlet-name>XFireServlet</servlet-name>
          14    <url-pattern>/services/*</url-pattern>
          15  </servlet-mapping>

          (2)編碼。這個不用說,呵呵
          (3)在classpath中,建META-INF/xfire/services.xml配置文件,把剛才做好的webservices配置一下。

          1<beans xmlns="http://xfire.codehaus.org/config/1.0">
          2  <service>
          3    <name>BookService</name>
          4    <namespace>http://xfire.codehaus.org/BookService</namespace>
          5    <serviceClass>org.codehaus.xfire.demo.BookService</serviceClass>
          6  </service>
          7</beans>

          (4)然后就是deploy,訪問http://ip:port/webapp name/BookService?WSDL之類的動作了。

          3、examples/spring

          xfire和spring勾搭得比較緊密啊,只需要簡單配置一下,就可以把spring.xml中配置好的bean拿出來做web services了。
          (1)折騰spring的東西(略)。
          (2)在web.xml中配置一下(注意xfire那一段)

           1    <context-param>
           2        <param-name>contextConfigLocation</param-name>
           3        <param-value>/WEB-INF/applicationContext.xml classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
           4    </context-param>
           5
           6    <listener>
           7        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
           8    </listener>
           9
          10    <servlet>
          11        <servlet-name>xfire</servlet-name>
          12        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          13    </servlet>
          14    <servlet-mapping>
          15        <servlet-name>xfire</servlet-name>
          16        <url-pattern>/*</url-pattern>
          17    </servlet-mapping>

          (3)在WEB-INF/xfire-servlet.xml中把spring bean同xfire webservices“關聯”起來。這個xfire-servlet.xml實際上就是一個標準的spring.xml配置文件。

           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    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
           5        <property name="urlMap">
           6            <map>
           7                <entry key="/EchoService" value-ref="echo"/>
           8            </map>
           9        </property>
          10    </bean>
          11    
          12    <bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          13        <property name="serviceFactory" ref="xfire.serviceFactory"/>
          14        <property name="xfire" ref="xfire"/>
          15        <property name="serviceBean" ref="echoBean"/>
          16        <property name="serviceClass" value="org.codehaus.xfire.spring.example.Echo"/>>
          17    </bean>
          18</beans>

          注:第16行,xfire 1.0M6中用serviceInterface,現在改成serviceClass了。

          (4)然后就完工,用http://ip:port/webapp name/xfire/EchoService?WSDL可以看到WSDL內容。

          4、客戶端

          按我的惡習,這類事情,肯定是直接開vs.net或者C# developer來顯擺一下了。不得不承認,.net里面調web services就是方便??!
          SNAG-0001.jpg
          至于java做client么,以前一般是用axis來生成client class,xfire也提供類似的工具,不過對于xfire來說,最簡單的辦法就是用Dynamic Client,幾行代碼搞定。

          1    Service serviceModel = new ObjectServiceFactory().create(Echo.class);
          2    Echo service = (Echo) new XFireProxyFactory().create(serviceModel,
          3        "http://localhost:8080/xfire-examples/EchoService");
          4    String result = service.echo("ok");


           

          posted on 2006-03-02 10:47 mmwy 閱讀(11115) 評論(13)  編輯  收藏 所屬分類: Others

          評論

          # re: xfire 1.0 終于final了 2006-03-02 14:36 江南白衣
          axis也出axis2.0了,你還有回頭是岸的機會呀。
            回復  更多評論
            

          # re: xfire 1.0 終于final了 2006-04-21 14:13 hopeshared_lee
          為啥我這樣測試的結果是:
          java.lang.VerifyError: (class: org/codehaus/xfire/aegis/type/basic/ObjectType, method: writeSchema signature: (Lorg/jdom/Element;)V) Incompatible argument to function
          at org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry.createDefaultMappings(DefaultTypeMappingRegistry.java:294)
          at org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry.<init>(DefaultTypeMappingRegistry.java:106)
          at org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry.<init>(DefaultTypeMappingRegistry.java:95)
          at org.codehaus.xfire.aegis.AegisBindingProvider.<init>(AegisBindingProvider.java:46)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
          at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
          at java.lang.Class.newInstance0(Class.java:308)
          at java.lang.Class.newInstance(Class.java:261)
          at org.codehaus.xfire.service.binding.ObjectServiceFactory.getBindingProvider(ObjectServiceFactory.java:144)
          at org.codehaus.xfire.service.binding.ObjectServiceFactory.getInParameterName(ObjectServiceFactory.java:898)
          at org.codehaus.xfire.service.binding.ObjectServiceFactory.addOperation(ObjectServiceFactory.java:683)
          at org.codehaus.xfire.service.binding.ObjectServiceFactory.initializeOperations(ObjectServiceFactory.java:629)
          at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:350)
          at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:277)
          at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:258)
          at aa.CalculateHandler.getAddServiceResult(CalculateHandler.java:177)
          at aa.CalculateHandler.start(CalculateHandler.java:33)
          at aa.CalculateHandler.calculate(CalculateHandler.java:20)
          at Test.main(Test.java:11)
          Exception in thread "main"


          ?????????  回復  更多評論
            

          # re: xfire 1.0 終于final了 2006-05-17 15:23 eureka
          我在瀏覽器里看wsdl,返回下面的東東,誰能幫忙

          500 Servlet Exception

          javax.xml.stream.FactoryConfigurationError: Provider com.bea.xml.stream.MXParserFactory
          not found
          at javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:72)
          at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:176)
          at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:92)
          at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:136)
          at org.codehaus.xfire.util.STAXUtils.<clinit>(STAXUtils.java:45)
          at org.codehaus.xfire.util.jdom.StaxBuilder.<init>(StaxBuilder.java:150)
          at org.codehaus.xfire.wsdl11.builder.AbstractWSDL.<clinit>(AbstractWSDL.java:50)
          at org.codehaus.xfire.wsdl11.builder.DefaultWSDLBuilderFactory.createWSDLBuilder(DefaultWSDLBuilderFactory.java:25)
          at org.codehaus.xfire.wsdl11.builder.WSDLBuilderAdapter.write(WSDLBuilderAdapter.java:40)
          at org.codehaus.xfire.DefaultXFire.generateWSDL(DefaultXFire.java:116)
          at org.codehaus.xfire.transport.http.XFireServletController.generateWSDL(XFireServletController.java:302)
          at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:141)
          at org.codehaus.xfire.spring.remoting.XFireServletControllerAdapter.handleRequest(XFireServletControllerAdapter.java:63)
          at org.codehaus.xfire.spring.remoting.XFireExporter.handleRequest(XFireExporter.java:44)
          at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
          at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:723)
          at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663)
          at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394)
          at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:348)
          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:595)
            回復  更多評論
            

          # re: xfire 1.0 終于final了 2006-07-19 17:09 david turing
          hopeshared_lee, jdom版本不正確,download最新的jdom拉
          基本上,我發現xfire除了快一些,真是一無是處
          看看他的WS-Security的例子,也太爛了  回復  更多評論
            

          # 請問怎么開發客戶端阿 2006-10-31 23:50 敵對
          sldfjs   回復  更多評論
            

          # XFIRE CLENT 2006-10-31 23:54 敵對
          是 不是服務器端開發完畢以后,輸入命令java org.codehaus.xfire.gen.WsGen -wsdl
          就可以生辰了CLIENT。郁悶好久了,還請你高手幫幫我這個XFIRE的暈蟲  回復  更多評論
            

          # re: xfire 1.0 終于final了 2006-11-01 16:36 mmwy
          @敵對


          我上面有介紹啊,如果是java來做client,可以象axis一樣,從wsdl來生成client,也可以用Dynamic Client的辦法來生成。

          如果是vs.net、C# developer,可以用web references向導來生成client。

          如果是delphi 7/2005/2006,有一個專門的wsdl importer可以生成client代碼的。
            回復  更多評論
            

          # re: xfire 1.0 終于final了 2006-11-22 11:34 ma
          請問我測試這個例子為啥就遇到這個錯誤呢
          2006-11-22 10:22:36,734 ERROR [org.codehaus.xfire.handler.DefaultFaultHandler] Fault occurred!
          java.lang.IllegalArgumentException: prefix cannot be "null" when creating a QName
          at javax.xml.namespace.QName.<init>(Unknown Source)
          at com.bea.xml.stream.MXParser.getName(MXParser.java:1439)
          at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:107)
          at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
          at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
          at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)


          wsdl可以正確的看到  回復  更多評論
            

          # re: xfire 1.0 終于final了 2006-11-22 11:39 ma
          @ma
          我用的是JBoss4.0.5  回復  更多評論
            

          # re: xfire 1.0 終于final了 2007-05-14 11:33 咔咔
          2007-05-14 11:21:59,203 ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xfire.customEditorConfigurer' defined in ServletContext resource [/WEB-INF/customEditors.xml]: Cannot create inner bean 'org.codehaus.xfire.spring.editors.ServiceFactoryEditor#1022de4' while setting bean property 'customEditors' with key [org.codehaus.xfire.service.ServiceFactory]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.codehaus.xfire.spring.editors.ServiceFactoryEditor#1022de4' defined in ServletContext resource [/WEB-INF/customEditors.xml]: Cannot resolve reference to bean 'xfire.transportManager' while setting bean property 'transportManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xfire.transportManager' defined in ServletContext resource [/WEB-INF/xfire.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamReader
          Caused by:
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.codehaus.xfire.spring.editors.ServiceFactoryEditor#1022de4' defined in ServletContext resource [/WEB-INF/customEditors.xml]: Cannot resolve reference to bean 'xfire.transportManager' while setting bean property 'transportManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xfire.transportManager' defined in ServletContext resource [/WEB-INF/xfire.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamReader
          Caused by:
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xfire.transportManager' defined in ServletContext resource [/WEB-INF/xfire.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamReader
          Caused by:
          java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamReader
          at org.codehaus.xfire.soap.SoapTransportHelper.<clinit>(SoapTransportHelper.java:24)
          at org.codehaus.xfire.transport.local.LocalTransport.<init>(LocalTransport.java:33)
          ……
          我這是怎么回事呀  回復  更多評論
            

          # re: xfire 1.0 終于final 2007-08-08 10:48 ooo
          iopioopio  回復  更多評論
            

          # re: xfire 1.0 終于final了 2008-08-08 12:22 njwyj
          @eureka
          下載jsr173.jar里面的jsr173_1.0_ri.jar包放到lib里就可以了
            回復  更多評論
            

          # 關于MXParserFactory異常 2009-09-15 21:26 qianyuanyuan
          對于:javax.xml.stream.FactoryConfigurationError: Provider com.bea.xml.stream.MXParserFactory
          not found 錯誤,我今天剛剛也遇到了。我不是太清楚是怎么回事,但是加入了wstx-asl-3.0.1.jar時,問題就不出現了。大家可以試試。  回復  更多評論
            

          主站蜘蛛池模板: 宜君县| 鲁山县| 镇雄县| 沭阳县| 苍溪县| 大埔区| 娱乐| 金堂县| 镇雄县| 新安县| 晋江市| 桃园县| 即墨市| 黄大仙区| 甘孜县| 石林| 湘乡市| 铁力市| 美姑县| 星座| 阜南县| 南丹县| 南木林县| 农安县| 磐安县| 三亚市| 邛崃市| 名山县| 彭水| 门源| 扎兰屯市| 溆浦县| 通城县| 江北区| 建始县| 建德市| 嘉义县| 开平市| 苍南县| 房山区| 东莞市|