posts - 297,  comments - 1618,  trackbacks - 0
早前的一篇文章,今天才发表,贴上来,:)
请勿转载
原文出处:

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>xfireservicedisplay-name>
    

    
<context-param>
       
<param-name>contextconfiglocationparam-name>
       
<param-value>/web-inf/applicationcontext.xml,/web-inf/xfire-servlet.xmlparam-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>
    


    

    
<servlet>   
       
<servlet-name>xfireservlet-name>   
       
<servlet-class>org.springframework.web.servlet.dispatcherservletservlet-class>
    
servlet>   
    
<servlet-mapping> 
       
<servlet-name>xfireservlet-name>
       
<url-pattern>*.wsurl-pattern>
    
servlet-mapping>
    
<servlet>
       

       
<servlet-name>xfireservletservlet-name>
       
<servlet-class>org.codehaus.xfire.spring.xfirespringservletservlet-class>
    
servlet>
    
<servlet-mapping>
       
<servlet-name>xfireservletservlet-name>
       

       
<url-pattern>/service/*url-pattern>
    
servlet-mapping>
    

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>
    

    
<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>     

    

    
<bean id="basewebservice" class="org.codehaus.xfire.spring.remoting.xfireexporter" lazy-init="false" abstract="true">
       

       
<property name="servicefactory" ref="xfire.servicefactory" />
       

       
<property name="xfire" ref="xfire" />
    
bean>
    
<bean id="helloworldservice" parent="basewebservice">
       

       
<property name="servicebean" ref="helloworldbean" />
       

       
<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已经编写完毕,下面让我们来看看自己的劳动成果吧。

    在浏览器中输入地址:,我们可以看到helloworldservice对应的wsdl信息,阅读这个wsdl文档,我们可以知道helloworld的sayhelloworld方法已经被成功地发布为web service了。只要拿到这个wsdl就可以开发相应的客户端调用程序了。

xfire为访问服务端web service提供了各种方便的方式:我们一般根据服务地址和窄接口类创建客户调用程序。

  在不能获得服务窄接口类的情况下,xfire允许我们通过wsdl文件生成客户端调用程序,通过指定服务接口的方式调用服务。

1)通过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的测试类.
 *
@authoramigoxie
 *@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访问wsdldocumenturlwsdl。该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.helloworldvalue>       
       
property>      
        
<property name="wsdldocumenturl">         
<value>http://localhost:8080/webservice_helloworld/helloworldservice.ws?wsdlvalue>       
        
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 阿蜜果 阅读(53336) 评论(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 |
1)通过wsdl文件生成客户端调用程序

不如直接这样:
client client = new client(new );  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2007-09-28 17:56 |
我按照你 的例子写的,却完全没有反应,提示找不到资源,想问一下,可需要
add spring capabilities?我这种情况可能是什么原因?  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2007-09-28 17:59 |
我是在web service的测试这里就没有反应。
  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2007-09-29 09:43 |
我找到原因了,applicationcontext.xm 文件名我少写了个p,晕死,我知道了 ,不用add spring capabilities。  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇[未登录]
2007-09-29 11:24 |
能不能把目录结构列出来。。。俺是初学者  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2007-09-29 11:35 | 阿蜜果
@bruce
本篇与下篇的例子的目录结构请参见:
  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇[未登录]
2007-09-29 11:39 |
谢谢!谢谢!偶现在就去看!  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇[未登录]
2007-09-29 11:43 |
好用了,谢谢阿蜜果:)
  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2007-11-05 10:31 |
java.lang.nosuchmethoderror: javax.xml.namespace.qname.(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 |
@阿蜜果
我到原因了~是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作了如下配置:

contextconfiglocation
/web-inf/classes/applicationcontext.xml,/web-inf/classes/xfire-servlet.xml

但是在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 |

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.(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.(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.(client.java:236)
at org.codehaus.xfire.client.client.(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 |
你好姐姐,我也向你要一份工程 关于webservice的工程,关于webservice的工程我都想要,还有能给我一起传基本关于webservice的书吗?


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

现在这里谢谢了  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-03-24 17:33 |
为什么我按照你的步骤建工程的时候怎么就没有xfire-servlet。xml这个文件呢?  回复  
  
# class not found: webservice.helloworld[未登录]
2008-03-28 10:09 |
能不能给您的工程了,我做的发布不起来!谢谢  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-04-16 16:59 |
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
我是按照 你 的方法做的.可是编译的时候就报了上面的错误...
我找了很久没有找到...你帮我看看...  回复  
  
# 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 |
,,谢谢...
yangpanwww@126.com

阿密果,你真的是太好了,,,,愿意交我这个朋友不...
我的qq:609865047

  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-04-17 15:01 |
还有.....我对比了我们 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 |
喔,,...上面的问题我知道可,,
我加了log4j.properties 后...
出现 document root element "beans", must match doctype root "null" 错误..我的是spring2.0
applicationcontext.xml:

http://www.springframework.org/schema/beans"" target="_new" rel="nofollow">"
xmlns:xsi="
xsi:schemalocation=" /spring-beans-2.0.xsd">

而且我也把 xfire core lib 中有spring1.2.6 也删除了
网上都被我找遍了,,还是没有发现....
大姐,帮帮我.....
  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-04-17 18:05 |
亲爱的阿蜜果
上面的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 |

呜~~~~~~~~~~~~~

错误找到咯,,,,,,,三天啊. 呜~~~~~~~~~

是我的.xml 写错了文件

我该骂..你们骂我吧  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-05-22 15:31 |
我的contextloaderlistener 这个监听器加载的时候有问题 是不是缺少某个jar包啊?。能给我发一份吗?我的邮箱是:morosefingerling@gmail.com 不胜感激  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-05-22 17:56 |
我的问题解决了。。不知道大家是不是和我遇到的问题一样,简单说一下:
我用的是myeclipse6.0
一、用eclipse add web service capabilities 这样使用的是spring1.2的包,而我使用的是spring2.0 这样产生了冲突。删除1.2的就ok了
二、web.xml中 /web-inf/classes/applicationcontext.xml,/web-inf/classes/xfire-servlet.xml才能找到对应的文件,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 |
能不能发份代码我看看,我按照你写的还是没配出来,搞了好几天了,郁闷啊
邮箱:li_hy2004@163.com
谢谢了  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-06-23 10:15 |
我的问题解决了,和nic一样是spring包的问题,没想到xfire的包里已经有spring的包了,我又加了spring2.0的包-_-!
多谢阿蜜瓜^^  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-07-20 09:53 |
为什么我删了那个spring1.x的包就不行呢,说org/codehaus/xfire/spring/xfire.xml不存在。。。还要做什么改动吗?  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇[未登录]
2008-09-08 16:30 |
文章简介实用.一试成功.真是舒服的体验过程.  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-09-19 14:22 |
阿米果老师,xfire怎么传递数组啊?  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-11-18 16:53 |
请问在创建客户端的时候必须要有一个helloworld这个类吗?  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2008-12-09 21:53 |
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
版主 救助啊  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2009-04-15 19:05 |
这个问题 是由于application.xml文件的头部信息不兼容  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2009-05-13 16:56 |
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 |
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
信息: 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 |
could not open servletcontext resource [/web-inf/xfire-servlet.xml] 是怎么回事,另外 为什么访问地址是 其中 webservice_helloworld不知道是怎么回事  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2009-07-14 17:01 |
阿米果姐姐,小弟我是初学着,能不能也给我发一份啊 我的邮箱是
tanglongjava@163.com  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇[未登录]
2009-07-22 17:11 |
出现如下同样问题:

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作了如下配置:

contextconfiglocation
/web-inf/classes/applicationcontext.xml,/web-inf/classes/xfire-servlet.xml

但是在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 |
按照你的教程还是比较容易的,只是我想问下,xfire-servlet.xml这个文件是不是只能放在webinf下?因为我一改位置,就会报错,而applicationcontext.xml换了位置就没问题的  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2010-01-14 14:10 |
你把工程发给我一份吧!邮箱: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 |
我把第一个例子自己练习了下,有这个错误。。
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 |
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 |
很好的教程,一看就会。  回复  
  
# 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 |
我的项目要用到webservice,我自己调试了么有成功,可以给我提供下项目源码。让我参考下吗,谢谢。
邮箱是ityouknow@126.com  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2011-11-16 12:31 |
对@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 |
请问与spring集成后,某个web service的命名空间和方法名是什么?  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2013-05-03 10:51 |
@wxd
我太笨了,可以通过访问
*.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 |
可以把源码发到我的邮箱吗?liaowenxiong@sina.com 或者 qq离线发送给我,qq:1036450138 谢谢了  回复  
  
# re: 使用xfire spring构建web service(一)——helloworld篇
2014-11-27 10:37 |

client client = new client(new );


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 |

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 : . 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 : . 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
235678
9111415
17182122
232425
123456

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
        (2015年12月出版)
      

        (2015年7月出版)
      
        (2010年5月出版)
     

留言簿(261)

使用xfire spring构建web service(一)——helloworld篇 -凯发k8网页登录

积分与排名

  • 积分 - 2268582
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜

网站地图