1、问题抛出:

如今还是有非常多人使用 wsdl2objc 来调用webservice,可是有时候会有不开心的事情发生,
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Unmarshalling Error: 意外的元素 (uri:"http://xxxxx.xxxxx.com/", local:"a")。所需元素为<{}a>,<{}b>,<{}c> </faultstring></soap:Fault></soap:Body></soap:Envelope>

意外的元素,这什么东西嘛!

那看看我们发出去了什么

 <soap:Body>
<xxxxService:test>
<xxxxService:a>1</xxxxService:a>
<xxxxService:b>1.4</xxxxService:b>
<xxxxService:c>xxx</xxxxService:c>
</xxxxService:test>
</soap:Body>

这里说明一下:xxxxService 是我的ServiceName,在这里应该叫命名空间,这命名空间就是意外的罪魁祸首,如今知道元凶,那我们要怎么处理呢?


2、解决的方法:

1、蠢办法。(以下还有聪明的办法哦!)找到自己要调用的webservice方法的相应的设置參数的方法。例如以下:

- (void)addElementsToNode:(xmlNodePtr)node
{ if(self.a != 0) {
xmlAddChild(node, [self.a xmlNodeForDoc:node->doc elementName:@"a" elementNSPrefix:@"xxxxService"]);
}
if(self.b != 0) {
xmlAddChild(node, [self.b xmlNodeForDoc:node->doc elementName:@"b" elementNSPrefix:@"xxxxService"]);
}
if(self.c != 0) {
xmlAddChild(node, [self.c xmlNodeForDoc:node->doc elementName:@"c" elementNSPrefix:@"xxxxService"]);
}
}

把上面的xxxxService參数改为nil。改完后例如以下
- (void)addElementsToNode:(xmlNodePtr)node
{ if(self.a != 0) {
xmlAddChild(node, [self.a xmlNodeForDoc:node->doc elementName:@"a" elementNSPrefix:nil]);
}
if(self.b != 0) {
xmlAddChild(node, [self.b xmlNodeForDoc:node->doc elementName:@"b" elementNSPrefix:nil]);
}
if(self.c != 0) {
xmlAddChild(node, [self.c xmlNodeForDoc:node->doc elementName:@"c" elementNSPrefix:nil]);
}
}

这方法为什么说是蠢呢?由于这webservice有非常多的方法,那不是要一个个改掉,当然聪明点的不回手动一个个去改,用文本替换的方式。所有替换掉,可是要是接口有变呢?又要替换一次,所以就有了更聪明的办法。


2、聪明的办法:闲话不多说,就是自己改wsdl2objc的源代码,自己定义一个自己的wsdl2objc。

一、弄源代码:打开 http://code.google.com/p/wsdl2objc/

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA4MDg0OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

点击Export to GitHub。再点击,再点击最以下的绿色button。这里默认大家都有github的帐号了。没有就去注冊一个吧!

获取源代码的方式不止这一种,还实用svn,个人比較喜欢github。
然后在你的github账户上就有了一份你自己的源码。
弄不来的就直接用我的就好了 

选择Download Zip 下载来。源代码获取完毕。

二、用xcode打开项目文件。有可能xcode会提示你要不要把项目转成arc的,这个随便的啦


红框里的模板文件就是我们要改的地方

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA4MDg0OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

用搜索来找到我们要改的地方 搜索词:xmlNodeForDoc:node->doc elementName:


搜出了两个地方,我们仅仅要改第一个。



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA4MDg0OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

红框里面的就是我们要改的地方,没错。改成nil,


改完后就这样了,cmmand加R执行。
再又一次生成一下看看
- (void)addElementsToNode:(xmlNodePtr)node
{ if(self.a != 0) {
xmlAddChild(node, [self.a xmlNodeForDoc:node->doc elementName:@"a" elementNSPrefix:nil]);
}
if(self.b != 0) {
xmlAddChild(node, [self.b xmlNodeForDoc:node->doc elementName:@"b" elementNSPrefix:nil]);
}
if(self.c != 0) {
xmlAddChild(node, [self.c xmlNodeForDoc:node->doc elementName:@"c" elementNSPrefix:nil]);
}
}

是不是生成的就是nil了,好了,最后


把app文件考出来。分给成家班用,duang~~~~,






wsdl2objc定制(一)namespace的更多相关文章

  1. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

  2. ActiveMQ笔记:源码分析

    本文对ActiveMQ的启动过程,以及BrokerService,TransportConnector和NetworkConnector等几个重要的模块的代码做一个简要的分析. 启动过程 如果要快速地 ...

  3. Spring 源码(3)Spring BeanFactory 是怎么创建的?

    Spring创建 BeanFactory 的方式 按照Bean的配置方式手动创建可以分为两种: 使用XMl配置的Bean 这种方式使用xml配置文件配置Bean的信息并且设置扫描的路径,扫描到的包可以 ...

  4. 定制自己的mybatis生成

    MyBatis Generator原生提供的生成方式targetRuntime有几种,但都不符合项目需求或想自定义自己的方法. 网上的文章也很多: 如:http://generator.sturgeo ...

  5. AspNet MVC与T4,我定制的视图模板

    一. 遇到的问题 文章开头部分想先说一下自己的困惑,在用AspNet MVC时,完成Action的编写,然后添加一个视图,这个时候弹出一个添加视图的选项窗口,如下: 很熟悉吧,继续上面说的,我添加一个 ...

  6. Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展

    Liferay最大的好处是不仅接口强大,利于扩展,就连JSP定制扩展都提供了3种方式. 修改核心jsp代码,有3种修改方式:1.暴力修改直接修改(位于portal-web/docroot/html), ...

  7. C#如何定制Excel界面并实现与数据库交互

    Excel是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理.统计分析和辅助决策操作,广泛地应用于管理.统计财经.金融等众多领域.(另外,Excel还是伦敦一所会展中心的名称)..NET ...

  8. Unity3D引擎扩展中的编辑器定制方法

    http://gamerboom.com/archives/36432 作者:Richard Fine Unity3D的方便之处在于,它很容易地扩展编辑器套件.每款游戏都对加工有着不同的需求,可以快速 ...

  9. ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL

    ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. ...

随机推荐

  1. vue的使用配置

    我的编辑器是webstorm,虽然占内容占资源, 但是用起来很方便, 刚开始接触的时候就是用这个软件,很喜欢. vue的教程 1.http://www.jianshu.com/p/5ba253651c ...

  2. bzoj3336 Uva10572 Black and White

    题目描述: 数据范围:2<=n,m<=8 题解: 很明显需要状压.但是怎么压不知道,压什么不知道. 然后从条件下手. 条件1要求黑色在一起白色在一起,记录轮廓线很容易做到. 条件2要求不能 ...

  3. Properties类操作.properties配置文件方法总结

    一.properties文件 Properties文件是java中很常用的一种配置文件,文件后缀为“.properties”,属文本文件,文件的内容格式是“键=值”的格式,可以用“#”作为注释,jav ...

  4. mysql中别名(列别名和表别名)

    1.介绍 使用MySQL别名来提高查询的可读性.MySQL支持两种别名,称为列别名和表别名. 有时,列的名称是一些表达式,使查询的输出很难理解.要给列一个描述性名称,可以使用列别名.用法: SELEC ...

  5. 关于在views对models创建的表的简单操作

    models.User.objects.create(c1='a',c2='b') obj=models.User(c1='a',c2='b') obj.save() 增加 models.User.o ...

  6. 最近的一些JAVA基础知识

    1,关于判断两个值是否相等 equal 和==是有区别到 2,判断一个数组集合 List是否为空 这个不能用"==null或者equal"要用isEmpty() , 对于不等于加一 ...

  7. iframe in ipad safari

    http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebconten ...

  8. Ext.js双击事件

    /** * 联系人列表panel */ Ext.define('Op.OpBill.OpBillCustLinkGridPanel', { extend: 'Ext.grid.Panel', id: ...

  9. 0元免费领《JAVA日志》教程,天啦噜!

    天啦,老码疯了!辛辛苦苦,费心费力准备的<java日志实战及解析>教程真的不要钱了吗? 作为添物网的小编,每天看着老码为了给大家录制课程,加班加点的做课件,为了保证课程的质量,老码一遍又一 ...

  10. 可拔插的 IOC 容器

    可拔插的 IOC 容器 于是我打算自己实现一个这样的 bean 容器. 但在实现之前又想到一个 feature: 不如把实现 bean 容器的方案交给使用者选择,可以选择使用 bean 容器,也可以就 ...