Отправить байтовый массив из веб-сервиса клиенту - PullRequest
2 голосов
/ 23 июля 2011

Я хочу отправить байтовый массив из веб-сервиса клиенту, который запрашивает операцию, предоставляемую через сервис.В моем методе я читаю изображение в байтовый массив.Я думаю, поместите этот массив байтов в оболочку POJO.Это тип возврата для операции.

@Override
public ImageWrapper getImage() {
    File imageFile = new File("C:\\images\\car.jpg");
    ImageWrapper wrapper = null;
    try {
        BufferedImage img = ImageIO.read(imageFile);
        ByteArrayOutputStream baos = new ByteArrayOutputStream(1000);
        ImageIO.write(img, "jpg", baos);
        baos.flush();
        byte[] result = baos.toByteArray();
        baos.close();
        wrapper = new ImageWrapper();
        wrapper.setContent(result);
        System.out.println("Service image wrapper: " + wrapper);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return wrapper;
}

Я могу получить объект ImageWrapper в клиенте, хорошо.Как и следовало ожидать, он отличается от идентификатора экземпляра ImageWrapper, который создается веб-службой на сервере.Но проблема в том, что когда я пытаюсь получить массив byte [] из ImageWrapper, он становится пустым ... Есть идеи, почему?Класс оболочки выглядит следующим образом:

package soap.service.model;

public class ImageWrapper {
    private byte[] content;

    public void setContent(byte[] content) {
        this.content = content;
    }

    public byte[] getImg() {
        return this.content;
    }
}

, а клиент выглядит так:

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import soap.service.model.ImageWrapper;
import soap.service.sei.ImageSei;

public class ImageClient {
    public static void main(String... args) throws MalformedURLException {
        URL url = new URL("http://localhost:8080/image?wsdl");
        QName qname = new QName("http://impl.service.soap/", "ImageImplService");
        Service service = Service.create(url, qname);
        ImageSei sei = service.getPort(ImageSei.class);
        ImageWrapper iw = sei.getImage();// This is ok
        System.out.println(iw.getImg()); // * This is null
    }
}

=======================================================================

Обновление Даже если я изменю байтовый массив в ImageWrapper на String, он все равно возвращается как «ноль» в клиенте.Мой веб-сервис также настроен на использование стиля «Документ».

1 Ответ

2 голосов
/ 23 июля 2011

Ваш интерфейсный объект (который сериализуется и передается) не содержит общедоступных данных (только метод для получения приватных данных). Ваш байт [] должен быть открытым полем или свойством, которое должно быть включено в сериализованные данные

...