2012-12-29 64 views
0

我有webservice,有多个方法。我使用firefox soaclient插件来测试它们。所有方法都正常工作。直到现在这些都是正常的。我在android上编写了用于调用这些.net webservice的库。我有办法,先准备一个信封,另一个叫方法。除此之外的所有方法都以这种方式工作。我准备从我的lib的信封准备的方法,它不起作用,并在firefox soap客户端上使用此信封,它以正确的方式返回我的回复。我自己调用Web服务的方法不会工作错误,只是返回空结果。什么可能是错误?为什么webservice不能手动工作?

enter image description here

private void createEnvelope() { 
    // Her bir parametrenin kalıbı 
    String params = "<%s>%s</%s>"; 
    // Her parametre kalıbına değer atandığında geçici olarak tutulan string 
    String paramsTemp = ""; 
    // Hazırlanan tüm parametrelerin tutulduğu değişken 
    String paramsAll = ""; 

    // Parametreler ekleniyor 
    for (int i = 0; i < parameterKeys.size(); i++) { 
     paramsTemp = String.format(params, parameterKeys.get(i), 
       parameterValues.get(i), parameterKeys.get(i)); 
     paramsAll += paramsTemp; 
    } 

    // soap mesajını hazılıyoruz 
    String soapTemplate = "<?xml version=\"%s\" encoding=\"%s\"?>" 
      + "<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/\">" 
      + "<soap:Body>" + "<%s xmlns=\"%s\">" + "%s" + "</%s>" 
      + "</soap:Body>" + "</soap:Envelope>"; 
    envelope = String.format(soapTemplate, version, charEncoding, 
      methodName, namespace, paramsAll, methodName); 
    Logger.log("request:" + envelope); 
} 


public String callWebService() { 

    createEnvelope(); 
    // request parameters 
    HttpParams params = httpClient.getParams(); 
    HttpConnectionParams.setConnectionTimeout(params, connectionTimeOut); 
    HttpConnectionParams.setSoTimeout(params, soTimeOut); 

    // set parameter 
    HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), true); 

    // POST the envelope 
    HttpPost httppost = new HttpPost(url); 

    // add headers 
    httppost.setHeader("SOAPAction", soapAction); 
    httppost.setHeader("Content-Type", contentType); 

    try { 

     // the entity holds the request 
     HttpEntity entity = new StringEntity(envelope); 
     httppost.setEntity(entity); 

     // Response handler 
     ResponseHandler<String> rh = new ResponseHandler<String>() { 
      // invoked when client receives response 
      public String handleResponse(HttpResponse responseTemp) 
        throws ClientProtocolException, IOException { 

       // get response entity 
       HttpEntity entity = responseTemp.getEntity(); 
       StatusLine statusLine = responseTemp.getStatusLine(); 

       // read the response as byte array 
       StringBuffer out = new StringBuffer(); 
       byte[] b = EntityUtils.toByteArray(entity); 

       // write the response byte array to a string buffer 
       out.append(new String(b, 0, b.length)); 
       return out.toString(); 
      } 
     }; 

     response = httpClient.execute(httppost, rh); 

    } catch (Exception e) { 
     Log.v("Soap Service Exception:", e.toString()); 
    } 

    // close the connection 
    httpClient.getConnectionManager().shutdown(); 
    return response; 
} 

编辑上的logcat

请求模板:在logcat的F上

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <Method_Name_Response xmlns="url"> 
     <Method_Name_Result> 
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"> 
       <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
        <xs:complexType> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
         <xs:element name="Temp"> 
          <xs:complexType> 
           <xs:sequence> 
           <xs:element name="response1" type="xs:long" minOccurs="0" /> 
           <xs:element name="response2" type="xs:string" minOccurs="0" /> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:choice> 
        </xs:complexType> 
       </xs:element> 
      </xs:schema> 
      <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" /> 
     </Method_Name_Result> 
     </Method_Name_Response> 
    </soap:Body> 
</soap:Envelope> 

响应模板

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <Method_Name xmlns="url"> 
     <param1>12345</param1> 
     <param2>ügıtç</param2> 
     <param3>qwert</param3> 
     </Method_Name> 
    </soap:Body> 
</soap:Envelope> 

响应模板具有相同信封的irefox插件

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <Method_Name_Response xmlns="url"> 
     <Method_Name_Result> 
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"> 
       <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
        <xs:complexType> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
         <xs:element name="Temp"> 
          <xs:complexType> 
           <xs:sequence> 
           <xs:element name="response1" type="xs:long" minOccurs="0" /> 
           <xs:element name="response2" type="xs:string" minOccurs="0" /> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:choice> 
        </xs:complexType> 
       </xs:element> 
      </xs:schema> 
      <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
       <NewDataSet xmlns=""> 
        <Temp diffgr:id="Temp1" msdata:rowOrder="0"> 
        <response1>123456789</response1> 
        <response2>Android</response2> 
        </Temp> 
       </NewDataSet> 
      </diffgr:diffgram> 
      </Method_Name_Result> 
     </Method_Name_Response> 
    </soap:Body> 
</soap:Envelope> 
+0

发布您的'logcat'并且如果可能'wireshark'转储。 – PCoder

+0

我使用模板结果编辑我的问题。由于信息的隐私,我无法分享原始结果。 –

回答

0

我发现我的问题,土耳其字符导致错误。当我使用“ü”时,会导致错误,当我不使用它时,它会很完美。