Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание SOAP-сообщения, проблема с header 
:(
    Опции темы
check
Дата 13.6.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Простой клиент для веб-сервиса средствами javax.xml.soap.

В ответ на посланное SOAP-сообщение Axis возвращает ошибку, в которой говорится об отсутствии header в моём SOAP. 
А он ведь вроде бы не обязательный? 

Пытаюсь создать header так
Код

SOAPEnvelope env = soapPart.getEnvelope();
SOAPHeader header = env.getHeader();
Name headerName = env.createName("actor", "wsi", "http://schemas.xmlsoap.org/soap/http");
SOAPHeaderElement headerElement = header.addHeaderElement(headerName);
header.addHeaderElement(headerName);

но по-прежнему возвращается та же ошибка.


вот код клиента
Код

    private static SOAPMessage getSOAPMessage()
            throws SOAPException {
        MessageFactory mf = MessageFactory.newInstance();
        SOAPMessage smsg = mf.createMessage();
        SOAPPart soapPart = smsg.getSOAPPart();
        SOAPEnvelope env = soapPart.getEnvelope();
        SOAPHeader header = env.getHeader();
        Name headerName = env.createName("actor", "wsi", "http://schemas.xmlsoap.org/soap/http");
        SOAPHeaderElement headerElement = header.addHeaderElement(headerName);
        header.addHeaderElement(headerName);
        SOAPBody body = env.getBody();
        Name element = env.createName("getEcho");
        SOAPBodyElement ge = body.addBodyElement(element);
        Name name = env.createName("request");
        SOAPElement req = ge.addChildElement(name);
        req.addTextNode("сообчение");

        return smsg;
    }

    public static void main(String[] args)
            throws SOAPException, MalformedURLException {
        SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
        SOAPConnection con = scf.createConnection();
        URL endpoint = new URL("http://localhost:8080/axis/EchoService.jws");
        SOAPMessage response = con.call(getSOAPMessage(), endpoint);
        con.close();

        SAAJResult result = new SAAJResult(response);


        SOAPPart sp = response.getSOAPPart();
        SOAPEnvelope respEnv = sp.getEnvelope();
        SOAPBody respBody = respEnv.getBody();
        SOAPFault fault = respBody.getFault();

        if (respBody.hasFault()) {
            fault = respBody.getFault();
            String code = fault.getFaultCode();
            String s = fault.getFaultString();
            String actor = fault.getFaultActor();

            System.out.println("Код ошибки: " + code);
            System.out.println("Разъяснение: " + s);
            if (actor != null) {
                System.out.println("Ошибка замечена: " + actor);
            }

            Detail detail = fault.getDetail();
            System.out.println("Детали: ");
            if (detail != null) {
               for (Iterator iter = detail.getDetailEntries(); iter.hasNext();) {
                   DetailEntry entry = (DetailEntry) iter.next();
                   String value = entry.getValue();
                   System.out.println(value);
               }
            }

        Iterator it = respBody.getChildElements();
        SOAPBodyElement bodyElement = (SOAPBodyElement) it.next();
        String echo = bodyElement.getValue();
        System.out.println(echo);



Вот что выдаёт
Код

Код ошибки: ns1:Client.NoSOAPAction
Разъяснение: no SOAPAction header!
Детали: 
[username]


Чего не хватает для формирования корректного SOAP?

Это сообщение отредактировал(а) check - 13.6.2008, 22:49
PM MAIL   Вверх
check
Дата 13.6.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Вот WSDL веб-сервиса
Код

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost:8080/axis/EchoService.jws" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/EchoService.jws" xmlns:intf="http://localhost:8080/axis/EchoService.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->

   <wsdl:message name="getReverceEchoResponse">

      <wsdl:part name="getReverceEchoReturn" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="getEchoRequest">

      <wsdl:part name="req" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="getEchoResponse">

      <wsdl:part name="getEchoReturn" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="getReverceEchoRequest">

      <wsdl:part name="req" type="xsd:string"/>

   </wsdl:message>

   <wsdl:portType name="EchoService">

      <wsdl:operation name="getEcho" parameterOrder="req">

         <wsdl:input message="impl:getEchoRequest" name="getEchoRequest"/>

         <wsdl:output message="impl:getEchoResponse" name="getEchoResponse"/>

      </wsdl:operation>

      <wsdl:operation name="getReverceEcho" parameterOrder="req">

         <wsdl:input message="impl:getReverceEchoRequest" name="getReverceEchoRequest"/>

         <wsdl:output message="impl:getReverceEchoResponse" name="getReverceEchoResponse"/>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="EchoServiceSoapBinding" type="impl:EchoService">

      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getEcho">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getEchoRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="getEchoResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/EchoService.jws" use="encoded"/>

         </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="getReverceEcho">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getReverceEchoRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="getReverceEchoResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/EchoService.jws" use="encoded"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="EchoServiceService">

      <wsdl:port binding="impl:EchoServiceSoapBinding" name="EchoService">

         <wsdlsoap:address location="http://localhost:8080/axis/EchoService.jws"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>


PM MAIL   Вверх
powerOn
Дата 14.6.2008, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Судя по сообщению об ошибке не хватает SOAPAction элемента. Вот тут о нем написано.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
check
Дата 14.6.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



SOAPAction это MIME header,   значит добавляю его так
Код

SOAPPart soapPart = smsg.getSOAPPart();
soapPart.setMimeHeader("SOAPAction", "");  


Значение SOAPAction я устанавливаю пустым, потому что в моём WSDL оно такое.


Axis возвращает такую же ошибку: no SOAPAction header.
Сейчас гуглю на эту тему,  кажется это проблема специфична именно для Axis.  Надо попробовать обратиться таким же способом к какому-нибудь другому SOAP- серверу.

Естественно, когда я создаю клиент к этому веб-сервису средствами Axis, всё работает нормально.





Это сообщение отредактировал(а) check - 14.6.2008, 10:02
PM MAIL   Вверх
xeye
Дата 15.6.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 5.6.2008

Репутация: нет
Всего: 1



извините, а в чем смысл ручного создания SOAP запроса? 
лучшие умы бьются над написанием библиотек, которые позволяют это не делать smile

Это сообщение отредактировал(а) xeye - 15.6.2008, 13:03
PM MAIL   Вверх
check
Дата 15.6.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Всё просто. У меня есть книга Ильдара Хабибуллина "Разработка Web-служб средствами Java".
Книга досталась мне на халяву(рекламная акция - купи любую книгу и возьми ещё одну в подарок)  smile  Поэтому я считаю своим долгом проштудировать её целиком.  А там рассматриваются разные средства и подходы к работе с WEB-сервисами и наверное, как это обычно бывает,  более низкоуровневые средства будут погибче.  Во всяком случае знать их не будет лишним.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0800 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.