2011-03-23 4 views
5

ksoap2에서 envelope.addMapping 함수를 사용하고 있으므로 i : type 속성이없는 항목을 생성해야합니다. android에서 ksoap2의 "i : type ="속성없이 addMapping 사용

내 코드는 내가 무엇을 말할 수에서 내 코드

package ksoap2.test; 

import java.util.Hashtable; 
import java.util.Vector; 

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.KvmSerializable; 
import org.ksoap2.serialization.PropertyInfo; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.AndroidHttpTransport; 
import org.ksoap2.transport.HttpTransportSE; 
import org.kxml2.kdom.Element; 
import org.kxml2.kdom.Node; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

public class ksoap2 extends Activity { 
    /** Called when the activity is first created. */ 
    private static final String SOAP_ACTION = "http://example.com/OperationsService.svc"; 
    private static final String METHOD_NAME = "CreateScan"; 
    private static final String NAMESPACE = "urn:example:services"; 
    private static final String URL = "http://example.com/OperationsService.svc"; 
    private AndroidHttpTransport androidHttpTransport; 
    TextView tv; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tv=(TextView)findViewById(R.id.textView1); 

     try { 
      Element ApiKeyElement = new Element().createElement("", "ApiKey"); 
      ApiKeyElement.setAttribute("", "xmlns", "urn:example:data"); 
      ApiKeyElement.addChild(Node.TEXT, "22DF0959F20743660304CB829B3891F0"); 


      Element[] header = new Element[1]; 
      header[0]=ApiKeyElement; 


      Element request = new Element().createElement(NAMESPACE, METHOD_NAME); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);   
//    PropertyInfo scanProp = new PropertyInfo(); 
//    scanProp.setName("scan"); 
//    scanProp.setValue(""); 

       SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 
       Scan s = new Scan(); 
       s.BaseUrl="http://www.example.com"; 
       s.DisplayName="Example"; 

       PropertyInfo pi = new PropertyInfo(); 
       pi.setName("scan"); 
       pi.setValue(s); 
       pi.setType(s.getClass()); 
       Request.addProperty(pi); 

       //request.addChild(Node.ELEMENT, scanElement); 
       envelope.headerOut = header; 
       //envelope.dotNet = true; 
       envelope.setOutputSoapObject(Request); 

       envelope.addMapping(null, "scanItem",new Scan().getClass()); 
       envelope.dotNet =false; 
       String BodyClass = envelope.bodyOut.getClass().toString(); 
       SoapObject body = (SoapObject)envelope.bodyOut; 
       int count =body.getPropertyCount(); 
       //envelope.encodingStyle = "test"; 

       //envelope.bodyOut=body; 

       androidHttpTransport = new AndroidHttpTransport (URL); 
       androidHttpTransport.debug = true; 
       //androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 

       androidHttpTransport.call(SOAP_ACTION, envelope); 
       Log.d("MyAPP", "----------------- " + androidHttpTransport.requestDump +"\r\n\r\n" + androidHttpTransport.responseDump); 
       ((TextView)findViewById(R.id.textView1)).setText(androidHttpTransport.requestDump +"\r\n\r\n" + androidHttpTransport.responseDump); 
      } catch(Exception E) { 
       Log.d("MyAPP", "----------------- " + androidHttpTransport.requestDump +"\r\n\r\n" + androidHttpTransport.responseDump); 
       ((TextView)findViewById(R.id.textView1)).setText(androidHttpTransport.requestDump+"ERROR:" +"\r\n\r\n" +androidHttpTransport.responseDump +"\r\n\r\n" +E.getClass().getName() + ": " + E.getMessage()); 
      } 
    } 



} 

입니다 여기에

<scan>로 그렇게 <scan i:type="n3:scanItem" xmlns:n3="">이 발생해야

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://www.w3.org/2003/05/soap-encoding" 
    xmlns:v="http://www.w3.org/2003/05/soap-envelope"> 
    <v:Header> 
     <ApiKey xmlns="urn:example:data">APIKey</ApiKey> 
    </v:Header> 
    <v:Body> 
     <CreateScan xmlns="urn:example:services" id="o0" c:root="1"> 
      <scan i:type="n3:" xmlns:n3=""> 
       <n4:BaseUrl i:type="d:string" xmlns:n5="urn:example:data">http://www.example.com</n5:BaseUrl> 
       <n5:DisplayName i:type="d:string" xmlns:n7="urn:example:data">Example Scan</n7:DisplayName> 
      </scan> 
     </CreateScan> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

생성 비누 요청입니다 이 문제는 envelope.addMapping(null, "scanItem",new Scan().getClass()); 행에서 발생하며 "scanItem"부분을 제거하더라도 여전히 생성됩니다. <scan i:type="n3:" xmlns:n3="">

이 점을 이해하는 데 도움이 될 것입니다.

답변

18

내 자신의 질문에 대한 답변입니다. 내가해야 할 일은 줄을 추가하는 것입니다. envelope.implicitTypes = true;

+0

문제가 해결되어 반갑습니다! 왼쪽에있는 체크 표시를 클릭하여 대답을 승인 된 것으로 표시 할 수 있습니다. –

+1

야! 이 같은 문제에 대해 지난 2 시간 동안 내 엉덩이를 파헤 치면 대답이 제 베이컨을 구해 줬습니다. +1 감사합니다 !!! – Jimmy