标签:wsdl xcode webservice namespace wsdl2objc
<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,在这里应该叫命名空间,这命名空间就是意外的罪魁祸首,现在知道元凶,那我们要怎么处理呢?- (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有很多的方法,那不是要一个个改掉,当然聪明点的不回手动一个个去改,用文本替换的方式,全部替换掉,但是要是接口有变呢?又要替换一次,所以就有了更聪明的办法。- (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了,好了,最后标签:wsdl xcode webservice namespace wsdl2objc
原文地址:http://blog.csdn.net/u011080848/article/details/44429017