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. swift详解之九---------------自动引用计数、循环引用

    自动引用计数.循环引用(这个必须理解,必须看) 注:本文详细介绍自动引用计数,以及各种循环引用问题.一网打尽! 1. 自动引用计数原理 Swift 使用ARC机制来跟踪和管理你的内存,一般情况下,Sw ...

  2. BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块

    第一部分 P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一 ...

  3. LNOI2019划水记

    十二省联考命题组温馨提醒您: 数据千万条,清空第一条. 多测不清空,爆零两行泪. NOIp2018差点退役的游记 $Flag$拔了. $LNOI2019$划水记: $Day0$: 早上八点起床,一直颓 ...

  4. [LOJ] 分块九题 4

    https://loj.ac/problem/6280 区间修改,区间求和. 本来线段树的活. //Stay foolish,stay hungry,stay young,stay simple #i ...

  5. layui二次封装

    最近一直用layui进行页面的重构,这个框架十分适合我们后台人员开发.简单易用,但是layui本身不支持双向绑定,所以很多情况下,我们在支持动态的控件加载时,需要反复刷新.这里我自己封装了一个comm ...

  6. Java:清空文件内容

    文章来源:https://www.cnblogs.com/hello-tl/p/9139432.html import java.io.*; public class FileBasicOperati ...

  7. C第12章-----堆

    #include <stdio.h> #include <stdlib.h> //声明Person结构 //struct Person{ //    float heightI ...

  8. LINUX常见小问题汇总

    1. crontab的备份与恢复 备份crontab文件: crontab -l > $HOME/mycron 恢复丢失的crontab文件: 如果不小心误删了crontab文件,假设你在自己的 ...

  9. 大数据学习——hive基本操作

    1 建表 create table student(id int,name string ,age int) row format delimitedfields terminated by ','; ...

  10. 大数据学习——securecrt同时向多个tab窗口发送相同的命令

    右键选中 然后在下面空白窗口写命令就可以了