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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Attachment в ответах от веб-сервиса. Проблема с attachment в jax-ws. 
:(
    Опции темы
RWIII
Дата 5.11.2012, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет. 
Есть веб-сервис - ejb stateless session bean. У него есть один веб-метод - getConfig. Мне нужно, чтобы в ответе веб-сервиса прикреплялся attachment. 

Вот, код сервиса: 

Код

import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.GZIPOutputStream;

import javax.activation.DataHandler;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebParam.Mode;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
import javax.jws.soap.SOAPBinding.Style;
import javax.jws.soap.SOAPBinding.Use;
import javax.xml.bind.DatatypeConverter;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

@SOAPBinding(
        parameterStyle = ParameterStyle.WRAPPED, 
        style = Style.DOCUMENT, 
        use = Use.LITERAL)
@Stateless(
        description = "stateless description", 
        mappedName = "EJB-mapped-service", 
        name = "EJB-WS-MyWeb")
@WebService(
        name = "MyWeb", 
        portName = "MyWebPort", 
        serviceName = "services")
public class MyService implements MyServiceRemote, MyServiceLocal {

    @Resource(
            description = "web service context", 
            name = "webServiceContext")
    private WebServiceContext webServiceContext;

    @WebMethod(
            action = "getConfig", 
            operationName = "getConfig")
    public String getConfig(
            @WebParam(
                    mode = Mode.IN, 
                    name = "name", 
                    partName = "PartName") 
            String name)
            throws Exception {

        String fileContent = "aaaabbbbbcccccdddddeeeee";

        MessageContext mc = webServiceContext.getMessageContext();
        Map<String, DataHandler> attachments = new HashMap<String, DataHandler>();
        
        DataHandler dataHandler = new DataHandler(packXmlData(fileContent), "application/gzip");
        attachments.put("RETURN_FROM_SERVER", dataHandler);
        
        if (mc.containsKey(MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS)) {
            mc.remove(MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS);
        }
        
        mc.put(MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS, attachments);
        
        return fileContent;
    }

    public static Object packXmlData(String source) {

        ByteArrayOutputStream buffer = new ByteArrayOutputStream(source.length() * 2);
        try {
            GZIPOutputStream out = new GZIPOutputStream(buffer);
            out.write(source.getBytes());
            out.flush();
            out.close();
        } catch (Exception e) {
            return new ByteArrayOutputStream();
        }
        
        String encode = DatatypeConverter.printBase64Binary(buffer.toByteArray());

        return encode;
    }
}


Интерфейсы:

Код

import javax.ejb.Remote;

@Remote
public interface MyServiceRemote {
    String getConfig(String name) throws Exception;
}


Код

import javax.ejb.Local;

@Local
public interface MyServiceLocal {
    String getConfig(String name) throws Exception;
}




Но через soapUI видно, что нет никаких вложений.
user posted image

Исходный код примера прикреплен.

Пожалуйста, помогите решить данную проблему.
Спасибо.
PM MAIL   Вверх
priam220
Дата 6.11.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

webServiceContext

На сколько я понимаю, это статическая часть соединения. Т.е. WebServiceContext создается на стороне клиента при создании порта, а не при каждом обращении к методу. 
Хотя я могу запросто ошибаться. 
В таком случае, если надо передавать динамические данные, то вместо String надо передавать сложный объект.


Это сообщение отредактировал(а) priam220 - 6.11.2012, 13:53
PM MAIL   Вверх
RWIII
Дата 6.11.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



WebServiceContext инжектируется контейнером.
В дебаге видно, что необходимая инициализация есть. Даже более того, при выходе из метода я вижу, что добавленые мною attachment"ы есть в контексте WebServiceContext.
Но до клиента ничего не доходит. Проверял уже и в soapUI, и просто в клиенте :(
PM MAIL   Вверх
priam220
Дата 6.11.2012, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а что используете в качестве сервера? Там в Jboss какие то баги.

И WebServiceContext webServiceContext не должен быть private.

jboss

Это сообщение отредактировал(а) priam220 - 6.11.2012, 15:19
PM MAIL   Вверх
RWIII
Дата 6.11.2012, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



от jboss отказались)
сейчас сидим на GlassFish Server Open Source Edition 3.0.1 (Java EE 6) 
а EJB используется версии 3.0.

сделал public"ом, но эффекта не дало..

Это сообщение отредактировал(а) RWIII - 6.11.2012, 15:37
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.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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