wsdl2objc定制(一)namespace
1、问题抛出:
<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、解决的方法:
- (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"]);
}
}
- (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有非常多的方法,那不是要一个个改掉,当然聪明点的不回手动一个个去改,用文本替换的方式。所有替换掉,可是要是接口有变呢?又要替换一次,所以就有了更聪明的办法。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA4MDg0OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA4MDg0OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA4MDg0OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
- (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了,好了,最后
wsdl2objc定制(一)namespace的更多相关文章
- Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC
内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...
- ActiveMQ笔记:源码分析
本文对ActiveMQ的启动过程,以及BrokerService,TransportConnector和NetworkConnector等几个重要的模块的代码做一个简要的分析. 启动过程 如果要快速地 ...
- Spring 源码(3)Spring BeanFactory 是怎么创建的?
Spring创建 BeanFactory 的方式 按照Bean的配置方式手动创建可以分为两种: 使用XMl配置的Bean 这种方式使用xml配置文件配置Bean的信息并且设置扫描的路径,扫描到的包可以 ...
- 定制自己的mybatis生成
MyBatis Generator原生提供的生成方式targetRuntime有几种,但都不符合项目需求或想自定义自己的方法. 网上的文章也很多: 如:http://generator.sturgeo ...
- AspNet MVC与T4,我定制的视图模板
一. 遇到的问题 文章开头部分想先说一下自己的困惑,在用AspNet MVC时,完成Action的编写,然后添加一个视图,这个时候弹出一个添加视图的选项窗口,如下: 很熟悉吧,继续上面说的,我添加一个 ...
- Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展
Liferay最大的好处是不仅接口强大,利于扩展,就连JSP定制扩展都提供了3种方式. 修改核心jsp代码,有3种修改方式:1.暴力修改直接修改(位于portal-web/docroot/html), ...
- C#如何定制Excel界面并实现与数据库交互
Excel是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理.统计分析和辅助决策操作,广泛地应用于管理.统计财经.金融等众多领域.(另外,Excel还是伦敦一所会展中心的名称)..NET ...
- Unity3D引擎扩展中的编辑器定制方法
http://gamerboom.com/archives/36432 作者:Richard Fine Unity3D的方便之处在于,它很容易地扩展编辑器套件.每款游戏都对加工有着不同的需求,可以快速 ...
- ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL
ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. ...
随机推荐
- 【mybatis】mybatis数据源源码剖析(JNDI、POOLED、UNPOOLED)
一.概述 二.创建 mybatis数据源的创建过程稍微有些曲折. 1. 数据源的创建过程: 2. mybatis支持哪些数据源,也就是dataSource标签的type属性可以写哪些合法的参数? 弄清 ...
- 前段开发 react native tab功能
import React, { Component } from 'react'; import { StyleSheet, Text, View, Image, } from 'react-nati ...
- 03pandas
一.pandas简述 1)pandas是一个开源的,BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具. 2)numpy能够帮助我们处理数值,但是pandas除了处理数 ...
- 模拟--P1540 机器翻译
题目连接 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词 ...
- 用户管理命令--useradd
用户管理命令--useradd 作用:用于添加一个新的用户 格式:useradd [ 选项 ] 用户名 选项的常用介绍 -u: UID指定用户id,必须是唯一的,并且大于499 -c: 添加注释,可以 ...
- python TCP协议详解 三次握手四次挥手和11种状态
11种状态解析 LISTEN -------------------- 等待从任何远端TCP 和端口的连接请求. SYN_SENT --------------- 发送完一个连接请求后等待一个 ...
- java面试微信交流群-欢迎你的加入
Java后端技术专注Java相关技术:SSM.Spring全家桶.微服务.MySQL.MyCat.集群.分布式.中间件.Linux.网络.多线程,偶尔讲点运维Jenkins.Nexus.Docker. ...
- Vutrl 自己搞SS的些问题
虽然是第二次搞这玩意但还是搞了我三天,有些东西还是想要记录一下的,以下是我犯的错误 至于如何开始搭建Vutrl上面的服务器,下面有两个链接自己搞,我就讲讲我自己碰到的问题 https://segmen ...
- NYOJ660逃离地球——只为最大存活率~
逃离地球 时间限制:1000 ms | 内存限制:65535 KB 难度: 描述 据霍金的<时间简史>所述,在几亿年之后将再次发生宇宙大爆炸.在宇宙大爆炸后,地球上将新生出许多生物而不 ...
- POJ 3177 边双连通求连通量度的问题
这道题的总体思路就是找到连通量让它能够看作一个集合,然后找这个集合的度,度数为1的连通量为k,那么需要添加(k+1)/2条边才可以保证边双连通 这里因为一个连通量中low[]大小是相同的,所以我们用a ...