2013-08-18 5 views
0

ksoap2 라이브러리에서 생성 된 xml 출력에서 ​​i : type 태그를 숨기는 방법을 알아 내려고하고 있습니다. 다른 게시물에서 주어진 답변을 시도했지만 작동하지 않았습니다. 누구든지 아이디어가 있습니까?Android ksoap2 i : supression 유형

// 1. Create SOAP Envelope using the request 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.implicitTypes = true; 
    envelope.setAddAdornments(false); 

    envelope.setOutputSoapObject(parameter); 

    // 2. Create a HTTP Transport object to send the web service request 
    HttpTransportSE httpTransport = new HttpTransportSE(WSDL_URL); 
    httpTransport.debug = true; // allows capture of raw request/response in Logcat 

    // 3. Make the web service invocation 
    httpTransport.call(WS_NAMESPACE + "/" + WS_METHOD_NAME, envelope); 

출력 XML은 다음과 같습니다 :

public static SoapObject createRequest() { 

    SoapObject method = new SoapObject(WS_NAMESPACE, WS_METHOD_NAME); 
    SoapObject request = new SoapObject("", "Request"); 

    //Create source credentials object 
    SoapObject sourceCredentials = new SoapObject("", "SourceCredentials"); 

    PropertyInfo sourceNameProp = new PropertyInfo(); 
    //sourceNameProp.setNamespace(WS_NAMESPACE); 
    sourceNameProp.setName("SourceName"); 
    sourceNameProp.setValue(SOURCENAME); 

    PropertyInfo passwordProp = new PropertyInfo(); 
    //passwordProp.setNamespace(WS_NAMESPACE); 
    passwordProp.setName("Password"); 
    passwordProp.setValue(PASSWORD); 

    sourceCredentials.addProperty(sourceNameProp); 
    sourceCredentials.addProperty(passwordProp); 

    SoapObject siteIds = new SoapObject("","SiteIDs"); 

    PropertyInfo siteIDProp = new PropertyInfo(); 
    //siteIDProp.setNamespace(WS_NAMESPACE); 
    siteIDProp.setName("int"); 
    siteIDProp.setValue(SITE_IDS); 

    siteIds.addProperty(siteIDProp); 

    sourceCredentials.addSoapObject(siteIds); 
    request.addSoapObject(sourceCredentials); 

    PropertyInfo xMLDetailProp = new PropertyInfo(); 
    //xMLDetailProp.setNamespace(WS_NAMESPACE); 
    xMLDetailProp.setName("XMLDetail"); 
    xMLDetailProp.setValue("Full"); 

    PropertyInfo pageSizeProp = new PropertyInfo(); 
    //pageSizeProp.setNamespace(WS_NAMESPACE); 
    pageSizeProp.setName("PageSize"); 
    pageSizeProp.setValue("10"); 

    PropertyInfo curPageProp = new PropertyInfo(); 
    //curPageProp.setNamespace(WS_NAMESPACE); 
    curPageProp.setName("CurrentPageIndex"); 
    curPageProp.setValue("0"); 

    request.addProperty(xMLDetailProp); 
    request.addProperty(pageSizeProp); 
    request.addProperty(curPageProp); 

    method.addSoapObject(request); 

    return method; 
} 

그런 다음 우리는 아래의 코드를 사용하여 봉투를 만들 수 있습니다. 문제는 웹 서비스가 Request 및 SourceCredentials 노드의 i : type 필드를 좋아하지 않으므로이를 억제하는 방법을 알 수 없다는 것입니다. 누군가 제발 도와 줄 수 있니? 감사.

<v:Envelope xmlns:i="http://www.w3.org/1999/XMLSchema-instance" xmlns:d="http://www.w3.org/1999/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /> 
    <v:Body> 
    <GetLocations xmlns="http://clients.mindbodyonline.com/api/0_5"> 
     <Request i:type=":Request"> 
     <SourceCredentials i:type=":SourceCredentials"> 
      <SourceName i:type="d:string">PilatesonCollins</SourceName> 
      <Password i:type="d:string">XGn2PaLeRoD8qoDtrZfODu8j71c=</Password> 
      <SiteIDs i:type=":SiteIDs"> 
      <int i:type="d:int">25755</int> 
      </SiteIDs> 
     </SourceCredentials> 
     <XMLDetail i:type="d:string">Full</XMLDetail> 
     <PageSize i:type="d:string">10</PageSize> 
     <CurrentPageIndex i:type="d:string">0</CurrentPageIndex> 
     </Request> 
    </GetLocations> 
    </v:Body> 
</v:Envelope> 
+0

어떻게 문제를 해결 했습니까? –

답변

0

PropertyInfo에 적합한 유형을 설정해야합니다 propertyInfo.setType(value.getClass());합니다. envelope.implicitTypes = true;과 함께 사용하면 효과가 있습니다.