`
raymond.chen
  • 浏览: 1436826 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在项目中集成CXF2.x框架的一点心得

阅读更多

    为了能够在项目中正常使用CXF2.x框架提供WebService功能,至少需要以下jar文件:

          asm-2.2.3.jar
          cglib-nodep-2.1_3.jar
          cxf-2.1.2.jar
          cxf-manifest.jar
          FastInfoset-1.2.2.jar
          geronimo-annotation_1.0_spec-1.1.1.jar
          geronimo-jaxws_2.1_spec-1.0.jar
          geronimo-stax-api_1.0_spec-1.0.1.jar
          geronimo-ws-metadata_2.0_spec-1.1.2.jar
          jaxb-api-2.1.jar
          jaxb-impl-2.1.7.jar
          neethi-2.0.4.jar
          saaj-api-1.3.jar
          wsdl4j-1.6.2.jar
          wstx-asl-3.2.4.jar
          xml-resolver-1.2.jar
          XmlSchema-1.4.2.jar

 

    作者的项目主要应用Spring-2.0.7、hibernate-3.2.5技术框架,在集成CXF时老是抛出以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxfService': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.visit(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
Caused by: 
java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.visit(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
	at org.apache.cxf.jaxws.WrapperClassGenerator.generatePackageInfo(WrapperClassGenerator.java:227)
	at org.apache.cxf.jaxws.WrapperClassGenerator.createWrapperClass(WrapperClassGenerator.java:171)
	at org.apache.cxf.jaxws.WrapperClassGenerator.generate(WrapperClassGenerator.java:132)
。。。。。。

    在网上查找相关资料,经过反复尝试,终于发现问题的所在。原来

        hibernate-3.2.5需要asm-1.x.jar、cglib-2.1.3.jar版本的jar文件,

        Spring-2.0.7需要asm-2.2.3.jar,

        CXF-2.x需要asm-2.2.3.jar。

这样导致了asm jar文件发生了冲突。为了解决冲突的问题,需要将asm-1.x.jar、cglib-2.1.3.jar版本的jar文件去掉,用Spring提供的cglib-nodep-2.1_3.jar文件替代即可解决此问题。

 

下面是主要的配置信息:

    一、在web.xml文件中的配置

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
		/WEB-INF/config/applicationContext.xml,
		/WEB-INF/config/beans-cxf.xml
	</param-value>
</context-param>

<servlet>
	<servlet-name>cxf</servlet-name>
	<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
	<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>cxf</servlet-name>
	<url-pattern>/cxf/*</url-pattern>
</servlet-mapping>

   二、java接口

 

@WebService
public interface CXFService {
	public String sayHello(String username);
}

 

   三、接口实现类

@WebService (endpointInterface="com.cjm.webservice.cxf.CXFService")
public class CXFServiceImpl implements CXFService {
	public String sayHello(String username) {
		if(username==null || username.length()==0){
			return "Hello Guest";
		}else{
			return "Hello " + username;
		}
	}
}

   四、服务端相关bean的配置

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
		http://cxf.apache.org/jaxws 
		http://cxf.apache.org/schemas/jaxws.xsd">

    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    
    <bean id="cxfServiceImpl" class="com.cjm.webservice.cxf.CXFServiceImpl"/>
    
    <jaxws:endpoint id="cxfService" implementor="#cxfServiceImpl" address="/cxfService" />    
</beans>

   五、在客户端调用WebService业务方法的范例

        1、在spring环境下的调用

              生成cxf环境下的接口类的命令:wsdl2java -p com.travelsky.agentsky.ws.client http://localhost:8091/inner/ws/marketInfoWS?wsdl

 

              1)bean的配置

<bean id="client" class="com.cjm.webservice.cxf.CXFService"
        factory-bean="clientFactory" factory-method="create" />

<bean id="clientFactory"
        class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        <property name="serviceClass" value="com.cjm.webservice.cxf.CXFService" />
        <property name="address"
            value="http://localhost:8888/spring2/cxf/cxfService" />
</bean>

             2)业务方法调用

CXFService cxf = (CXFService)SpringContextUtil.getBean("client");
String ret = cxf.sayHello("Raymond.Chen");

 

      2、在非spring环境下的调用

//客户端类生成命令:
//wsdl2java -p com.travelsky.monica.ws.client http://localhost:9081/monicaServices/ws/monicaServices?wsdl

List<String> passengerIds = new ArrayList<String>();
passengerIds.add("1n");
passengerIds.add("3n");

List<String> airCodes = new ArrayList<String>();
airCodes.add("cz");
airCodes.add("ca");

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(MonicaServices.class); //服务接口类
factory.setAddress("http://localhost:9081/monicaServices/ws/monicaServices"); //服务地址
System.setProperty("org.apache.cxf.bus.factory", "org.apache.cxf.bus.CXFBusFactory");
MonicaServices client = (MonicaServices) factory.create();
String s = client.generatePnrContent("CAN001", "12345", passengerIds, airCodes, true);

  

3
0
分享到:
评论
2 楼 favor 2008-09-22  
收了!谢了!
1 楼 moliqin 2008-09-17  
谢谢了。根据你的提示排除错误。

相关推荐

    apache-cxf-2.0.10.zip下载地址

    4. **配置文件**:如cxf.xml,用于配置CXF的行为和设置。 要开始使用Apache CXF 2.0.10,开发者需要解压此压缩包,将库文件添加到项目中,然后根据自己的需求配置CXF并编写相应的服务或客户端代码。需要注意的是,...

    cxf框架包 apache-cxf-3.4.3.tar.gz

    在本案例中,我们讨论的是"apache-cxf-3.4.3.tar.gz",这是Apache CXF 3.4.3版本的压缩包,通常包含了CXF框架的所有组件和必要的库文件。 **1. CXF框架介绍** Apache CXF是一个全面的服务开发框架,它的全称是...

    CXF3.1.10.jar

    这个jar包是开发人员在使用CXF框架时所必需的依赖之一,它集成了各种接口、类和实用工具,使得开发者能够方便地实现基于SOAP或RESTful的Web服务。 Apache CXF的主要特点和功能包括: 1. **Web服务支持**:CXF支持...

    cxf框架中的neethi.jar包

    在`CXF`框架中,`neethi.jar`包扮演了关键的角色,它是处理Web服务策略(Policy)的核心组件。 `Neethi`全称为`NEtwork Transactional Entity for the WSDL2 Policy Implementation`, 是一个由Apache软件基金会开发...

    apache-cxf-2.7.7.zip

    8. **与其他框架集成**:CXF可以很好地与Spring框架集成,使得服务的配置和管理更加方便。此外,它也支持OSGi环境。 9. **动态客户端**:CXF的动态客户端可以在运行时根据WSDL动态生成客户端代码,降低了对服务端...

    cxf.apache.org/schemas/(jaxrs.xsd、jaxrs.xsd、core.xsd)文件下载

    在本文中,我们将深入探讨与标题和描述相关的知识点,主要关注JAX-RS和CXF的集成,以及如何利用xsd文件来增强IDE的配置提示。 JAX-RS(Java API for RESTful Web Services)是Java平台上的一个标准,用于创建...

    cxf3.1.18.rar

    spring 4.2.0 集成的cxf3.1.18的jar包,cxf-core-3.1.18.jar、cxf-rt-bindings-soap-3.1.18.jar、cxf-rt-databinding-jaxb-3.1.18.jar、cxf-rt-frontend-jaxws-3.1.18.jar、cxf-rt-frontend-simple-3.1.18.jar、cxf-...

    ssm+cxf(基于Maven开发的ssm框架集成cxf发布web service服务)

    源码里面包含了了一个简单的插入功能,主要是为了测试mybatis是否连接上数据库的时候写的测试类,作为一个刚学java,被抓壮丁的写服务器端的妹子,我只想说,画了我3周...如题,基于maven项目的ssm框架和cxf框架的整合。

    s2sh框架+cxf接口.rar

    在实际开发中,将这些框架集成在一起可以实现高效的企业级应用,例如,Spring负责管理所有组件,Hibernate处理数据库操作,Struts2负责用户界面交互,而CXF则用于实现服务化,使得不同模块或系统间可以通过Web服务...

    apache-cxf-3.5.0.zip

    - 在服务器环境中,可以使用CXF的Servlet或Jetty容器来部署Web服务,通过修改`etc/cxf.xml`等配置文件进行定制。 - 客户端可以使用CXF的动态客户端API或者生成的Java客户端代码来调用服务。 6. **标签解析** ...

    cxf的jar包

    这个“cxf的jar包”可能包含CXF运行时所需的库文件,使得开发者能够在他们的项目中集成并使用CXF的功能。 在Web服务的世界里,CXF是一个关键的角色,因为它提供了以下核心功能: 1. **SOAP支持**:CXF允许开发者...

    org.apache.cxf.spring.remoting.Jsr181HandlerMapping.jar

    org.apache.cxf.spring.remoting.Jsr181HandlerMapping.jar

    apache-cxf-2.7.10.jar

    5. **集成友好**:CXF可以很好地与Spring框架集成,使得服务的配置和管理变得更加便捷。此外,CXF还支持OSGi环境。 6. **工具支持**:CXF提供了丰富的工具,如wsdl2java和java2wsdl,用于在WSDL和Java代码之间进行...

    SpringBoot框架及CXF发布WebService

    在给定的压缩包文件中,"WebService_Server"可能包含了SpringBoot与CXF集成的服务器端代码示例,而"Webservice_Client"则可能包含CXF客户端调用服务的示例代码。这两个部分可以作为学习和实践SpringBoot发布和消费...

    jdk21集成cxf示例程序

    总的来说,JDK21集成CXF示例程序旨在帮助开发者理解如何在最新的Java环境中利用CXF框架构建Web服务。这个过程涉及Java接口定义、服务实现、CXF配置、服务部署和测试等多个环节,对于提升Java Web开发技能具有重要...

    apache-cxf2.7.rar

    在描述中提到的"wsdl2java"工具,是CXF提供的一项重要功能,它允许开发者通过Web服务描述语言(WSDL)文件生成对应的Java客户端和服务端代码。这极大地简化了Web服务的开发流程,因为开发者无需手动编写复杂的SOAP...

    cxf2.7.1.jar全量包

    在描述中提到,cxf2.7.1.jar是一个完整的包,意味着它包含了CXF框架所需的所有组件,确保了不同jar包之间的兼容性和无冲突性。这意味着你可以直接使用此包来构建你的项目,而无需担心依赖问题。作者还强调了这个版本...

    tomcat2WAS9.rar

    spring4.3.x、CXF3.2.x框架部署到Websphere9,在TOMCAT8.5跑没问题,到WAS9上各种冲突,框架用的jar和工具都很新,网上资料很少, 最后干脆自己不停尝试,用了2天时间终于把冲突的jar包理顺了。方法就是各种排列组合...

    cxf.xml,cxf-servlet.xml,cxf-extension-soap.xml

    &lt;import resource="classpath:META-INF/cxf/cxf.xml"/&gt; &lt;import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/&gt; &lt;import resource="classpath:META-INF/cxf/cxf-servlet.xml"/&gt;

Global site tag (gtag.js) - Google Analytics