在cxf中使用配置避免增加字段导致客户端必须更新的问题

在使用cxf实现webservice时,经常碰到的问题就是如果在服务端,修改了一个接口的签名实现,如增加一个字段,或者删除一个字段。在这种情况下,在默认的配置中,就会报以下的错误信息: Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"type"). Expected elements are <{}createTime>,<{}cou nt>,<{}auditStep>,<{}remark>,<{}shopsString>,<{}state>,<{}creator>,<{}id>,<{}startTime>,<{}shops>,<{}isPrivate>,<{}exchangeUnit>,<{} description>,<{}exchangeCount>,<{}name>,<{}limitTime>,<{}businessId>,<{}updateTime>,<{}categoryId>,<{}image>,<{}isHot>,<{}isDeleted> ,<{}price>,<{}showOrder>,<{}usage> 这种错误是客户端使用的传输对象与服务端接收的参数的字段不匹配导致的。但如果,每次修改服务端的实现,都需要更新客户端,就会出现一些问题,如在某些情况下,客户端的更新是不可能的事(如不在自己掌握之内,或者服务不能随便更新,或者其它原因)。

如果避免这种问题,可以禁用cxf中的字段信息验证,如果禁用掉此验证,就不再会对相应的字段信息进行验证,同时没有的字段也会自动的忽略。在配置文件spring_cxf_client.xml中增加以下配置项:

<jaxws:client id="bmc4WebServiceImpl" serviceClass="com.joysim.esm.external.service.Bmc4WebService" address="http://localhost/bmc/ws/bmc4WebService" >
        <jaxws:properties>
            <entry key="set-jaxb-validation-event-handler" value="false"/>
        </jaxws:properties>
    </jaxws:client>

这样,即会禁用掉所有cxf的数据验证,在大多数情况下,这可以满足我们的要求, 除非你有其它和cxf集成的数据验证要求。

posted @ 2013-11-11 16:56  jinjinwang  阅读(...)  评论(...编辑  收藏