使用Apache CXF根据wsdl文件生成代码

1、去官网下载,我用的是apache-cxf-2.5.10.zip

2、解压

3.通过命令行进入Apache CXF的bin目录,如我的目录是D:\BIS\axis2\apache-cxf-2.7.10\bin

(此目录为wsdl2java.bat 所在的目录(如果不是, 要写 .bat 所在的全路径))

4.输入命令:

  wsdl2java.bat  -p com.oscar999  -client -encoding utf-8 -noAddressBinding wsdl文件

  说明:

  wsdl2java用法: 
  wsdl2java -p com -d src -all aa.wsdl 
  -p 指定其wsdl的命名空间,也就是要生成代码的包名: 
  -d 指定要产生代码所在目录 
  -client 生成客户端测试web service的代码 (-encoding utf-8生成中文进行utf-8编码) 
  -server 生成服务器启动web service的代码 
  -impl 生成web service的实现代码 
  -ant 生成build.xml文件 
  -all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.

5.如果在eclipse 测试的话, 可以新建 一个java project, 把cxf lib 下所有的 jar 拷入到 项目的lib 路径下, 并放入build path 中。

 然后把产生的java 文件,拷入到src 中就可以调用测试了。

可能遇到的问题:

(一)、

Caused by: 
org.xml.sax.SAXParseException; 
systemId: jar:file:/D:/apache-cxf-2.7.11/apache-cxf-2.7.11/lib/jaxb-xjc2.2.6.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; 
lineNumber: 52; columnNumber: 88; schema_reference: 
由于 accessExternalSchema 属性设置的限制而不允许 'file' 访问, 因此无法读取方案文档 'xjc.xsd'。

在网上百度了下,看了大神给出的解决方案,顿时明白了。 
1、首先分析错误的原因: 
本人使用的jdk和jre版本都是1.8,使用的cxf版本是apache-cxf-2.7.11,网上大神说这里是由于jdk1.8的一个bug,具体详情https://bugs.openjdk.java.net/browse/JDK-8020999; 
2、解决方案: 
在jdk的安装路径下,我的是 C:\Java\jdk1.8.0_65\jre\lib,添加一个属性文件jaxp.properties,并写上如下内容javax.xml.accessExternalSchema = all

(二)、关于cxf生成客户端代码中的JAXBElement<String>
    在使用cxf或者x-fire进行webservice开发时,从wsdl文件生成客户端代码时,如果有属性的类型是String,可能会出现JAXBElement<String>类型。
    为什么webservice客户端不直接使用String,而使用JAXBElement<String>类型,自然是有原因的,是因为服务器端的wsdl文件有nillable="true"这个属性。

解决办法:使用wsdl2java.bat -b "1.txt" -client -d E:/tmp -frontend jaxws21 wsdl文件,就可以生成正常的pojo类

“1.txt”内容如下:

<jaxb:bindings version="2.1"   
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"   
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"   
xmlns:xs="http://www.w3.org/2001/XMLSchema">   
   <jaxb:globalBindings generateElementProperty="false"/>   
</jaxb:bindings>   

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值