2012-10-30 3 views
0

KSOAP을 사용하여 Android에서 다음 비누 요청을하려고합니다. 중첩 된 soap 객체의 목록을 포함합니다. 그러나 오류가 발생하면 뭔가 잘못하고있을 것입니다.Android ksoap 중첩 된 비누 개체가 요청 오류를 읽을 수 없습니다.

다음과 같이 내가 생성하려고 요청은 다음과 같습니다

public boolean setAttendanceMarks(List<Mark> list) throws Exception 
{ 
    boolean result = false; 

    String methodName = "SetAttendanceMarks"; 
    String soapAction = getHost() + "SetAttendanceMarks"; 

    SoapObject lessMarksN = new SoapObject(getHost(), "LessonMarks"); 

    for (Mark m : list) 
    { 
     PropertyInfo smProp =new PropertyInfo(); 
     smProp.setName("LessonMark"); 
     smProp.setValue(m); 
     smProp.setType(Mark.class); 

     lessMarksN.addProperty(smProp); 
    } 

    PropertyInfo cProp =new PropertyInfo(); 
    cProp.setName("Count"); 
    cProp.setValue(list.size()); 
    cProp.setType(Integer.class); 

    SoapObject lessMarks = new SoapObject(getHost(), "LessonMarks"); 
    lessMarks.addProperty(cProp); 
    lessMarks.addSoapObject(lessMarksN); 

    PropertyInfo sProp =new PropertyInfo(); 
    sProp.setName("strSessionToken"); 
    sProp.setValue(mSession); 
    sProp.setType(String.class); 

    SoapObject request = new SoapObject(getHost(), methodName); 
    request.addProperty(sProp); 
    request.addSoapObject(lessMarks); 


    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(getURL()); 
    androidHttpTransport.debug = true; 

    androidHttpTransport.call(soapAction, envelope); 

    String a = androidHttpTransport.requestDump; 
    String b = androidHttpTransport.responseDump; 

    SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

    SoapObject res = (SoapObject) resultsRequestSOAP.getProperty(0); 

    String resultStr = res.getPropertyAsString("Result"); 

    if (resultStr.contentEquals("OK")) 
    { 
     result = true; 
    } 

    return result; 
} 

다음과 내가 오류가 될 때 : 다음과 같이

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <SetAttendanceMarks xmlns="http://hostname.net/"> 
     <strSessionToken>string</strSessionToken> 
     <LessonMarks> 
     <Count>int</Count> 
     <LessonMarks> 
      <LessonMark> 
      <StudentId>int</StudentId> 
      <EventInstanceId>int</EventInstanceId> 
      <Mark>string</Mark> 
      </LessonMark> 
      <LessonMark> 
      <StudentId>int</StudentId> 
      <EventInstanceId>int</EventInstanceId> 
      <Mark>string</Mark> 
      </LessonMark> 
     </LessonMarks> 
     </LessonMarks> 
    </SetAttendanceMarks> 
    </soap12:Body> 
</soap12:Envelope> 

내 코드는

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<soap:Fault> 
<soap:Code> 
<soap:Value>soap:Sender</soap:Value> 
</soap:Code> 
<soap:Reason> 
<soap:Text xml:lang="en">Server was unable to read request. ---&gt; There is an error in XML document (1, 383). ---&gt; The specified type was not recognized: name='LessonMarks', namespace='http://gsdregapp.net/', at &lt;LessonMarks xmlns='http://gsdregapp.net/'&gt;.</soap:Text> 
</soap:Reason> 
<soap:Detail /> 
</soap:Fault> 
</soap:Body> 
</soap:Envelope> 

아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 어떤 도움을 주셔서 고맙게 생각합니다!

답변

0

사용중인 네임 스페이스가 ws 서버에서 인식되지 않습니다. gethost를()과의 getURL()가 같은 호스트 이름을 검색하는

SoapObject request = new SoapObject("http://hostname.net/", methodName); 

만들기 슈어의 getURL의 호스트 (예상 네임 스페이스)이 있기 때문에,이 방법이어야한다처럼

SoapObject request = new SoapObject(getHost(), methodName); 

같습니다 getHost()가 보낸 것과 같지 않습니다.

경우 느릅 나무 네임 스페이스 사용을 쉽게 WSDL을 읽을 SoapUI를 사용하고 올바른 네임 스페이스에게 도움을

+1

감사를 찾을 수에 대해 슈어 없습니다. 불행히도이 프로젝트의 마감 기한이 너무 길어서 다른 접근법을 취해야했습니다. XML을 구성하고 표준 HTTP Post를 사용하여 서버에 업로드하기로 결정했습니다. 조금 더 시간을 소비하지만 일을 끝냈습니다. 미래에 시간을 갖게되면 귀하의 제안이 제대로 작동하는지보고하겠습니다. 다시 한 번 감사드립니다! – Smalesy