5

私はすでに私の問題についてインターネットを読んでみましたが、必要な適切な情報を見つけることができなかったので、私の問題を説明しようとしました:

SOAPを介してWebサービスと「会話」するためにkSoap2を使用しています。SOAP リクエストを生成するには、次のコードを使用します。

// Generate SOAP request XML
SoapObject request = new SoapObject(PUB_NAMESPACE,
"testSoapInterface");   

// Add request header
PropertyInfo requestHeader = new PropertyInfo();
requestHeader.setNamespace(PUB_NAMESPACE);
requestHeader.setName("requestheader");

// Generate username property
PropertyInfo usernameProp = new PropertyInfo();
usernameProp.setNamespace(BASE_NAMESPACE);
usernameProp.setName("username");
usernameProp.setValue(username);

// Generate applicationId property
PropertyInfo applicationIdProp = new PropertyInfo();
applicationIdProp.setNamespace(BASE_NAMESPACE);
applicationIdProp.setName("applicationId");
applicationIdProp.setValue("test");

// Add properties to requestHeader (nested)
requestHeader.setValue(new SoapObject(PUB_NAMESPACE, "requestheader")
.addProperty(usernameProp)
.addProperty(applicationIdProp));

request.addProperty(requestHeader);

これをシリアル化するために、次を使用します。

// Serialize SOAP request to the non .NET based SOAP server
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = false;
soapEnvelope.implicitTypes = true;
soapEnvelope.setAddAdornments(false);
soapEnvelope.setOutputSoapObject(request);

ネストされた SOAP を使用しているため (リクエストヘッダーは applicationId とユーザー名で構成されています)、これが原因であると想像できます。また、行ごとに異なる名前空間を使用する必要があり、これも原因になる可能性があります。

誰でもこれについて私を助けることができますか?? ありがとう!

4

3 に答える 3

2

同じ問題があり、i:type を生成せずに PropertyInfo を使用することは不可能のようです。良い解決策は AddProperty(PropertyInfo pi) をオーバーライドすることで、i:Type がなくてもどのような場合でも機能します。

提供する 3 つのソリューションを手に入れました。

1

名前空間が必要ない場合は、 request.AddProperty(name,value) がそれを行います!

2

リクエストヘッダーを独自の SoapObject にすることができますが、「i:type」は使用しません。

SoapObject requestHeader = new SoapObject(NAMESPACE,"requestheader"); 

そして最後の行で

request.AddSoapObject(requestHeader);

3

私にとっては、タイプが無視されるため、SoapEnvelope のバージョンを「VER10」に設定するとうまくいきました。それらはまだあなたのリクエストにありますが、無視されています。を次のように置き換えますSoapEnvelope.VER11SoapEnvelope.VER10

于 2012-10-11T09:36:12.510 に答える
0

どこで作成していても

 SoapSerializationEnvelope sEnvelop;

割り当てるだけsEnvelop.implicitTypes = true;

"i:type="d:string"" または "i:type="d:long"" 内部データ型タグは作成されず、Web サービスは正常に実行されます

于 2017-01-12T13:41:54.493 に答える