2012-01-20 10 views
1

バットをオフにして、ここではソープコールの実装から無関係のビットを差し引いたものです。ksoapで名前空間宣言を削除する方法はありますか?

public class MySoapClient implements AbstractSoapClient 
{ 

    private String NAMESPACE = "http://www.examples.com/wsdl/MyService/"; 
    private String METHOD_NAME = "getPersonDetails"; 
    private String SOAP_ACTION = "http://www.examples.com/getPersonDetails/"; 
    String URL = "http://192.168.0.10:8088/mockMyServiceBinding?WSDL"; 


    public Object process() throws Exception 
    { 
     SoapSerializationEnvelope envelope = generateEnvelope(); 
     return responseObject = makeCall(envelope); 
    } 

    private SoapSerializationEnvelope generateEnvelope() 
    { 
     // dont set a namespace for the requestobject, otherwise ksoap adds implicit namespaces onto request elements 
     SoapObject requestObject = new SoapObject("", METHOD_NAME); 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.implicitTypes = true; 

     requestObject.addProperty("name", "Dave"); 
     envelope.setOutputSoapObject(requestObject); 

     return envelope; 
    } 

    private Object makeCall(SoapSerializationEnvelope envelope) 
    { 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     try 
     { 
      androidHttpTransport.debug = true; 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      return envelope.bodyIn; 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      return e; 
     } 
    } 


} 

私は問題がSoapObject requestObject = new SoapObject("", METHOD_NAME);部分だと思います。

私はSoapObject requestObject = new SoapObject("", METHOD_NAME);を使用している場合はその後、私はbodyOutでこれを取得する:

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" 
      xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"> 
    <v:Header/> 
    <v:Body> 
     <getPersonDetails xmlns="" id="o0" c:root="1"> 
      <name>Dave</name> 
     </getPersonDetails> 
    </v:Body> 
</v:Envelope> 

私はSoapObject requestObject = new SoapObject(NAMESPACE, METHOD_NAME);を使用している場合はその後、私はbodyOutでこれを取得する:

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" 
      xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"> 
    <v:Header/> 
    <v:Body> 
     <n0:getPersonDetails id="o0" c:root="1" xmlns:n0="http://www.examples.com/wsdl/MyService/"> 
      <name i:type="d:string">Dave</name> 
     </n0:getPersonDetails> 
    </v:Body> 
</v:Envelope> 

BUT..SoapUIは、以下を受け付けます有効なXMLリクエストとして

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" 
      xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"> 
    <v:Header/> 
    <v:Body> 
     <getPersonDetails> 
      <name>Dave</name> 
     </getPersonDetails> 
    </v:Body> 
</v:Envelope> 

何らかの理由で、私はxmlns="http://www.examples.com/getPersonDetails/" id="o0" c:root="1"の部分を削除する方法を見つけることができません、助けてください!

どうすればxmlns宣言を完全に削除できますか?それはSoapObjectを作成し、「」

答えて

8

envelope.implicitTypes = true; 

など

envelope.setAddAdornments(false); 

と遊ぶ、あなたはそれはあなたがやりたいことを得るかどうかを確認するために、名前空間を設定し、「汚い」感じています。また、結局、要求は完全に有効であり、SoapUIではなく、それであればサーバーに依存することに注意してください。

+0

あなたは私の命を救ってください!ありがとう! –

+0

@Manfred Moser - これにはどのような提案がありますか? http://stackoverflow.com/questions/35573801/ksoap2-wsdl-remove-prefix-in-request – NoobMe

0

まだ削除できない場合、またはNested Request XML要素を作成する必要がある場合は、この要素を使用します。

public static SoapSerializationEnvelope getSoapEnvelopeForRegister(String methodName, String nameSpace, Hashtable hashProperty, Hashtable securityQueAns) { 
     SoapObject soapObject = new SoapObject(nameSpace, methodName); 

     for (Object sKey : hashProperty.keySet()) { 
      Object sValue = hashProperty.get(sKey); 
      soapObject.addProperty(sKey.toString(), sValue); 
     } 

     SoapObject item = new SoapObject("", "securityQuestions"); 
     for (Object sKey : securityQueAns.keySet()) { 
      Object sValue = securityQueAns.get(sKey); 
      item.addProperty(sKey.toString(), sValue); 
     } 
     soapObject.addSoapObject(item); 

     //Log.d("REQ: Obj: ", soapObject.toString()); 
     return createSoapEnvelope(soapObject); 
    } 

Output Req。次のようなものです:

<UNAME>nk</UNAME> 
     <MOBILENUMBER>0561063097</MOBILENUMBER> 
     <UPWD>p</UPWD> 
     <CARDNUMBER>5173950000000105</CARDNUMBER> 
     <EMAILID>[email protected]</EMAILID> 
     <CARDHOLDER>AHDAB INTERNATIONAL LUXURY TRANSPORT LLC</CARDHOLDER> 
     <DEVICEID>e7fdd833268c96c7</DEVICEID> 
     <DOB>1975-01-01</DOB> 
     <securityQuestions> 
      <SA1>a1</SA1> 
      <SA2>a2</SA2> 
      <SQ2>What is your first school name?</SQ2> 
      <SQ1>Where was your first job?</SQ1> 
      <SA3>a3</SA3> 
      <SQ3>What is your first school name?</SQ3> 
     </securityQuestions> 
関連する問題