Не забудьте обновить массив, который определяет numberOfRowsInSection. Он должен быть обновлен до того, как вы анимируете и удалите
. Мы проверяем, будет ли количество строк в секции равным 1, потому что нам нужно будет удалить весь раздел.
Поправьте меня, если кто-нибудь сможет сделайте этот ответ более ясным.
[self.tableView beginUpdates];
if ([tableView numberOfRowsInSection:indexPath.section] == 1) {
[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];
} else {
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
[self.tableView endUpdates];
По сути, вам нужно использовать WebServiceMessageCallback
в вашем клиенте, чтобы изменить сообщение после его создания, но до его отправки. Остальная часть кода была довольно точно описана @skaffman, поэтому все может выглядеть так:
public void marshalWithSoapActionHeader(MyObject o) {
webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader header = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<credentials xmlns=\"http://example.com/auth\">\n +
<username>"+username+"</username>\n +
<password>"+password"+</password>\n +
</credentials>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
} catch (Exception e) {
// exception handling
}
}
});
}
Лично я считаю, что Spring-WS отстой для такой базовой потребности, они должны исправить SWS-479 .
Вам необходимо преобразовать WebServiceMessage
в SoapMessage
, в котором есть метод getSoapHeader ()
, который можно использовать для изменения заголовка. В свою очередь, SoapHeader
имеет различные методы для добавления элементов, включая getResult ()
(который может использоваться как результат операции Transformer.transform ()
). .