SAAJ совместимость с JAXB - PullRequest
       37

SAAJ совместимость с JAXB

1 голос
/ 01 октября 2010

Я работал над созданием клиента на основе SAAJ.Казалось, что все работает нормально, пока я не реализовал логику для отправки вложений как часть запроса веб-службы.

Операция веб-службы проста - она ​​ожидает строковый элемент для определения местоположения файла иЭлемент base64binary для содержимого файла.

Я протестировал операцию ws с помощью SoapUI, и все вроде бы в порядке.Однако, когда я отправляю вложение файла от моего клиента на основе SAAJ, операция веб-службы получит только значение элемента file-location.Я написал обработчик на ws-сервере для перехвата запроса операции WS, чтобы увидеть, достигает ли вложение даже веб-службы.Как и ожидалось, вложение было в порядке, и я мог получить доступ к его содержимому с помощью API-интерфейса SAAJ в обработчике.

Это заставляет меня задуматься - есть ли проблема совместимости при отправке вложений с использованием SAAJ и получении их через привязки JAXB?Есть что-то, что я пропускаю?

спасибо за любую помощь!

1 Ответ

1 голос
/ 01 октября 2010

Вы должны убедиться, что AttachmentUnmarshaller зарегистрирован на вашем Unmarshaller для получения вложений в JAXB.

import javax.activation.DataHandler;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.attachment.AttachmentUnmarshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jaxbContext = JAXBContext.newInstance(Demo.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        unmarshaller.setAttachmentUnmarshaller(new MyAttachmentUnmarshaller());
    }

    private static class MyAttachmentUnmarshaller extends AttachmentUnmarshaller {

        @Override
        public DataHandler getAttachmentAsDataHandler(String cid) {
            // TODO - Lookup MIME content by content-id, cid, and return as a DataHandler.
            ...
        }

        @Override
        public byte[] getAttachmentAsByteArray(String cid) {
            // TODO - Retrieve the attachment identified by content-id, cid, as a byte[]
            ...
        }

    }

}
...