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 点击按钮弹窗,点击关闭按钮关闭弹窗。

    <div @click="btnfc()">点击弹窗按钮</div> <div v-show="show"> <div ...

  2. 13. OPTIMIZER_TRACE

    13. OPTIMIZER_TRACE OPTIMIZER_TRACE表提供由跟踪语句的优化程序跟踪功能生成的信息. 要启用跟踪,请使用optimizer_trace系统变量. 有关详细信息,请参阅M ...

  3. 微信小程序的坑之wx.miniProgram.postMessage

    工作中有个需求是小程序的网页在关闭的时候,需要回传给小程序一个参数 查阅小程序官方文档,有这样一个接口 wx.miniProgram.postMessage ,可以用来从网页向小程序发送消息,然后通过 ...

  4. c++_包子凑数

    标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会 ...

  5. Django框架基础知识05-自定义模板标签与过滤器

    根据一定规则,自己定义出符合需求功能的.用在任何你有需求的地方,因为内置的满足不了我们的需求,不同的东西有不同的定义规则 目前最最重要的就是HOW 一 文件路径配置: templates 存放自定义 ...

  6. 学习PyQuery库

    学习PyQuery库 好了,又是学习的时光啦,今天学习pyquery 来进行网页解析 常规导入模块(PyQuery库中的pyquery类) from pyquery import PyQuery as ...

  7. python直接赋值、深浅拷贝实例剖析

    根据数据类型分为两部分进行剖析: int.str类型      list.tuple.dict类型等 1.  int.str类型 [int类型实例] >>> import copy ...

  8. C#sql语句如何使用占位符

    背景:在程序中,写sql语句时,可能要根据变量的值不同,SQL语句产生相应的变化.比如说存在变量StuName,根据变量值的不同,检索不同姓名的学生记录,这时需用到占位符的知识. 1,{0}占位符,代 ...

  9. 最近切的两题SCC的tarjan POJ1236 POJ2186

    两题都是水题,1236第一问求缩点后入度为0的点数,第二问即至少添加多少条边使全图强连通,属于经典做法,具体可以看白书 POJ2186即求缩点后出度为0的那个唯一的点所包含的点数(即SCC里有多少点) ...

  10. 【分块+树状数组】codechef November Challenge 2014 .Chef and Churu

    https://www.codechef.com/problems/FNCS [题意] [思路] 把n个函数分成√n块,预处理出每块中各个点(n个)被块中函数(√n个)覆盖的次数 查询时求前缀和,对于 ...