为了能够在项目中正常使用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);
分享到:
相关推荐
4. **配置文件**:如cxf.xml,用于配置CXF的行为和设置。 要开始使用Apache CXF 2.0.10,开发者需要解压此压缩包,将库文件添加到项目中,然后根据自己的需求配置CXF并编写相应的服务或客户端代码。需要注意的是,...
在本案例中,我们讨论的是"apache-cxf-3.4.3.tar.gz",这是Apache CXF 3.4.3版本的压缩包,通常包含了CXF框架的所有组件和必要的库文件。 **1. CXF框架介绍** Apache CXF是一个全面的服务开发框架,它的全称是...
这个jar包是开发人员在使用CXF框架时所必需的依赖之一,它集成了各种接口、类和实用工具,使得开发者能够方便地实现基于SOAP或RESTful的Web服务。 Apache CXF的主要特点和功能包括: 1. **Web服务支持**:CXF支持...
在`CXF`框架中,`neethi.jar`包扮演了关键的角色,它是处理Web服务策略(Policy)的核心组件。 `Neethi`全称为`NEtwork Transactional Entity for the WSDL2 Policy Implementation`, 是一个由Apache软件基金会开发...
8. **与其他框架集成**:CXF可以很好地与Spring框架集成,使得服务的配置和管理更加方便。此外,它也支持OSGi环境。 9. **动态客户端**:CXF的动态客户端可以在运行时根据WSDL动态生成客户端代码,降低了对服务端...
在本文中,我们将深入探讨与标题和描述相关的知识点,主要关注JAX-RS和CXF的集成,以及如何利用xsd文件来增强IDE的配置提示。 JAX-RS(Java API for RESTful Web Services)是Java平台上的一个标准,用于创建...
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-...
源码里面包含了了一个简单的插入功能,主要是为了测试mybatis是否连接上数据库的时候写的测试类,作为一个刚学java,被抓壮丁的写服务器端的妹子,我只想说,画了我3周...如题,基于maven项目的ssm框架和cxf框架的整合。
在实际开发中,将这些框架集成在一起可以实现高效的企业级应用,例如,Spring负责管理所有组件,Hibernate处理数据库操作,Struts2负责用户界面交互,而CXF则用于实现服务化,使得不同模块或系统间可以通过Web服务...
- 在服务器环境中,可以使用CXF的Servlet或Jetty容器来部署Web服务,通过修改`etc/cxf.xml`等配置文件进行定制。 - 客户端可以使用CXF的动态客户端API或者生成的Java客户端代码来调用服务。 6. **标签解析** ...
这个“cxf的jar包”可能包含CXF运行时所需的库文件,使得开发者能够在他们的项目中集成并使用CXF的功能。 在Web服务的世界里,CXF是一个关键的角色,因为它提供了以下核心功能: 1. **SOAP支持**:CXF允许开发者...
org.apache.cxf.spring.remoting.Jsr181HandlerMapping.jar
5. **集成友好**:CXF可以很好地与Spring框架集成,使得服务的配置和管理变得更加便捷。此外,CXF还支持OSGi环境。 6. **工具支持**:CXF提供了丰富的工具,如wsdl2java和java2wsdl,用于在WSDL和Java代码之间进行...
在给定的压缩包文件中,"WebService_Server"可能包含了SpringBoot与CXF集成的服务器端代码示例,而"Webservice_Client"则可能包含CXF客户端调用服务的示例代码。这两个部分可以作为学习和实践SpringBoot发布和消费...
总的来说,JDK21集成CXF示例程序旨在帮助开发者理解如何在最新的Java环境中利用CXF框架构建Web服务。这个过程涉及Java接口定义、服务实现、CXF配置、服务部署和测试等多个环节,对于提升Java Web开发技能具有重要...
在描述中提到的"wsdl2java"工具,是CXF提供的一项重要功能,它允许开发者通过Web服务描述语言(WSDL)文件生成对应的Java客户端和服务端代码。这极大地简化了Web服务的开发流程,因为开发者无需手动编写复杂的SOAP...
在描述中提到,cxf2.7.1.jar是一个完整的包,意味着它包含了CXF框架所需的所有组件,确保了不同jar包之间的兼容性和无冲突性。这意味着你可以直接使用此包来构建你的项目,而无需担心依赖问题。作者还强调了这个版本...
spring4.3.x、CXF3.2.x框架部署到Websphere9,在TOMCAT8.5跑没问题,到WAS9上各种冲突,框架用的jar和工具都很新,网上资料很少, 最后干脆自己不停尝试,用了2天时间终于把冲突的jar包理顺了。方法就是各种排列组合...
<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"/>