Запрос мыла на основе Java всегда возвращает ответ мыла с 0 в качестве значения, которое мне нужно - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь отправить запрос на мыло в открытый веб-сервис (конвертер валют webserviceX.NET). Вот мой код:

String SOAP_REQUEST = "<SOAP:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP:Body><ConversionRate xmlns=\"http://www.webserviceX.NET/\"/>" +
        "<FromCurrency>EUR</FromCurrency><ToCurrency>ILS</ToCurrency></SOAP:Body></SOAP:Envelope>";



//  SOAPEnvelope env = new SOAPEnvelope();
//Create a Stream Source of the Request String
  byte[] reqBytes = SOAP_REQUEST.getBytes();
  ByteArrayInputStream bis = new ByteArrayInputStream(reqBytes);
  StreamSource ss = new StreamSource(bis);

  //Create a SOAP Message Object
  MessageFactoryImpl messageFactory = new MessageFactoryImpl();
  SOAPMessage msg = messageFactory.createMessage();
  SOAPPart soapPart = msg.getSOAPPart();

  //Set the soapPart Content with the stream source
  soapPart.setContent(ss);

  //Create a WebService Call
  Service service = new Service();
  Call call = (Call)service.createCall();
  call.setTargetEndpointAddress(new java.net.URL(endpoint));
  call.setProperty( Call.SOAPACTION_USE_PROPERTY, new Boolean( true ) );
  call.setProperty( Call.SOAPACTION_URI_PROPERTY, "http://www.webserviceX.NET/ConversionRate");
  call.setEncodingStyle("utf-8");

  //Invoke the WebService.
  SOAPEnvelope resp = call.invoke(((org.apache.axis.SOAPPart)soapPart).getAsSOAPEnvelope());
 ...
//then i parse the resulting SOAPEnvelope get the value.

здесь, в этом URL, вы можете увидеть природу запроса и ответа на мыло при взаимодействии с этим веб-сервисом. http://www.webservicex.net/CurrencyConvertor.asmx?op=ConversionRate

мой код Java выше, получите правильный и точный ответ мыла, указанный в URL, который я указал и ожидал ... но всегда со значением, которое мне нужно, равным 0 Это мыльный ответ, который я получаю:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body><ConversionRateResponse 
xmlns="http://www.webserviceX.NET/">
<ConversionRateResult>0</ConversionRateResult></ConversionRateResponse>
</soap:Body></soap:Envelope>

Вы можете увидеть CoversionRateResult как 0, хотя он должен вернуть 4.69. Я попробовал другой веб-сервис, который они предоставляют, и я всегда получаю такой результат.

Может кто-нибудь помочь мне, посмотрев, что может отсутствовать в моем коде Java? Я пробовал разные варианты и продолжаю играть с днём :( .. и ничего. Буду очень признателен, если кто-нибудь поможет мне в этом. Спасибо,

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

В моем примере выше передана правильная строка:

String SOAP_REQUEST = 
"<soapenv:Envelope 
     xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"
     xmlns:web=\"http://www.webserviceX.NET/\">
 <soapenv:Header/>
 <soapenv:Body>
 <web:ConversionRate>
 <web:FromCurrency>EUR</web:FromCurrency>
 <web:ToCurrency>ILS</web:ToCurrency>
 </web:ConversionRate>
 </soapenv:Body></soapenv:Envelope>"

На всякий случай, если кто-то столкнулся с этой проблемой .. Моя репутация не позволяет мне пометить ее как правильную.И большое спасибо Макфиннигану за помощь.

0 голосов
/ 24 февраля 2012

Попробуйте с этим XML

<soap:Envelope
    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" 
    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" 
    xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">
    <soap:Body><ConversionRate xmlns=\"http://www.webserviceX.NET/\"/>
    <FromCurrency>EUR</FromCurrency>
    <ToCurrency>ILS</ToCurrency>
    </soap:Body>
    </soap:Envelope>
...