private static void extractSoapHeaderParts(org.apache.ode.bpel.iapi.Message message, Definition wsdl, org.apache.axiom.soap.SOAPHeader soapHeader, List<javax.wsdl.extensions.soap.SOAPHeader> headerDefs, Message msg) throws BPELFault { // Checking that the definitions we have are at least there for (javax.wsdl.extensions.soap.SOAPHeader headerDef : headerDefs) { handleSoapHeaderPartDef(message, wsdl, soapHeader, headerDef, msg); } // Extracting whatever header elements we find in the message, binding and abstract parts // aren't reliable enough given what people do out there. Iterator headersIter = soapHeader.getChildElements(); while (headersIter.hasNext()) { OMElement header = (OMElement) headersIter.next(); String partName = findHeaderPartName(headerDefs, wsdl, header.getQName()); message.setHeaderPart(partName, OMUtils.toDOM(header)); } }
/** * Fill the ODE's message object with the WSDL message parts processed at the message receiver. * * @param odeRequest Request message pass in to BPEL engine * @param inComingMessage incoming request from message receiver */ private void fillODEMessage(final Message odeRequest, final WSDLAwareMessage inComingMessage) { Map<String, OMElement> bodyParts = inComingMessage.getBodyParts(); Map<String, OMElement> headerParts = inComingMessage.getHeaderParts(); for (Map.Entry<String, OMElement> bodyPart : bodyParts.entrySet()) { if (inComingMessage.isRPC()) { /* In RPC Style messages parent element's name is equal to the part name.*/ odeRequest.setPart(bodyPart.getKey(), OMUtils.toDOM(bodyPart.getValue())); } else { /* in document style there isn't any relationship between part name and element * names. therefore we wrap document style message parts with a element which * has part name as it's local name. */ Document doc = DOMUtils.newDocument(); Element destPart = doc.createElementNS(null, bodyPart.getKey()); destPart.appendChild(doc.importNode(OMUtils.toDOM(bodyPart.getValue()), true)); odeRequest.setPart(bodyPart.getKey(), destPart); } } for (Map.Entry<String, OMElement> headerPart : headerParts.entrySet()) { odeRequest.setHeaderPart(headerPart.getKey(), OMUtils.toDOM(headerPart.getValue())); } }
/** * Return a deep clone of the given message * * @param message * @return */ protected Message cloneMessage(Message message) { Message clone = createMessage(message.getType()); clone.setMessage((Element) message.getMessage().cloneNode(true)); Map<String, Node> headerParts = message.getHeaderParts(); for (String partName : headerParts.keySet()) { clone.setHeaderPart(partName, (Element) headerParts.get(partName).cloneNode(true)); } Map<String, Node> parts = message.getHeaderParts(); for (String partName : parts.keySet()) { clone.setHeaderPart(partName, (Element) parts.get(partName).cloneNode(true)); } return clone; }
odeMsg.setHeaderPart(header.getLocalPart(), DOMUtils.stringToDOM(DOMUtils.domToString(headers.get(header)))); } catch (Exception e) { __log.error("Can't copy input header " + header);
odeMessage.setHeaderPart(p.getName(), OMUtils.toDOM(headerEl));