2015-02-26 3 views
0

Мне нужно обновить содержимое AttachmentPart внутри SOAPMessage, как показано на следующем рисунке. Мне нужно держать заголовки одинаковыми.
Можно ли это сделать без создания нового сообщения SOAP? Я использую API SAAJ.Обновление вложения Содержимое упаковки без создания нового сообщения

enter image description here

ответ

1

Вы можете использовать SOAPMessage.getAttachments() вызова, который возвращает итератор всех частей крепления, чтобы вытащить вложения в новый объект, внести необходимые изменения, а затем вызвать SOAPMessage.removeAllAttachments (), чтобы очистить объекты от исходного сообщения и вызвать функцию addAttachmentPart (AttachmentPart) для повторного добавления измененных объектов?

 SOAPMessage message = getSoapMessageFromString(foo); 

     List<AttachmentPart> collectionOfAttachments = new ArrayList<AttachmentPart>(); 

     for (Iterator attachmentIterator = message.getAttachments(); attachmentIterator.hasNext()) { 
      AttachmentPart attachment = (AttachmentPart) attachmentIterator.next(); 
      //**DO WORK HERE ON attachment** 
      collectionOfAttachments.add(attachment); 
     } 

     message.removeAllAttachments(); 

     for (AttachmentPart newAttachment : collectionOfAttachments) { 
      message.addAttachmentPart(newAttachment); 
     } 



// This method takes an XML string as input and uses it to create a new 
// SOAPMessage object 
// and then returns that object for further use. 
private static SOAPMessage getSoapMessageFromString(String xml) 
      throws SOAPException, IOException { 

     MessageFactory factory = MessageFactory.newInstance(); 

     // Create a new message object with default MIME headers and the data 
     // from the XML string we passed in 
     SOAPMessage message = factory 
       .createMessage(
          new MimeHeaders(), 
          new ByteArrayInputStream(xml.getBytes(Charset 
            .forName("UTF-8")))); 
     return message; 
} 

Какие изменения вы планируете внести в свои приложения? Было бы проще просто сохранить тело в объекте DOM и создать новое SOAPMessage alltogether?

+0

Спасибо, это решение работает. –

+0

Быстрый вопрос, как мне создать новое SOAP-сообщение из SOAPPart предыдущего сообщения? Сохранение всех заголовков, метаинформация идентична? –

+0

Хммм, если вам нужно сохранить идентичный контент заголовка без восстановления значений, мне нужно будет кое-что сделать в этом. С помощью метода, описанного выше, вы фактически повторно используете исходный объект сообщения со всеми заголовками, которые вы уже добавили к нему при построении - вы только зачищаете и читаете атрибуты 'attachmentPart'. – roflplanes

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

  • Нет связанных вопросов^_^