Customizations for WCF Service WSDL

针对WCF Service WSDL,记录下我的一些使用体验:

1.根据WCF Service WSDL生产client端java代码可能会有JAXBElement<T>这样的properties,JAXB2.0 建议通过一些定制可生成一些对java更友好的代码,详细文档请看[url="http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/reference/tutorials/wsit/doc/DataBinding5.html"]这里[/url]

我的步骤如下:
#1.创建一个txt文本(暂命名为“bindings.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>


#2.使用以下命令行生产java客户端代码:

wsdl2java -p your.package -b bindings.txt yourdownloaded.wsdl

Or

wsimport -p your.package -b bindings.txt -keep yourdownloaded.wsdl

注意这里使用了“-b bindings.txt”来添加一些额外定制。

#3.这样生成的client代码可获得对java更友好的支持。

2.在XML节点和java objects之间进行unmarshal的时候,针对从xml文件到java objects无法成功解组时,获得的都是null,如果你觉得你的XML文件格式都是正确的前提下,检查下你生成的客户端代码文件“package-info.java”,其中你可能会遇到如下代码:


@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.vuebill.com/WebService/2/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)


请留意下elementFormDefault属性,elementFormDefault属性用来设置xml的实例中子元素是否一定需要有命名空间限定,对于xml<-->java objects之间的转换时,很有可能使用了命名空间从而影响xml节点的映射,可以尝试将“package-info.java”elementFormDefault相关的值移除,再尝试unmarshal。

(以上纯属个人经历,只是希望可以多注意下package-info.java这个文件)

3.JAXB unmarshalling exception : unexpected element
可尝试检查具体对应生成的java client object代码,在对应的@XmlRootElement、@XmlElement 添加namespace来具体指明你的namespace,如下:


@XmlElement(name="your xml node name", namespace="http://your name space")


Good luck!

小结:
调用.Net提供的webservice,会遇到一些关于WSDL、导入xsd文件、生成客户端代码等等问题,由于本身语言方面的各种问题,需要更多一点的耐心。

suds是一个不错的lightweight soap-based web service client(python),其中可以不用生成客户端代码我觉得非常好用,而且使用也很方便,推荐喜欢python的朋友试试!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值