Java ksoap2具有相似命名空间但不同类型的嵌套项
这是请求信封的外观:Java ksoap2具有相似命名空间但不同类型的嵌套项,java,android,soap,ksoap2,Java,Android,Soap,Ksoap2,这是请求信封的外观: <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: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>
<getLijst xmlns="http://OAM/OMZETAPPMETHODS.xsd">
<selectie i:type="n1:OAM_ArtstructselobjUser" xmlns:n1="http://OAM/OMZETAPPMETHODS.xsd">
<filiaal i:type="d:decimal">4</filiaal>
<artnivsel i:type="n1:OAM_ArtstructobjUser">
<asonummer i:type="d:decimal">1</asonummer>
<asotype i:type="d:string">P</asotype>
</artnivsel>
</selectie>
</getLijst>
</v:Body>
</v:Envelope>
因此,我希望artnivsel
具有自定义类型,但继承selectie
的名称空间。
如果我运行上述代码,我会得到一个05-07 14:22:21.034:错误/AndroidRuntime(16417):由以下原因引起:java.lang.RuntimeException:未知属性:asotype
如果我将第二个addMapping
的名称空间更改为其他任何内容,那么我的代码运行正常。但是我的信封XML不正确。再也没有了
任何能给我一个指针的人,我对ksoap2或soap没有特别的经验。好的,看来更新到ksoap2.6.4可以解决这个问题。
只需将avoidException for Unknown属性添加到SoapSerializationEnvelope
上的true
即可。更新到ksoap2.6.4似乎可以解决此问题。
只需在SoapSerializationEnvelope
String nameSpace = "http://OAM/OMZETAPPMETHODS.xsd";
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setAddAdornments(false);
SoapObject request = new SoapObject(nameSpace, _soapMethod);
OAM_ArtstructselobjUser obj = new OAM_ArtstructselobjUser();
// .. This is where the properties are added, irrelevant
request.addProperty("selectie", obj);
OAM_ArtstructobjUser obj2 = new OAM_ArtstructobjUser();
// .. This is where the properties are added, irrelevant
request.addProperty("artnivsel", obj2);
envelope.setOutputSoapObject(request);
Marshal floatMarshal = new MarshalFloat();
floatMarshal.register(envelope);
envelope.addMapping(nameSpace, "OAM_ArtstructselobjUser", OAM_ArtstructselobjUser.class);
envelope.addMapping(nameSpace, "OAM_ArtstructobjUser", OAM_ArtstructobjUser.class);