1

私はこのようなSOAPリクエストを持っています、それは正常に動作しています:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://com/">
   <soapenv:Header/>
   <soapenv:Body>
  <web:ConversionRate>
     <!--Optional:-->
     <FromCurrency>?</FromCurrency>
     <!--Optional:-->
     <ToCurrency>?</ToCurrency>
  </web:ConversionRate>
 </soapenv:Body>
</soapenv:Envelope>

概念を理解するために、リクエストを少し変更していました。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
   <soapenv:Header/>
   <soapenv:Body>
      <ConversionRate xmlns="http://com/">>
     <!--Optional:-->
     <FromCurrency>?</FromCurrency>
     <!--Optional:-->
     <ToCurrency>?</ToCurrency>
  </ConversionRate>
  </soapenv:Body>
</soapenv:Envelope>

2番目のものは機能せず、間違った答えを投げます。

私のサービスクラスは

package com; 
import javax.jws.WebService;

import javax.jws.WebMethod;
import javax.jws.WebParam;


 @WebService (targetNamespace="http://com/") 
 public class CurrencyConvertor
 { 
 public String ConversionRate (@WebParam(name = "FromCurrency") String FromCurrency, @WebParam(name = "ToCurrency")  String ToCurrency)
 { 
System.out.println("ST\n" +  FromCurrency + "\n" + ToCurrency + "\nEnd" );
switch(FromCurrency+","+ToCurrency)
{
case "USD,INR":
 return "58";

case "INR,USD":
 return "0.017";

default:
return "XXX";

}
}
}

2 番目の要求は常にデフォルトのケースになります。名前空間を変更したため、値が null として送信されています。したがって、私の Web サービスは 2 番目の要求に適切に応答し、何が問題を引き起こし、これをどのように修正する必要があります。

4

1 に答える 1

0

あなたの名前空間は、よく見えても正しくありません。com のみへのリンクを含む回答を投稿することはできないため、com を com.example に変更する必要があります。

tns= http://com.example/は、webmethod ではなく、WebService で定義されています。メソッド宣言を次のように変更します

public String ConversionRate (
    @WebParam(name = "FromCurrency", tagetNamespace = "http://com.example/") String FromCurrency, 
    @WebParam(name = "ToCurrency", tagetNamespace = "http://com.example/")  String ToCurrency) { 

    ... 

}

XMLが有効な形式であるかどうかは私にもわかりません

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
   <soapenv:Header/>
   <soapenv:Body>
      <ConversionRate xmlns="http://com.example/">
     <FromCurrency>?</FromCurrency>
     <ToCurrency>?</ToCurrency>
  </ConversionRate>
  </soapenv:Body>
</soapenv:Envelope>

または名前空間はパラメーターのみに必要です

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
   <soapenv:Header/>
   <soapenv:Body>
      <ConversionRate>
     <FromCurrency xmlns="http://com.example/">?</FromCurrency>
     <ToCurrency xmlns="http://com.example/">?</ToCurrency>
  </ConversionRate>
  </soapenv:Body>
</soapenv:Envelope>
于 2013-06-19T05:53:42.690 に答える