带有其他XML标记的SOAP消息错误

时间:2011-04-12 11:57:07

标签: iphone ios ipad soap saxparser

NSString *urlString = @"http://172.29.165.219:8090/abc/services/Abc";
NSString *soapMessage = [NSString stringWithFormat:
                         @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                         "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                         "<soap:Body>\n"
                         "<getUserInfo>\n"
                         "<email>%@</email>\n"
                         "<pwd>%@</pwd>\n"
                         "</getUserInfo>\n"
                         "</soap:Body>\n"
                         "</soap:Envelope>\n", @"babla.sharan@tcs.com",@"UGFzc0AxMjM="//,@"50006F0063006B0065007400500043000000-444556494345454D00",@"PocketPC"
                         ];
NSMutableURLRequest *loginRequest = [RequestGenerator -generateSOAPRequestWithURLString:urlString soapMessage:soapMessage contentType:@"text/xml; charset=utf-8" action:@"getUserInfo"];
WebServiceHandler *connection = [[WebServiceHandler alloc]init];

对于Above代码,它工作正常,但是当我将其他Tag作为父标记添加到id和密码

NSString *urlString = @"http://172.29.165.219:8090/abc/services/Abc";
NSString *soapMessage = [NSString stringWithFormat:
                         @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                         "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                         "<soap:Body>\n"
                         "<getUserInfo>\n"
                         **"<ABC>\n"**
                                                     "<email>%@</email>\n"
                         "<pwd>%@</pwd>\n"
                                                     **"</ABC>\n"**
                         "</getUserInfo>\n"
                         "</soap:Body>\n"
                         "</soap:Envelope>\n", @"babla.sharan@tcs.com",@"UGFzc0AxMjM="//,@"50006F0063006B0065007400500043000000-444556494345454D00",@"PocketPC"
                         ];
NSMutableURLRequest *loginRequest = [RequestGenerator generateSOAPRequestWithURLString:urlString soapMessage:soapMessage contentType:@"text/xml; charset=utf-8" action:@"getUserInfo"];
WebServiceHandler *connection = [[WebServiceHandler alloc]init];

它显示异常并收到此错误:

  

org.xml.sax.SAXException:SimpleDeserializer在尝试反序列化时遇到了一个不期望的子元素。

它甚至不允许我点击服务器。

1 个答案:

答案 0 :(得分:0)

此处在第二条肥皂消息中,您正在为您的信息发送一个额外的父标记,您的服务器可能无法识别该标记。如果这个标签是可选的,那么应该没有任何问题,但如果它是不受欢迎的,那么你就不应该使用它。以下是W3.org的摘录(http://www.w3.org/TR/2000/NOTE-SOAP-20000508/)....其中讲述了肥皂请求的接收和处理。

A SOAP application receiving a SOAP message MUST process that message by performing 
    the following actions in the order listed below:

         1. Identify all parts of the SOAP message intended for that application 
         2. Verify that all mandatory parts identified in step 1 are supported by
 the  application for this message (see section 4.2.3) and process them accordingly.
 If this is   not the case then discard the message .
 The processor MAY ignore optional parts identified in step 1 without affecting the outcome of the processing.
        3. If the SOAP application is not the ultimate destination of the message then
     remove all parts identified in step 1 before forwarding the message.


  Processing a message or a part of a message requires that the SOAP processor 
  understands, among other things, the exchange pattern being used (one way, 
  request/response, multicast, etc.), the role of the recipient in that pattern, the 
  employment (if any) of RPC mechanisms such as the one documented in section 7, the 
  representation or encoding of data, as well as other semantics necessary for correct 
  processing