前段时间公司需要对接一个采用Windows Communication Foundation(WCF)开发的平台,我们通过web service的方式访问对方提供的服务。期间遇到一个问题,在生产代码的过程中如果通过-p指定生成代码的包名时总会报冲突的异常。如果不指定包名生成的代码因为包名没有逻辑性所以不能直接使用,需要手工改包名个人觉得这个过程容易出错且完全没必要。
通过maven提供的插件cxf-gencode-plugin生产代码的过程这里不展开讲
有兴趣的同志可移步官网http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html楼主亲测还是相当好用的
图中的-p命令让一个namespace映射到一个我们自己定义的包
再结合官网-p的介绍(楼主因为文档是英文的就没有认真看,白找了半天博文…………)
更多介绍请移步http://cxf.apache.org/docs/wsdl-to-java.html
其实-p参数是可以反复使用映射多个namespace到不同的package。
打开wsdl发现namespace确实不止一个,如果只是用一个-p(-p xx.xx.package)则所有的代码将会被生成到一个package下,如果类名没有冲突当然不会发生任何问题。但是楼主要对接的接口不同namespace中有相同名称的类。这就是冲突的根源。
通过-p为每个namespace指定一个package,至此问题完美解决。
-p http://schemas.microsoft.com/2003/10/Serialization/=**.**.serialization
-p http://schemas.microsoft.com/2003/10/Serialization/Arrays=**.**.serialization.arrays
....................