/** * 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())); } }
public static org.apache.ode.bpel.iapi.Message parseResponseFromRESTService(BPELMessageContext partnerInvocationContext, PartnerRoleMessageExchange odePartnerMex) { org.apache.ode.bpel.iapi.Message messageToODE = odePartnerMex.createMessage( odePartnerMex.getOperation().getOutput().getMessage().getQName()); BindingOperation bindingOp = getBindingOperation(partnerInvocationContext, odePartnerMex.getOperationName()); BindingOutput bindingOutPut = getBindingOutPut(bindingOp); javax.wsdl.extensions.mime.MIMEContent mimeContent = getFirstExtensibilityElement(bindingOutPut, MIMEContent .class); if (mimeContent != null) { SOAPEnvelope soapEnv = partnerInvocationContext.getOutMessageContext().getEnvelope(); Iterator childElementsItr = soapEnv.getBody().getChildElements(); while (childElementsItr.hasNext()) { OMNode child = (OMNode) childElementsItr.next(); if (child.getType() == OMNode.ELEMENT_NODE) { Document doc = DOMUtils.newDocument(); Element domPart = doc.createElementNS(null, mimeContent.getPart()); domPart.appendChild(doc.importNode(OMUtils.toDOM((OMElement) child), true)); messageToODE.setPart(mimeContent.getPart(), domPart); return messageToODE; } } } throw new IllegalArgumentException("WSO2 BPS only support HTTP binding with mime output."); }
private void invokeProbeService(PartnerRoleMessageExchange prmx) { Message msg = prmx.getRequest(); Element elm1 = prmx.getRequest().getPart("probeName"); Element elm2 = prmx.getRequest().getPart("probeData"); if ( elm1 != null && elm2 != null ) { String cat = elm2.getTextContent()+" -> "+elm1.getTextContent(); elm2.setTextContent(cat); msg.setPart("probeData", elm2); final Message response = prmx.createMessage(prmx.getOperation().getOutput().getMessage().getQName()); response.setMessage(msg.getMessage()); prmx.reply(response); } }