1

ksoap2-androidを使用してSOAP呼び出しを行おうとしていますが、サーバーは、SOAPリクエストが次のようになることを期待しています。

<?xml version="1.0" encoding="UTF-8" ?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soapenv:Body>
<hilo:getHLPredAndMetadata xmlns:hilo="http://opendap.co-ops.nos.noaa.gov/axis/webservices/highlowtidepred/wsdl">
  <stationId xmlns="">8454000</stationId> 
  <beginDate xmlns="">20060920 00:00</beginDate> 
  <endDate xmlns="">20060922 23:59</endDate> 
  <datum xmlns="">0</datum> 
  <unit xmlns="">0</unit> 
  <timeZone xmlns="">0</timeZone> 
  </hilo:getHLPredAndMetadata>
  </soapenv:Body>
  </soapenv:Envelope>

しかし、プロパティを追加すると、次の出力が得られます。

<?xml version="1.0" encoding="UTF-8" ?> 
<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:getHLPredAndMetadata id="o0" c:root="1" xmlns:n0="http://opendap.co-ops.nos.noaa.gov/axis/webservices/highlowtidepred/wsdl">
  <stationId i:type="d:string">8722669</stationId> 
  <beginDate i:type="d:string">20101101 00:00</beginDate> 
  <endDate i:type="d:string">20101101 23:00</endDate> 
  <datum i:type="d:int">0</datum> 
  <unit i:type="d:int">0</unit> 
  <timeZone i:type="d:int">0</timeZone> 
  </n0:getHLPredAndMetadata>
  </v:Body>
  </v:Envelope>

ソースはかなりまっすぐ進んでいます。電話をかけた後、以下のエラーが発生します。

11-02 03:01:01.151: ERROR/NoaaTideSoap(389): unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44eff1b8) 
11-02 03:01:01.151: ERROR/NoaaTideSoap(389): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44eff1b8)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.kxml2.io.KXmlParser.exception(KXmlParser.java:245)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:1365)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.ksoap2.transport.Transport.parseResponse(Transport.java:63)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100)

KSOAPの問題が原因で、このエラーが発生する天気がわかりません。呼び出しているサービスからの応答が表示されません。

私の考えでは、サービスはここで指定されているようにプレフィックス「hilo」を期待しています。

そして、私の電話は次のようになります。

さらに、彼らが期待するプロパティでは:

8454000

繰り返しますが、属性は異なります

8722669

KSOAPを使用してこれらの値を設定する方法を知っている人はいますか?

以下はコードスニップです:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

  request.addProperty("stationId","8722669");
  request.addProperty("beginDate","20101101 00:00");
  request.addProperty("endDate","20101101 23:00");
  request.addProperty("datum",0);
  request.addProperty("unit",0);
  request.addProperty("timeZone",0);

  SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
  //soapEnvelope.dotNet = true;
  soapEnvelope.setOutputSoapObject(request);

  AndroidHttpTransport aht = new AndroidHttpTransport(URL);
  aht.setXmlVersionTag("<?xml version=\"1.0\" encoding= \"UTF-8\" ?>");

  aht.debug = true;

前もって感謝します

4

2 に答える 2

0

たくさんのもの:

  1. hiloまたはn0と呼ばれる名前空間は、サーバーに違いはありません。
  2. 応答の解析には他にも問題があると思います。トランスポートデバッグをtrueに設定する必要があります。

androidHttpTransport.debug = true;

次に、getResponse呼び出しでデバッグし、何が得られるかを確認します。サーバーからの応答を含むSoapObject、SoapPrimitive、またはSoapFaultが必要です。デバッグオプションをtrueにすると、bodyInに応答の生のxmlも表示されます。それはあなたが何を理解することを可能にするはずです。

于 2010-11-04T20:51:28.937 に答える
0

Web サービスが .NET ベースの場合は、最初にブレークポイントを配置するか、単にログ メッセージを設定して、Web サービスが正しく呼び出されているかどうかを確認します。

私が提案するもう 1 つのことは、送信するこれらすべてのパラメーターを使用する代わりに、複雑なオブジェクトをパラメーターとして使用することです。

于 2010-11-26T15:28:00.270 に答える