cxf 命名空间修改

时间:2024-03-25 18:54:42
  • 背景

最近系统改造,由原来的GP库改为大数据查询,于是新建一个基于大数据查询的webService,主要依赖版本如下:

spring:3.1.2

cxf :3.1.6

hadoop:CDH6.2.0

测试环境 容器:weblogic 12.2.13

开发环境容器:tomcat 8.5.20

其它依赖jar包不在一一说明,其中Spring 和 CXF 版本都是和老的项目相同。

  • 问题:

新项目在测试环境生成的soap响应报文和老项目报文命名空间存在差异,见下图(左为新项目在测试环境报文,又为老项目在测试环境报文)<ns0:为cxf 默认的命名空间  <s: 为要求生成的标准的命名空间

cxf 命名空间修改

郁闷的是相同的代码在开发环境返回的报文命名空间和老项目是相同的,cxf 报文入口和输出配置如下

cxf 命名空间修改

 xmlInterceptor 为报文输出过滤器,在过滤器里打印了响应的报文 开发环境和测试环境生成的报文命名空间还是不一致,查资料分析后应该是在测试服务器上配置中jaxws:properties 标签中的配置没有生效(entry 标签可以修改命名空间为自己想要的名字)

cxf 命名空间修改

  • 解决

网上查资料发现有个外国哥们也遇到了差不多相同的问题 地址:http://cxf.547215.n5.nabble.com/How-to-customize-namespaces-position-and-prefix-in-CXF-response-td3423069.html

看到他的问题应该是容器的解析xml的jar包版本太低,查看猜测是项目weblogic.xml配置文件中配置的优先 加载项目的jar包的配置没有生效,所以从新配置weblogic.xml优先加载项目jar包 从新启动发布服务用soapUI验证报文中命名空间已改为自己项目中配置的了。