use of org.n52.shetland.w3c.soap.SoapHeader in project arctic-sea by 52North.
the class SoapBinding method checkSoapInjection.
/**
* Check if SoapHeader information is contained in the body response and add the header information to the
* {@link SoapResponse}
*
* @param chain SoapChain to check
*/
private void checkSoapInjection(SoapChain chain) {
if (chain.getBodyResponse() instanceof CommunicationObjectWithSoapHeader) {
CommunicationObjectWithSoapHeader soapHeaderObject = (CommunicationObjectWithSoapHeader) chain.getBodyResponse();
if (soapHeaderObject.isSetSoapHeader()) {
List<SoapHeader> headers = ((CommunicationObjectWithSoapHeader) chain.getSoapRequest()).getSoapHeader();
// TODO do things
chain.getSoapResponse().setHeader(checkSoapHeaders(headers));
}
}
}
use of org.n52.shetland.w3c.soap.SoapHeader in project arctic-sea by 52North.
the class AbstractSoapDecoder method getSoapHeader.
protected List<SoapHeader> getSoapHeader(SOAPHeader soapHeader) {
Map<String, List<SOAPHeaderElement>> headersByNamespace = new HashMap<>();
Iterator<?> headerElements = soapHeader.extractAllHeaderElements();
while (headerElements.hasNext()) {
SOAPHeaderElement element = (SOAPHeaderElement) headerElements.next();
headersByNamespace.computeIfAbsent(element.getNamespaceURI(), Functions.forSupplier(LinkedList::new)).add(element);
}
List<SoapHeader> soapHeaders = Lists.newArrayList();
for (Entry<String, List<SOAPHeaderElement>> key : headersByNamespace.entrySet()) {
String namespace = key.getKey();
try {
Decoder<?, List<SOAPHeaderElement>> decoder = getDecoder(new XmlNamespaceDecoderKey(namespace, SOAPHeaderElement.class));
if (decoder != null) {
Object object = decoder.decode(headersByNamespace.get(namespace));
if (object instanceof SoapHeader) {
soapHeaders.add((SoapHeader) object);
} else if (object instanceof List<?>) {
for (Object o : (List<?>) object) {
if (o instanceof SoapHeader) {
soapHeaders.add((SoapHeader) o);
}
}
}
} else {
LOGGER.info("The SOAP-Header elements for namespace '{}' are not supported by this server!", namespace);
}
} catch (DecodingException owse) {
LOGGER.debug("Requested SOAPHeader element is not supported", owse);
}
}
return soapHeaders;
}
use of org.n52.shetland.w3c.soap.SoapHeader in project arctic-sea by 52North.
the class Soap11Encoder method encode.
@Override
@SuppressFBWarnings("NP_LOAD_OF_KNOWN_NULL_VALUE")
public SOAPMessage encode(SoapResponse soapResponse, EncodingContext additionalValues) throws EncodingException {
if (soapResponse == null) {
throw new UnsupportedEncoderInputException(this, soapResponse);
}
String soapVersion = soapResponse.getSoapVersion();
SOAPMessage soapResponseMessage;
String action = null;
try {
soapResponseMessage = SoapHelper.getSoapMessageForProtocol(soapVersion);
if (soapResponse.getSoapFault() != null) {
createSOAPFault(soapResponseMessage.getSOAPBody().addFault(), soapResponse.getSoapFault());
} else {
if (soapResponse.getException() != null) {
action = createSOAPFaultFromExceptionResponse(soapResponseMessage.getSOAPBody().addFault(), soapResponse.getException());
addSchemaLocationForExceptionToSOAPMessage(soapResponseMessage);
} else {
action = createSOAPBody(soapResponseMessage, soapResponse, soapResponse.getSoapAction());
}
}
if (soapResponse.getHeader() != null) {
List<SoapHeader> headers = soapResponse.getHeader();
for (SoapHeader header : headers) {
if (WsaConstants.NS_WSA.equals(header.getNamespace()) && header instanceof WsaActionHeader) {
((WsaHeader) header).setValue(action);
}
Encoder<Map<QName, String>, SoapHeader> encoder = getEncoder(CodingHelper.getEncoderKey(header.getNamespace(), header));
if (encoder != null) {
Map<QName, String> headerElements = encoder.encode(header);
for (Entry<QName, String> entry : headerElements.entrySet()) {
QName qName = entry.getKey();
soapResponseMessage.getSOAPHeader().addChildElement(qName).setTextContent(headerElements.get(qName));
}
}
}
} else {
soapResponseMessage.getSOAPHeader().detachNode();
}
soapResponseMessage.setProperty(SOAPMessage.WRITE_XML_DECLARATION, String.valueOf(true));
return soapResponseMessage;
} catch (SOAPException soape) {
throw new EncodingException("Error while encoding SOAPMessage!", soape);
}
}
use of org.n52.shetland.w3c.soap.SoapHeader in project arctic-sea by 52North.
the class Soap12Encoder method createSOAP12Header.
private void createSOAP12Header(Envelope envelope, List<SoapHeader> headers, String action) throws EncodingException {
Node headerDomNode = envelope.addNewHeader().getDomNode();
for (SoapHeader header : headers) {
if (WsaConstants.NS_WSA.equals(header.getNamespace()) && header instanceof WsaActionHeader) {
((WsaHeader) header).setValue(action);
}
XmlObject xmObject = encodeObjectToXml(header.getNamespace(), header);
if (xmObject != null) {
Node ownerDoc = headerDomNode.getOwnerDocument().importNode(xmObject.getDomNode().getFirstChild(), true);
headerDomNode.insertBefore(ownerDoc, null);
}
}
}
Aggregations