2010-10-01 5 views
1

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

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

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

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

благодарит за любую помощь!

ответ

1

Вам необходимо убедиться, что 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[] 
      ... 
     } 

    } 

} 
+0

Как обеспечить это? также, если AttachmentUnmarshaller не зарегистрирован, то как приходят вложения, отправленные через SoapUI, правильно решены? – anirvan

+0

Используете ли вы сгенерированный клиент или ручной клиент с вашим сервисом? –

+0

Клиент написан вручную, на основе SAAJ. Поскольку клиенту потребуется интерфейс w/many web-сервисов, мы не можем просто создавать привязки, специфичные для любого конкретного WSDL. – anirvan

Смежные вопросы