`
smartzxy
  • 浏览: 199793 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

CXF中使用dataBinding时遇到异常的解决办法

阅读更多

      不罗嗦,直接问题描述:我在使用java优先的方式写CXF服务时,因为用到了Map类型,所以想到使用CXF框架非默认的Aegis数据绑定方式。但是按照我自以为的方式配置的bean文件,在发布时遇到了异常:

异常摘要
nested exception is org.springframework.beans.NotWritablePropertyException:
Invalid property 'dataBinding' of bean class [org.apache.cxf.jaxws.spring.EndpointDefinitionParser$SpringEndpointImpl]: Bean property 'dataBinding' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
 

我原来的配置文件为:

<?xml version="1.0" encoding="UTF-8"?>
<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.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" />

	
	<jaxws:endpoint id="LabsQuerying" implementor="rc.yuzone.services.LabsQueryImpl"
		address="/LabsQueryingService">
		<jaxws:dataBinding>
			<bean class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
		</jaxws:dataBinding>
	</jaxws:endpoint>

</beans>
 

      后来谷歌了好久,终于在一张已经被删了的网页中(还好有快照功能)找到了灵感,我修改了配置文件,用了另一种绑定方式:

<?xml version="1.0" encoding="UTF-8"?>
<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.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" />

	
	<jaxws:endpoint id="LabsQuerying" implementor="rc.yuzone.services.LabsQueryImpl"
		address="/LabsQueryingService">
		<jaxws:serviceFactory>
			<bean class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
				<property name="dataBinding" ref="aegisBean" />
				<property name="serviceConfigurations">
					<list>
						<bean class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration" />
						<bean class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration" />
						<bean class="org.apache.cxf.service.factory.DefaultServiceConfiguration" />
					</list>
				</property>
			</bean>
		</jaxws:serviceFactory>
	</jaxws:endpoint>
	<bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding"/>

</beans>
 

    如此修改以后再部署,Spring就不报错了,至少可以部署成功了。至于是否影响后续的开发,还有待时间检验;至于为什么,再研究吧。

分享到:
评论
2 楼 jnn 2009-05-12  
至于原理, 我的blog 里面有一些关于CXF configuration的介绍

http://jnn.iteye.com/blog/120186
1 楼 jnn 2009-05-12  
不知道用的CXF是什么版本, 通过 <jaxws:endpoint>来配置DataBinding 应该是没有问题的。
我在CXF2.2 上实验是没有问题。

这是具体的例子,包括了服务器端和客户端的配置。
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:jaxws="http://cxf.apache.org/jaxws"
      xmlns:cxf="http://cxf.apache.org/core"
      xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

    <!-- comment this bean to disable schema validation in the client -->

    <jaxws:client name="{http://apache.org/hello_world_soap_http}SoapPort"
        createdFromAPI="true">
        <jaxws:properties>
            <entry key="schema-validation-enabled" value="true" />
        </jaxws:properties>
        <jaxws:dataBinding>
        	<bean class="org.apache.cxf.xmlbeans.XmlBeansDataBinding"/>
        </jaxws:dataBinding>
    </jaxws:client>

    <jaxws:endpoint name="{http://apache.org/hello_world_soap_http}SoapPort"
        wsdlLocation="wsdl/hello_world.wsdl"
        createdFromAPI="true">
        <jaxws:properties>
            <entry key="schema-validation-enabled" value="true" />
        </jaxws:properties>
        <jaxws:dataBinding>
        	<bean class="org.apache.cxf.xmlbeans.XmlBeansDataBinding"/>
        </jaxws:dataBinding>
    </jaxws:endpoint>

</beans>

相关推荐

    cxf-rt-databinding-jaxb-3.0.1-API文档-中文版.zip

    赠送jar包:cxf-rt-databinding-jaxb-3.0.1.jar; 赠送原API文档:cxf-rt-databinding-jaxb-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-databinding-jaxb-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-...

    cxf-rt-databinding-jibx-2.6.12.zip

    标题 "cxf-rt-databinding-jibx-2.6.12.zip" 提供的信息表明,这是一个关于Apache CXF框架的特定模块——JAXB(Java Architecture for XML Binding)到JiBX(Java to XML Data Binding)数据绑定实现的版本2.6.12的...

    使用cxf webservice时容易出现的异常

    使用cxf webservice时容易出现的异常

    cxf使用中编码问题

    "cxf使用中编码问题"这个主题聚焦在如何在CXF环境中解决与GBK等特定编码相关的困扰。 首先,我们需要理解编码的本质。在计算机系统中,字符编码是用来表示文本的一种方式,如ASCII、GBK、UTF-8等。GBK是中国大陆...

    cxf创建客户端出现GBK编码问题解决的jar

    在使用Apache CXF框架创建客户端时,可能会遇到与GBK编码相关的问题。这通常是由于数据传输过程中编码不一致或处理不当导致的。GBK编码是中文字符集的一种,它扩展了GB2312,包含了更多的汉字,但在处理非GBK字符集...

    CXF-JAXB包的处理问题

    在处理CXF与JAXB的集成时,有时会遇到版本冲突的问题,特别是在处理Web服务时,这些问题可能会导致应用程序运行异常。 本文将深入探讨如何解决CXF与JAXB版本冲突,以及如何处理Java.lang.LinkageError,特别是当...

    CXF使用EndpointImpl发布WebService加入拦截器

    在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。在Web服务开发中,拦截器扮演着至关重要的角色,它们提供了在消息发送和接收过程中插入自定义逻辑的能力。本篇文章将深入探讨...

    cxf+spring使用经验

    在结合 Spring 框架使用时,CXF 可以方便地与 Spring 集成,实现服务的发布和调用。Spring 可以管理 CXF 组件的生命周期,提供事务、安全等服务,并通过配置简化服务的实现。 **一、搭建开发环境** 1. **选择依赖...

    cxf和xfire的jar包冲突解决

    这个问题在标题“cxf和xfire的jar包冲突解决”中得到了明确指出。 Apache CXF是一个全面的服务开发框架,它支持SOAP、RESTful Web服务,以及多种协议和绑定。而XFire是CXF的前身,也是一个强大的Web服务框架,但它...

    CXF 使用实例集成

    【CXF 使用实例集成】 Apache CXF 是一个开源的Java框架,主要用于构建和开发Web服务。这个集成实例主要展示了如何使用CXF来创建和消费Web服务,包括设置输入和输出拦截器、用户验证以及文件上传等功能。让我们深入...

    CXF WebService带有拦截器

    在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同系统之间交换数据和实现功能集成。CXF(CXF: The Apache CXF project)是一个开源的Java框架,专门用于构建和部署Web服务。本篇文章将深入探讨如何使用CXF...

    websphere下部署CXF项目jar包冲突问题解决方式

    在IT行业中,尤其是在Java Web应用的部署环境中,经常遇到各种依赖冲突问题,特别是当不同的应用服务器使用了不同版本的库时。"websphere下部署CXF项目jar包冲突问题解决方式"这一主题聚焦于如何在IBM Websphere ...

    使用CXF和camel-cxf调用webservice

    在使用CXF调用Web服务时,通常会经历以下步骤: 1. **创建服务客户端**:首先,你需要有一个服务的WSDL(Web Service Description Language)文件,这是定义Web服务接口和消息格式的标准XML文档。CXF可以基于WSDL...

    cxf入门使用代码展示

    【CXF入门使用代码展示...通过这个项目,你不仅可以学习到CXF的基本使用,还能掌握如何在实际项目中部署和使用Web服务。对于初学者来说,这是一个非常有价值的实践案例,可以帮助你快速融入到CXF和Web服务开发的世界。

    apache cxf_jar包

    4. **cxf-common-utilities-2.5.10.jar**: CXF通用工具包,提供了在CXF框架中广泛使用的各种实用程序类,如XML解析、类型转换等。 5. **cxf-rt-transports-http-2.7.12.jar**: HTTP传输模块,负责处理HTTP/S协议的...

    CXF-3.1.11jar包

    10. `cxf-rt-databinding-aegis.jar` 和 `cxf-rt-databinding-jaxb.jar`:数据绑定相关的实现。 11. `cxf-xjc-utils.jar` 和 `cxf-tools-common.jar`:代码生成工具相关的类库。 12. `cxf-rt-features-clustering....

    cxf和springnvc整合

    首先,为了在 Spring 应用程序中使用 CXF,我们需要在项目的 `pom.xml` 文件中添加相应的 CXF 依赖。这些依赖包括 CXF 的核心组件、前端模块(如 JAX-WS 和 JAX-RS)、数据绑定模块以及传输模块。以下是一些常见的 ...

    CXF框架工具使用

    这些类可以直接在你的项目中使用,无论是创建Web服务的提供者还是消费者。CXF还支持动态客户端,这意味着你可以在运行时通过WSDL地址动态地创建Web服务客户端,无需预先生成客户端代码。 除了`wsdl2java`,CXF框架...

    cxfWebservice客户端全部jar包及极简调用方法.rar

    cxf-core-3.0.0.jar,cxf-rt-bindings-soap-3.0.0.jar,cxf-rt-databinding-jaxb-3.0.0.jar,cxf-rt-frontend-jaxws-3.0.0.jar,cxf-rt-frontend-simple-3.0.0.jar,cxf-rt-transports-http-3.0.0.jar,cxf-rt-...

Global site tag (gtag.js) - Google Analytics