SBNInloggBegar
객체를 WCF 웹 서비스에 보내려고합니다. SBNInloggBegar
에는 SBPBegar
및 SBPInloggning
의 개체가 포함되어 있으며 여러 문자열이 차례로 포함됩니다. SBPInloggning
에는 SBPSubjekt
이 포함되어 있으며 여러 문자열이 들어 있습니다. KvmSerializable
인터페이스를 사용하여 해당 클래스를 직렬화했습니다.Android Ksoap2 중첩 된 (하위) 유형의 네임 스페이스 설정
private String soap() {
String returnString = "";
String NAMESPACE = "Sambruk";
String METHOD_NAME = "SBAInloggning";
String SOAP_ACTION = "Sambruk/AuthenticationService/SBAInloggning";
String URL = "http://exshaerpm.argentum.local/EliasTest/AuthenticationService/AuthenticationService.svc";
SoapObject soapRequest = new SoapObject(NAMESPACE, METHOD_NAME);
SBPBegar begar = new SBPBegar();
begar.setKommun("Skellefteå kommun");
SBPInloggning inloggning = new SBPInloggning();
inloggning.setAnvandarnamn("hej");
inloggning.setLosenord("hopp");
SBNInloggBegar inloggbegar = new SBNInloggBegar();
inloggbegar.setBegarData(begar);
inloggbegar.setInloggningsData(inloggning);
PropertyInfo prop = new PropertyInfo();
prop.setName("request");
prop.setNamespace("http://www.statskontoret.se/sambruk/nyttomeddelanden");
prop.setType(inloggbegar.getClass());
prop.setValue(inloggbegar);
soapRequest.addProperty(prop);
//soapRequest.addProperty("request", inloggbegar);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); //****
envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.setOutputSoapObject(soapRequest);
envelope.addMapping("http://www.statskontoret.se/sambruk/nyttomeddelanden", "", SBPBegar.class);
envelope.addMapping("http://www.statskontoret.se/sambruk/nyttomeddelanden", "", SBPInloggning.class);
envelope.addMapping("http://www.statskontoret.se/sambruk/sbpinloggning", "", SBPSubjekt.class);
HttpTransportSE aht = new HttpTransportSE(URL);
aht.debug = true;
try
{
aht.call(SOAP_ACTION, envelope);
//SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
Object o = envelope.getResponse();
SBNInloggSvar inloggSvar = new SBNInloggSvar((SoapObject) o);
returnString = inloggSvar.toString();
}
catch(Exception e)
{
e.printStackTrace();
returnString = e.toString();
}
return returnString;
}
이 전송되는 것입니다 : : 정말 <request>
에 대한 네임 스페이스를 설정하지 않으
<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>
<SBAInloggning xmlns="Sambruk">
<n0:request
xmlns:n0="http://www.statskontoret.se/sambruk/nyttomeddelanden">
<BegarData>
<Kommun>Skellefteå kommun</Kommun>
<AppNamn i:null="true" />
<AppVersion i:null="true" />
<MaxAntalSvar i:null="true" />
<AnropsId i:null="true" />
<LastDataVersion i:null="true" />
</BegarData>
<Inloggningsdata>
<anvandarID i:null="true" />
<anvandarnamn>hej</anvandarnamn>
<organisationsAnvID i:null="true" />
<losenord>hopp</losenord>
<aktor i:null="true" />
<subjekt i:null="true" />
</Inloggningsdata>
</n0:request>
</SBAInloggning>
</v:Body>
</v:Envelope>
나는 다음과 같다 기능을 가지고있다. 대신 <BegarData>
및 <InloggningsData>
에 <request>
의 네임 스페이스를 설정해야합니다. 또한,이 같은 <BegarData>
이 <InloggningsData>
에 대한 그것의 아이들을위한 공간과 같은 일을 설정하려면 :
...
<request xmlns:a="http://www.statskontoret.se/sambruk/nyttomeddelanden"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:BegarData xmlns:b="http://www.statskontoret.se/sambruk/sbpbegar">
<b:Kommun>test</b:Kommun>
...
</a:BegarData>
<a:InloggningsData xmlns:b="http://www.statskontoret.se/sambruk/sbpinloggning">
<b:AnvandarID></b:AnvandarID>
...
</a:InloggningsData>
</request>
...
이 작업을 수행 할 수있는 방법이 있습니까?
그런데 Google 코드 사이트에서 2.5.4 버전을 사용하고 있습니다.
이것들을 사용해 보셨습니까? [link] (http://seesharpgears.blogspot.com/2010/10/ksoap-android-web-service-tutorial-with.html) – PedroAGSantos
방금 KvmSerializable을 메소드로 구현할 때 네임 스페이스 필드를 설정할 수 있다는 것을 알았습니다. . 그것은 내가 원하는 솔루션에 가깝지만 모든 유형이 자신의 네임 스페이스를 정의하게 만듭니다.와 같은 태그에 네임 스페이스를 쓰고 싶지만 부모 태그에 네임 스페이스를 정의하고 싶습니다. –
Shathur
@subspider 나는 이미 그 링크를 시도해 봤지만 나에게 도움이되지 못했지만 어쨌든 고마워! – Shathur