Почему header null?
Как получить Header, а именно проверить есть ли тег во входящей xml в Java? Для этого есть нижеприведённый код, на сколько понимаю Object внутри Header и нужно сначала получить Header, но он всегда null, кажется я до конца не понимаю как это работает Буду благодарен любой помощи и советам!
XML:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:actor=""
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<ds:Signature
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<Object> // Нужно вытащить этот тег в Javа
<urn:authorities
xmlns:urn="urn:ru:fss:integration:types:signature:v01">
<urn:authority>
<urn:referenceId/>
<urn1:powerOfAttorneyLink
xmlns:urn1="urn:ru:fss:integration:types:mchd:v01">
<urn1:uuid="dff27a6c-174e-11ee-be56-0242ac120002"/>
</urn1:powerOfAttorneyLink>
</urn:authority>
</urn:authorities>
</Object>
</ds:Signature>
</wsse:Security>
</soapenv:Header>
<soapenv:Body wsu:Id="OGRN_1957246130095"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<ws:PutMessageRequest
xmlns:ws="http://ru/sedo/ws">
<systemInfo>
<specVersion>1.0</specVersion>
<software>SAP</software>
<softwareVersion>604</softwareVersion>
</systemInfo>
<interactionType>2</interactionType>
<recipientId>7707024177</recipientId>
<messageType>86</messageType>
<message>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48dXJuOmluc3VyZWRQZXJzb24geG1sbnM6dXJuPSJ1cm46cnU6ZnNzOmludGVncmF0aW9uOnR5cGVzOnJwdTpJbnN1cmVkUGVyc29uOnYwMSIgeG1sbnM6djAyPSJodHRwOi8vd3d3LmZzcy5ydS9pbnRlZ3JhdGlvbi90eXBlcy9wZXJzb24vdjAyIiB4bWxuczp2MDE9Imh0dHA6Ly93d3cuZnNzLnJ1L2ludGVncmF0aW9uL3R5cGVzL2NvbW1vbi92MDEiPjx1cm46ZnVsbE5hbWU+PHYwMjpmaXJzdE5hbWU+0JDQu9C10LrRgdCw0L3QtNGAPC92MDI6Zmlyc3ROYW1lPjx2MDI6bGFzdE5hbWU+0J3QuNC60L7Qu9Cw0LXQsjwvdjAyOmxhc3ROYW1lPjx2MDI6bWlkZGxlTmFtZT7Qk9C10L3QvdCw0LTRjNC10LLQuNGHPC92MDI6bWlkZGxlTmFtZT48L3VybjpmdWxsTmFtZT48dXJuOmJpcnRoRGF0ZT4xOTc4LTAxLTA1PC91cm46YmlydGhEYXRlPjx1cm46Z2VuZGVyPk1BTEU8L3VybjpnZW5kZXI+PHVybjpzbmlscz4xNTQ1ODAwNDQ1ODwvdXJuOnNuaWxzPjx1cm46aW5uPjE4MzEwNDk5MDYwMTwvdXJuOmlubj48dXJuOmlkZW50aXR5RG9jdW1lbnQ+PHVybjpvdGhlcklkZW50RG9jVHlwZT48dXJuOnR5cGU+MTA8L3Vybjp0eXBlPjx1cm46bnVtYmVyPjM1MzQ8L3VybjpudW1iZXI+PHVybjpleHBpcmF0aW9uRGF0ZT4yMDIyLTAzLTAxPC91cm46ZXhwaXJhdGlvbkRhdGU+PC91cm46b3RoZXJJZGVudERvY1R5cGU+PC91cm46aWRlbnRpdHlEb2N1bWVudD48dXJuOm1ldGhvZFJlY2VpdmVQYXltZW50Pjx2MDE6YmFua0luZm8+PHYwMTpiYW5rTmFtZT7QntCQ0J4gItCQ0JvQrNCk0JAt0JHQkNCd0JoiPC92MDE6YmFua05hbWU+PHYwMTpiaWs+MDQ0NTI1NTkzPC92MDE6YmlrPjx2MDE6YWNjb3VudE51bT40MDgxNzgxMDYwNDQzMDA1MjMxMjwvdjAxOmFjY291bnROdW0+PC92MDE6YmFua0luZm8+PC91cm46bWV0aG9kUmVjZWl2ZVBheW1lbnQ+PC91cm46aW5zdXJlZFBlcnNvbj4=</message>
</ws:PutMessageRequest>
</soapenv:Body>
</soapenv:Envelope>
JAVA CODE:
public class SignRequestHandler implements SOAPHandler<SOAPMessageContext> {
public SignRequestHandler() {
try {
this.conf = HandlersConfigurations.getInstance();
this.cryptoService = new MainEndpointImplService(this.conf.getJcpWrapperWsUrl());
Properties props = new Properties();
props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("ftp-util-cryptopro-jcp-handlers-gost.properties"));
algorithm = props.getProperty("ru.ftp.util.ws.crypto.gost.handlers.handlersconfigurations.algorithm");
referenceDataCodeForSedo = props.getProperty("ru.ftp.util.ws.crypto.gost.handlers.handlersconfigurations.referenceDataCodeForSedo");
actorForSedo = props.getProperty("ru.ftp.util.ws.crypto.gost.handlers.handlersconfigurations.actorForSedo");
referenceCertificateCodeForSedo = props.getProperty("ru.ftp.util.ws.crypto.gost.handlers.handlersconfigurations.referenceCertificateCodeForSedo");
} catch (Exception var2) {
var2.printStackTrace();
throw new RuntimeException(var2);
}
}
public boolean handleMessage(SOAPMessageContext messageContext) {
Boolean isResponse = (Boolean) messageContext.get("javax.xml.ws.handler.message.outbound");
String wsdlOperation = ((QName) messageContext.get(MessageContext.WSDL_OPERATION)).getLocalPart();
Вот тут Header всегда null, хотя в изначальной xml он имеется
try {
SOAPHeader header = messageContext.getMessage().getSOAPHeader(); //Почему null?
} catch (SOAPException e) {
throw new RuntimeException(e);
}
} ETC...
Источник: Stack Overflow на русском