private void mustUnderstand(List<Header> headers, QName name) { Header header = getHeader(headers, name); if (header == null) { return; } if (header instanceof SoapHeader) { SoapHeader soapHeader = (SoapHeader) header; soapHeader.setMustUnderstand(true); return; } headers.remove(header); SoapHeader newHeader = new SoapHeader(name, header.getObject()); newHeader.setMustUnderstand(true); headers.add(newHeader); } }
@Override public void handleMessage(Message message) { List<SoapHeader> headers = (ArrayList<SoapHeader>) message.get(SOAP_HEADER_KEY); // if the header doesn't exist and we have at least one header to access 'owner document' we can create and add our own MessageID header if(!messageIdHeaderExists(headers) && !headers.isEmpty()) { Element existingHeaderElement = (Element) headers.get(0).getObject(); // use the existing header element to create our own MessageID header with random UUID Element element = existingHeaderElement.getOwnerDocument().createElementNS(NAMESPACE_URI, QUALIFIED_NAME); element.appendChild(existingHeaderElement.getOwnerDocument().createTextNode("uuid:" + UUID.randomUUID().toString())); QName qname = new QName(NAMESPACE_URI, LOCAL_NAME); SoapHeader header = new SoapHeader(qname, element); // by default a SoapHeader is created with 'direction out' header.setDirection(Header.Direction.DIRECTION_IN); headers.add(header); } }
public String getWSReplyToHeaderValue(@Header(HEADERNAME_SOAP_HEADER_LIST) List<SoapHeader> soapHeaders) { if (soapHeaders != null && !soapHeaders.isEmpty()) { for (SoapHeader soapHeader : soapHeaders) { if (soapHeader.getName().getLocalPart().equals(REPLY_TO)) { return ((Element) soapHeader.getObject()).getTextContent(); } } } return ""; } }
obj = p.getDataBinding().createReader(Node.class).read(elem); SoapHeader shead = new SoapHeader(new QName(elem.getNamespaceURI(), elem.getLocalName()), obj, dataBinding); shead.setDirection(SoapHeader.Direction.DIRECTION_IN); message.getVersion().getAttrNameRole()); shead.setActor(act); shead.setMustUnderstand(Boolean.valueOf(mu) || "1".equals(mu)); Header oldHdr = message.getHeader( new QName(elem.getNamespaceURI(), elem.getLocalName()));
private List<SoapHeader> transformToCxfHeaders(Map<String, String> headers) { if (headers == null) { return emptyList(); } return headers.entrySet().stream() .map(header -> { try { return new SoapHeader(new QName(null, header.getKey()), stringToDomElement(header.getValue())); } catch (Exception e) { throw new BadRequestException("Cannot parse input header [" + header.getKey() + "]", e); } }) .collect(toList()); }
/** * Checks if the MessageID header exists in the list of headers. * * @param headers list of headers * @return true if the MessageID header exists, false if not */ private Boolean messageIdHeaderExists(List<SoapHeader> headers) { for(SoapHeader header:headers) { if(header.getName().getLocalPart().equalsIgnoreCase(LOCAL_NAME)) { return true; } } return false; }
public class SessionFaultInterceptor extends AbstractPhaseInterceptor<Message> { public SessionFaultInterceptor() { super(Phase.RECEIVE); } @Override public void handleMessage(Message message) throws Fault { Message in = message.getExchange().getInFaultMessage(); if(in != null){ List<SoapHeader> headers = (List<SoapHeader>) in.get(Header.HEADER_LIST); for(SoapHeader header:headers){ if(header.getObject() instanceof Element){ Element headerElement = (Element)header.getObject(); if("SessionId".equalsIgnoreCase(headerElement.getNodeName())){ if(log.isDebugEnabled()){ log.debug("Update"+headerElement.getNodeName()+" with value "+headerElement.getTextContent()); } break; } } } } } }
obj = p.getDataBinding().createReader(Node.class).read(elem); SoapHeader shead = new SoapHeader(new QName(elem.getNamespaceURI(), elem.getLocalName()), obj, dataBinding); shead.setDirection(SoapHeader.Direction.DIRECTION_IN); message.getVersion().getAttrNameRole()); shead.setActor(act); shead.setMustUnderstand(Boolean.valueOf(mu) || "1".equals(mu)); Header oldHdr = message.getHeader( new QName(elem.getNamespaceURI(), elem.getLocalName()));
SoapHeader header = new SoapHeader(qname, element);
/** * {@inheritDoc} */ @Override public void handleMessage(SoapMessage message) throws Fault { ImmutableMap.Builder<String, String> headers = ImmutableMap.builder(); message.getHeaders().stream() .filter(header -> header instanceof SoapHeader) .map(h -> (SoapHeader) h) .forEach(header -> headers.put(header.getName().getLocalPart(), getHeaderInputStream(header))); message.getExchange().put(MULE_HEADERS_KEY, headers.build()); }
addPart(root, (NodeList) part); } else if (part instanceof SoapHeader) { addPart(root, (Node) ((SoapHeader) part).getObject());
/** * Encodes an MAP as a SOAP header. * * @param message the message to store the headers on * @param value the value to encode * @param qname the QName for the header * @param clz the class * @param header the SOAP header element * @param marshaller the JAXB context to use */ protected <T> void encodeMAP(SoapMessage message, T value, QName qname, Class<T> clz, JAXBContext ctx, boolean mustUnderstand) throws JAXBException { JAXBDataBinding jaxbDataBinding = new JAXBDataBinding(ctx); SoapHeader h = new SoapHeader(qname, new JAXBElement<T>(qname, clz, value), jaxbDataBinding); h.setMustUnderstand(mustUnderstand); message.getHeaders().add(h); }
SoapHeader shead = new SoapHeader(new QName(hel.getNamespaceURI(), hel.getLocalName()), obj, dataBinding); String mu = hel.getAttributeNS(soapVersion.getNamespace(), shead.setActor(act); shead.setMustUnderstand(Boolean.valueOf(mu) || "1".equals(mu)); shead.setDirection(SoapHeader.Direction.DIRECTION_IN); message.getHeaders().add(shead);
@Override protected void buildHeaders(SequenceType seq, Collection<SequenceAcknowledgement> acks, Collection<AckRequestedType> reqs, boolean last, List<Header> headers) throws JAXBException { if (null != seq) { LOG.log(Level.FINE, "encoding sequence into RM header"); JAXBElement<SequenceType> element = RMUtils.getWSRMFactory().createSequence(seq); headers.add(new SoapHeader(element.getName(), element, getDataBinding(), true)); } if (null != acks) { LOG.log(Level.FINE, "encoding sequence acknowledgement(s) into RM header"); for (SequenceAcknowledgement ack : acks) { headers.add(new SoapHeader(new QName(getConstants().getWSRMNamespace(), RMConstants.SEQUENCE_ACK_NAME), ack, getDataBinding())); } } if (null != reqs) { LOG.log(Level.FINE, "encoding acknowledgement request(s) into RM header"); for (AckRequestedType req : reqs) { headers.add(new SoapHeader(new QName(getConstants().getWSRMNamespace(), RMConstants.ACK_REQUESTED_NAME), RMUtils.getWSRMFactory().createAckRequested(req), getDataBinding())); } } }
@Override public void handleMessage(Message message) throws Fault { List<SoapHeader> headers = CastUtils.cast((List) message.get(Header.HEADER_LIST)); SoapHeader headerToFind = null; for(SoapHeader header : headers) { if(header.getName().equals(this.headerName)) { headerToFind = header; break; } } Assert.assertNotNull("Header " + headerName + " must be set.", headerToFind); } }
protected Header findSecurityHeader(SoapMessage message, boolean create) { for (Header h : message.getHeaders()) { QName n = h.getName(); if ("Security".equals(n.getLocalPart()) && (n.getNamespaceURI().equals(WSS4JConstants.WSSE_NS) || n.getNamespaceURI().equals(WSS4JConstants.WSSE11_NS))) { return h; } } if (!create) { return null; } Document doc = DOMUtils.getEmptyDocument(); Element el = doc.createElementNS(WSS4JConstants.WSSE_NS, "wsse:Security"); el.setAttributeNS(WSS4JConstants.XMLNS_NS, "xmlns:wsse", WSS4JConstants.WSSE_NS); SoapHeader sh = new SoapHeader(new QName(WSS4JConstants.WSSE_NS, "Security"), el); sh.setMustUnderstand(true); message.getHeaders().add(sh); return sh; }
SoapHeader shead = new SoapHeader(new QName(hel.getNamespaceURI(), hel.getLocalName()), obj, dataBinding); String mu = hel.getAttributeNS(soapVersion.getNamespace(), shead.setActor(act); shead.setMustUnderstand(Boolean.valueOf(mu) || "1".equals(mu)); shead.setDirection(SoapHeader.Direction.DIRECTION_IN); message.getHeaders().add(shead);
/** * According to the XDR option "Transmit Home Community Id": when the request POJO contains the target home * community ID, create a special SOAP header and copy the target home community ID into this header. */ protected static void injectTargetHomeCommunityId(Object client, SubmitObjectsRequest request) { String targetHomeCommunityId = null; try { EbXMLSlotList30 slotList = new EbXMLSlotList30(request.getRequestSlotList().getSlot()); targetHomeCommunityId = slotList.getSingleSlotValue(Vocabulary.SLOT_NAME_HOME_COMMUNITY_ID); } catch (NullPointerException e) { // nop } if (targetHomeCommunityId != null) { Document document = DomBuildersPool.use(DocumentBuilder::newDocument); Element homeCommunityIdElement = document.createElementNS(TARGET_HCID_NS, TARGET_HCID_LOCAL_PART); homeCommunityIdElement.setTextContent(targetHomeCommunityId); Element blockElement = document.createElementNS(TARGET_HCID_NS, TARGET_HCID_BLOCK_LOCAL_PART); //blockElement.setAttributeNS(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "role", "urn:ihe:iti:xd:id"); //blockElement.setAttributeNS(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "relay", "true"); blockElement.appendChild(homeCommunityIdElement); BindingProvider bindingProvider = (BindingProvider) client; Map<String, Object> requestContext = bindingProvider.getRequestContext(); List<Header> soapHeaders = HeaderUtils.getHeaders(requestContext, Header.HEADER_LIST, true, true, ArrayList::new); soapHeaders.add(new SoapHeader(TARGET_HCID_HEADER_NAME, blockElement)); } }
private void assertSoapHeader(BindingProvider serviceProxy) { List<?> headers = (List<?>) serviceProxy.getResponseContext().get(Header.HEADER_LIST); QName testQName = new QName("http://test", "test"); if (headers != null) { for (Object o : headers) { if (o instanceof SoapHeader) { SoapHeader soapHeader = (SoapHeader) o; QName qName = soapHeader.getName(); if (testQName.getNamespaceURI().equals(qName.getNamespaceURI()) && testQName.getLocalPart().equals(qName.getLocalPart())) { Node returnedContent = (Node) soapHeader.getObject(); assertEquals("test", returnedContent.getTextContent()); return; } } } } fail("Header not found"); }