Извлечение вложений из сгенерированной заглушки CXF - PullRequest
0 голосов
/ 13 июля 2011

Мы мигрируем из AXIS1 в CXF и генерируем заглушку с помощью утилиты ANT wsdltojava, предоставляемой CXF.Однако мы не можем получить присоединения от ответа Webservicecall, поскольку эти вложения непосредственно не встроены в ответ.В более ранней реализации использовался стандартный метод getAttachments () API AXIS.Пожалуйста, помогите

1 Ответ

2 голосов
/ 21 октября 2011

Возможно, к настоящему моменту уже найден ответ, но для всех остальных ключом является то, что прокси-сервер службы может быть приведен к javax.xml.ws.Binding, а затем вы можете получить ResponseContext (карту) и вложения с помощью клавиши org.apache.cxf.message.Message.ATTACHMENTS:

import javax.activation.DataHandler;
import javax.xml.ws.BindingProvider;
import org.apache.cxf.message.Attachment;
import org.apache.cxf.message.Message;

import org.apache.commons.io.IOUtils;
...

Collection<Attachment> attachments = (Collection<Attachment>)
    ((BindingProvider)yourServiceProxy).getResponseContext()
        .get(Message.ATTACHMENTS);
for (Attachment attachment : attachments) {
    // ID is in attachment.getId();
    // Data is in attachment.getDataHandler();

    // Eg:
    DataHandler data = attachment.getDataHandler();
    InputStream is = data.getInputStream();
    File dataFile = new File(data.getName());
    System.out.println("Writing data to:\n\t" + 
        dataFile.toString());     
    FileOutputStream fos = new FileOutputStream(dataFile);
    IOUtils.copy(is, fos);
    fos.close();   
}
...