Недавно я боролся с подобной ситуацией, и, поработав над Google, мне удалось найти следующее решение.
Используя Axis2, вы, вероятно, сгенерировали бы файл MyWSStub, который содержит вызовы к вашей службе.
Создайте класс-оболочку (лучше не трогайте автоматически сгенерированные заглушки), который расширяет вашу заглушку, например. MyWSStubWrapper:
public class MyWSStubWrapper extends MyWSStub {
/**
* @throws AxisFault
*/
public MyWSStubWrapper() throws AxisFault {
}
/**
* @param configurationContext
* @throws AxisFault
*/
public MyWSStubWrapper(ConfigurationContext configurationContext) throws AxisFault {
super(configurationContext);
}
/**
* @param targetEndpoint
* @throws AxisFault
*/
public MyWSStubWrapper(String targetEndpoint) throws AxisFault {
super(targetEndpoint);
}
/**
* @param configurationContext
* @param targetEndpoint
* @throws AxisFault
*/
public MyWSStubWrapper(ConfigurationContext configurationContext, String targetEndpoint) throws AxisFault {
super(configurationContext, targetEndpoint);
}
/**
* @param configurationContext
* @param targetEndpoint
* @param useSeparateListener
* @throws AxisFault
*/
public MyWSStubWrapper(ConfigurationContext configurationContext, String targetEndpoint, boolean useSeparateListener) throws AxisFault {
super(configurationContext, targetEndpoint, useSeparateListener);
}
@Override
protected void addHeader(OMElement omElementToadd, SOAPEnvelope envelop, boolean mustUnderstand) {
SOAPHeaderBlock soapHeaderBlock = envelop.getHeader().addHeaderBlock(omElementToadd.getLocalName(), omElementToadd.getNamespace());
OMNode omNode = null;
// add child elements
for (Iterator iter = omElementToadd.getChildren(); iter.hasNext();) {
omNode = (OMNode) iter.next();
iter.remove();
soapHeaderBlock.addChild(omNode);
}
OMAttribute omatribute = null;
// add attributes
for (Iterator iter = omElementToadd.getAllAttributes(); iter.hasNext();) {
omatribute = (OMAttribute) iter.next();
soapHeaderBlock.addAttribute(omatribute);
}
}
}
Имейте в виду, что приведенный выше код полностью удалит soapenv: mustUnderstand = "0 | 1" из ваших заголовков, если вы хотите добавить, вам нужно вызвать soapHeaderBlock.setMustUnderstand (true | false); где-то в вашем коде.