Modified: ode/branches/APACHE_ODE_1.1/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java Thu Mar 27 16:40:14 2008 @@ -27,12 +27,13 @@ public interface MessageDAO { void setType(QName type); - QName getType(); - - void setData(Element value); - + + void setData(Element value); Element getData(); + + void setHeader(Element value); + Element getHeader(); MessageExchangeDAO getMessageExchange(); }
Modified: ode/branches/APACHE_ODE_1.1/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java Thu Mar 27 16:40:14 2008 @@ -174,6 +174,7 @@ private static final long serialVersionUID = 1L; public OScope.Variable variable; public OMessageVarType.Part part; + public OMessageVarType.Part headerPart; public OExpression location; public VariableRef(OProcess owner) { @@ -189,8 +190,7 @@ * @return <code>true</code> if whole-message reference */ public boolean isMessageRef() { - return variable.type instanceof OMessageVarType && - part == null && location == null; + return variable.type instanceof OMessageVarType && part == null && headerPart == null && location == null; } /** @@ -198,10 +198,13 @@ * @return <code>true</code> if reference to a message part */ public boolean isPartRef() { - return variable.type instanceof OMessageVarType && - part != null && location == null; + return variable.type instanceof OMessageVarType && part != null && location == null; } + public boolean isHeaderRef() { + return variable.type instanceof OMessageVarType && headerPart != null && location == null; + } + public String toString() { return "{VarRef " + variable + (part==null ? "" : "." + part.name) + Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Thu Mar 27 16:40:14 2008 @@ -90,6 +90,8 @@ import org.apche.ode.bpel.evar.ExternalVariableModule.Value; import org.w3c.dom.Element; import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Document; class BpelRuntimeContextImpl implements BpelRuntimeContext { @@ -512,7 +514,7 @@ MessageDAO message = mex.createMessage(plinkInstnace.partnerLink.getMyRoleOperation(opName).getOutput() .getMessage().getQName()); - message.setData(msg); + buildInvokeMessage(message, msg); MyRoleMessageExchangeImpl m = new MyRoleMessageExchangeImpl(_bpelProcess._engine, mex); _bpelProcess.initMyRoleMex(m); @@ -719,8 +721,8 @@ MessageDAO message = mexDao.createMessage(operation.getInput().getMessage().getQName()); mexDao.setRequest(message); - message.setData(outgoingMessage); message.setType(operation.getInput().getMessage().getQName()); + buildInvokeMessage(message, outgoingMessage); // Get he my-role EPR (if myrole exists) for optional use by partner // (for callback mechanism). @@ -747,6 +749,7 @@ Message odeRequest = myRoleMex.createMessage(operation.getInput().getMessage().getQName()); odeRequest.setMessage(outgoingMessage); + ((MessageImpl)odeRequest)._dao.setHeader(message.getHeader()); if (BpelProcess.__log.isDebugEnabled()) { __log.debug("Setting myRoleMex session ids for p2p interaction, mySession " @@ -803,7 +806,21 @@ } return mexDao.getMessageExchangeId(); + } + private void buildInvokeMessage(MessageDAO message, Element outgoingElmt) { + Document doc = DOMUtils.newDocument(); + Element header = doc.createElement("header"); + NodeList parts = outgoingElmt.getChildNodes(); + for (int m = 0; m < parts.getLength(); m++) { + Element part = (Element) parts.item(m); + if (part.getAttribute("headerPart") != null && part.getAttribute("headerPart").length() > 0) { + header.appendChild(doc.importNode(part, true)); + outgoingElmt.removeChild(part); + } + } + message.setData(outgoingElmt); + message.setHeader(header); } void execute() { @@ -1089,7 +1106,7 @@ } public Element getPartnerResponse(String mexId) { - return _getPartnerResponse(mexId).getData(); + return mergeHeaders(_getPartnerResponse(mexId)); } public Element getMyRequest(String mexId) { @@ -1119,9 +1136,7 @@ __log.fatal(msg); throw new BpelEngineException(msg); } - - return request.getData(); - + return mergeHeaders(request); default: // We should not be in any other state when requesting this. String msg = "Engine requested response while the message exchange " + mexId + " was in the state " @@ -1129,7 +1144,22 @@ __log.fatal(msg); throw new BpelEngineException(msg); } + } + private Element mergeHeaders(MessageDAO msg) { + // Merging header data, it's all stored in the same variable + Element data = msg.getData(); + if (msg.getHeader() != null) { + NodeList headerParts = msg.getHeader().getChildNodes(); + for (int m = 0; m < headerParts.getLength(); m++) { + if (headerParts.item(m).getNodeType() == Node.ELEMENT_NODE) { + Element headerPart = (Element) headerParts.item(m); + headerPart.setAttribute("headerPart", "true"); + data.appendChild(data.getOwnerDocument().importNode(headerPart, true)); + } + } + } + return data; } public QName getPartnerFault(String mexId) { Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java Thu Mar 27 16:40:14 2008 @@ -21,61 +21,105 @@ import java.util.List; import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; import javax.xml.namespace.QName; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Node; +import org.w3c.dom.Document; import org.apache.ode.bpel.dao.MessageDAO; import org.apache.ode.bpel.iapi.Message; +import org.apache.ode.utils.DOMUtils; public class MessageImpl implements Message { - MessageDAO _dao; + MessageDAO _dao; - public MessageImpl(MessageDAO message) { - if (message == null) - throw new NullPointerException("null message!"); - _dao = message; - } - - public Element getPart(String partName) { - Element message = getMessage(); - NodeList eltList = message.getElementsByTagName(partName); - if (eltList.getLength() == 0) return null; - else return (Element) eltList.item(0); - } - - public void setMessagePart(String partName, Element content) { - Element message = getMessage(); - message.appendChild(message.getOwnerDocument().importNode(content, true)); - setMessage(message); - } - - public void setMessage(Element msg) { - _dao.setData(msg); - } - - public Element getMessage() { - return _dao.getData(); - } - - public QName getType() { - return _dao.getType(); - } - - public List<String> getParts() { - ArrayList<String> parts = new ArrayList<String>(); - Element message = getMessage(); - NodeList nodeList = message.getChildNodes(); - for (int m = 0; m < nodeList.getLength(); m++) { - Node node = nodeList.item(m); - if (node.getNodeType() == Node.ELEMENT_NODE) - parts.add(node.getLocalName()); + public MessageImpl(MessageDAO message) { + if (message == null) throw new NullPointerException("null message!"); + _dao = message; } - return parts; - } + public Element getPart(String partName) { + Element message = getMessage(); + NodeList eltList = message.getElementsByTagName(partName); + if (eltList.getLength() == 0) return null; + else return (Element) eltList.item(0); + } + + public void setPart(String partName, Element content) { + Element message = getMessage(); + if (message == null) { + Document doc = DOMUtils.newDocument(); + message = doc.createElement("message"); + doc.appendChild(message); + } + message.appendChild(message.getOwnerDocument().importNode(content, true)); + setMessage(message); + } + + public Element getHeaderPart(String partName) { + Element header = _dao.getHeader(); + if (header == null) return null; + + NodeList eltList = header.getElementsByTagName(partName); + if (eltList.getLength() == 0) return null; + else return (Element) eltList.item(0); + } + + public void setHeaderPart(String name, Element content) { + Element header = _dao.getHeader(); + if (header == null) { + Document doc = DOMUtils.newDocument(); + header = doc.createElement("header"); + doc.appendChild(header); + } + Element part = header.getOwnerDocument().createElement(name); + header.appendChild(part); + part.appendChild(header.getOwnerDocument().importNode(content, true)); + _dao.setHeader(header); + } + + public void setMessage(Element msg) { + _dao.setData(msg); + } + + public Element getMessage() { + return _dao.getData(); + } + + public QName getType() { + return _dao.getType(); + } + + public List<String> getParts() { + ArrayList<String> parts = new ArrayList<String>(); + Element message = getMessage(); + NodeList nodeList = message.getChildNodes(); + for (int m = 0; m < nodeList.getLength(); m++) { + Node node = nodeList.item(m); + if (node.getNodeType() == Node.ELEMENT_NODE) + parts.add(node.getLocalName()); + } + return parts; + } + + public Map<String, Element> getHeaderParts() { + HashMap<String,Element> l = new HashMap<String,Element>(); + Element header = _dao.getHeader(); + if (header != null) { + NodeList children = header.getChildNodes(); + for (int m = 0; m < children.getLength(); m++) + if (children.item(m).getNodeType() == Node.ELEMENT_NODE) { + Element part = (Element) children.item(m); + l.put(part.getLocalName(), DOMUtils.getFirstChildElement(part)); + } + } + return l; + } + } Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java Thu Mar 27 16:40:14 2008 @@ -1134,7 +1134,7 @@ // Name filter can be implemented using only the PIDs. if (filter != null && filter.getNameFilter() != null) { - final Pattern pattern = Pattern.compile(filter.getNameFilter().replace("*",".*")); + final Pattern pattern = Pattern.compile(filter.getNameFilter().replace("*",".*") + "(-\\d*)?"); CollectionsX.remove_if(pids, new MemberOfFunction<QName>() { @Override public boolean isMember(QName o) { Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java Thu Mar 27 16:40:14 2008 @@ -29,6 +29,7 @@ public class MessageDAOImpl extends DaoBaseImpl implements MessageDAO { private QName type; private Element data; + private Element header; private MessageExchangeDAO messageExchange; public MessageDAOImpl(MessageExchangeDAO messageExchange) { @@ -48,10 +49,17 @@ } public Element getData() { - if ( data == null ) { - data = DOMUtils.newDocument().getDocumentElement(); - } + if (data == null) data = DOMUtils.newDocument().getDocumentElement(); return data; + } + + public void setHeader(Element value) { + this.header = value; + } + + public Element getHeader() { + if ( header == null ) header = DOMUtils.newDocument().getDocumentElement(); + return header; } public MessageExchangeDAO getMessageExchange() { Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java Thu Mar 27 16:40:14 2008 @@ -120,8 +120,7 @@ doc.appendChild(tempwrapper); tempwrapper.appendChild(val); val = tempwrapper; - } else - doc.appendChild(val); + } else doc.appendChild(val); lval = initializeVariable(lvar, val); } else lval = fetchVariableData(lvar, true); @@ -170,60 +169,42 @@ OAssign.VariableRef varRef = (OAssign.VariableRef) from; sendVariableReadEvent(_scopeFrame.resolve(varRef.variable)); Node data = fetchVariableData(_scopeFrame.resolve(varRef.variable), false); - retVal = evalQuery(data, varRef.part, varRef.location, - getEvaluationContext()); + retVal = evalQuery(data, varRef.part != null ? varRef.part : varRef.headerPart, varRef.location, getEvaluationContext()); } else if (from instanceof OAssign.PropertyRef) { OAssign.PropertyRef propRef = (OAssign.PropertyRef) from; sendVariableReadEvent(_scopeFrame.resolve(propRef.variable)); Node data = fetchVariableData(_scopeFrame.resolve(propRef.variable), false); - retVal = evalQuery(data, propRef.propertyAlias.part, propRef.propertyAlias.location, getEvaluationContext()); - } else if (from instanceof OAssign.PartnerLinkRef) { OAssign.PartnerLinkRef pLinkRef = (OAssign.PartnerLinkRef) from; - PartnerLinkInstance pLink = _scopeFrame - .resolve(pLinkRef.partnerLink); + PartnerLinkInstance pLink = _scopeFrame.resolve(pLinkRef.partnerLink); Node tempVal =pLinkRef.isMyEndpointReference ? getBpelRuntimeContext().fetchMyRoleEndpointReferenceData(pLink) : getBpelRuntimeContext().fetchPartnerRoleEndpointReferenceData(pLink); if (__log.isDebugEnabled()) __log.debug("RValue is a partner link, corresponding endpoint " - + tempVal.getClass().getName() + " has value " - + DOMUtils.domToString(tempVal)); + + tempVal.getClass().getName() + " has value " + DOMUtils.domToString(tempVal)); retVal = tempVal; } else if (from instanceof OAssign.Expression) { List<Node> l; OExpression expr = ((OAssign.Expression) from).expression; try { - l = getBpelRuntimeContext().getExpLangRuntime().evaluate(expr, - getEvaluationContext()); + l = getBpelRuntimeContext().getExpLangRuntime().evaluate(expr, getEvaluationContext()); } catch (EvaluationException e) { - String msg = __msgs.msgEvalException(from.toString(), e - .getMessage()); - if (__log.isDebugEnabled()) - __log.debug(from + ": " + msg); + String msg = __msgs.msgEvalException(from.toString(), e.getMessage()); + if (__log.isDebugEnabled()) __log.debug(from + ": " + msg); if (e.getCause() instanceof FaultException) throw (FaultException)e.getCause(); - throw new FaultException( - getOAsssign().getOwner().constants.qnSelectionFailure, - msg); + throw new FaultException(getOAsssign().getOwner().constants.qnSelectionFailure, msg); } if (l.size() == 0) { String msg = __msgs.msgRValueNoNodesSelected(expr.toString()); - if (__log.isDebugEnabled()) - __log.debug(from + ": " + msg); - throw new FaultException( - getOAsssign().getOwner().constants.qnSelectionFailure, - msg); - + if (__log.isDebugEnabled()) __log.debug(from + ": " + msg); + throw new FaultException(getOAsssign().getOwner().constants.qnSelectionFailure, msg); } else if (l.size() > 1) { - String msg = __msgs.msgRValueMultipleNodesSelected(expr - .toString()); - if (__log.isDebugEnabled()) - __log.debug(from + ": " + msg); - throw new FaultException( - getOAsssign().getOwner().constants.qnSelectionFailure, - msg); + String msg = __msgs.msgRValueMultipleNodesSelected(expr.toString()); + if (__log.isDebugEnabled()) __log.debug(from + ": " + msg); + throw new FaultException(getOAsssign().getOwner().constants.qnSelectionFailure, msg); } retVal = (Node) l.get(0); } else if (from instanceof OAssign.Literal) { @@ -370,7 +351,7 @@ // Get a pointer within the lvalue. Node lvaluePtr = lvalue; - + boolean headerAssign = false; if (ocopy.to instanceof OAssign.DirectRef) { DirectRef dref = ((DirectRef) ocopy.to); Element el = DOMUtils.findChildByName((Element)lvalue, dref.elName); @@ -381,10 +362,8 @@ lvaluePtr = el; } else if (ocopy.to instanceof OAssign.VariableRef) { VariableRef varRef = ((VariableRef) ocopy.to); - lvaluePtr = evalQuery( - lvalue, - varRef.part, - varRef.location, + if (varRef.headerPart != null) headerAssign = true; + lvaluePtr = evalQuery(lvalue, varRef.part != null ? varRef.part : varRef.headerPart, varRef.location, new EvaluationContextProxy(varRef.getVariable(), lvalue)); } else if (ocopy.to instanceof OAssign.PropertyRef) { PropertyRef propRef = ((PropertyRef) ocopy.to); @@ -415,8 +394,9 @@ rvalue = ((Document)rvalue).getDocumentElement(); } - if (rvalue.getNodeType() == Node.ELEMENT_NODE - && lvaluePtr.getNodeType() == Node.ELEMENT_NODE) { + if (headerAssign && lvaluePtr.getParentNode().getNodeName().equals("message")) { + lvalue = copyInto((Element)lvalue, (Element) lvaluePtr, (Element) rvalue); + } else if (rvalue.getNodeType() == Node.ELEMENT_NODE && lvaluePtr.getNodeType() == Node.ELEMENT_NODE) { lvalue = replaceElement((Element)lvalue, (Element) lvaluePtr, (Element) rvalue, ocopy.keepSrcElementName); } else { @@ -480,6 +460,11 @@ return (lval == ptr) ? replacement : lval; } + private Element copyInto(Element lval, Element ptr, Element src) { + ptr.appendChild(ptr.getOwnerDocument().importNode(src, true)); + return lval; + } + /** * isInsert flag desginates this as an 'element' type insertion, which * requires insert the actual element value, rather than it's children @@ -555,27 +540,37 @@ return lvalue; } - private Node evalQuery(Node lvalue, OMessageVarType.Part part, + private Node evalQuery(Node data, OMessageVarType.Part part, OExpression expression, EvaluationContext ec) throws FaultException { - assert lvalue != null; + assert data != null; if (part != null) { QName partName = new QName(null, part.name); - Node qualLVal = DOMUtils - .findChildByName((Element) lvalue, partName); + Node qualLVal = DOMUtils.findChildByName((Element) data, partName); if (part.type instanceof OElementVarType) { QName elName = ((OElementVarType) part.type).elementType; qualLVal = DOMUtils.findChildByName((Element) qualLVal, elName); + } else if (part.type == null) { + // Special case of header parts never referenced in the WSDL def + if (qualLVal != null && qualLVal.getNodeType() == Node.ELEMENT_NODE + && ((Element)qualLVal).getAttribute("headerPart") != null) + qualLVal = DOMUtils.getFirstChildElement((Element) qualLVal); + // The needed part isn't there, dynamically creating it + if (qualLVal == null) { + qualLVal = data.getOwnerDocument().createElementNS(null, part.name); + ((Element)qualLVal).setAttribute("headerPart", "true"); + data.appendChild(qualLVal); + } } - lvalue = qualLVal; + data = qualLVal; } if (expression != null) { // Neat little trick.... - lvalue = ec.evaluateQuery(lvalue, expression); + data = ec.evaluateQuery(data, expression); } - return lvalue; + return data; } private class EvaluationContextProxy implements EvaluationContext { Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java Thu Mar 27 16:40:14 2008 @@ -141,7 +141,7 @@ /** * Calculate a duration offset from right now. - * + * * @param duration * the offset * @return the resulting date. @@ -155,13 +155,11 @@ @SuppressWarnings("unchecked") private void initVariable(String mexId, OPickReceive.OnMessage onMessage) { // This is allowed, if there is no parts in the message for example. - if (onMessage.variable == null) - return; + if (onMessage.variable == null) return; Element msgEl = getBpelRuntimeContext().getMyRequest(mexId); - Collection<String> partNames = (Collection<String>) onMessage.operation.getInput().getMessage().getParts() - .keySet(); - + Collection<String> partNames = (Collection<String>) onMessage.operation.getInput().getMessage().getParts().keySet(); + // Let's do some sanity checks here so that we don't get weird errors in assignment later. // The engine should have checked to make sure that the messages that are delivered conform // to the correct format; but you know what they say, don't trust anyone. @@ -170,7 +168,7 @@ __log.fatal(errmsg); throw new InvalidProcessException(errmsg); } - + OMessageVarType vartype = (OMessageVarType) onMessage.variable.type; // Check that each part contains what we expect. @@ -187,38 +185,38 @@ String errmsg = "Message missing part: " + pName; __log.fatal(errmsg); throw new InvalidContextException(errmsg); - } - + } + if (part.type instanceof OElementVarType) { - OElementVarType ptype = (OElementVarType) part.type; + OElementVarType ptype = (OElementVarType) part.type; Element e = DOMUtils.getFirstChildElement(msgPart); if (e == null) { String errmsg = "Message (element) part " + pName + " did not contain child element."; __log.fatal(errmsg); throw new InvalidContextException(errmsg); } - + QName qn = new QName(e.getNamespaceURI(), e.getLocalName()); if(!qn.equals(ptype.elementType)) { - String errmsg = "Message (element) part " + pName + " did not contain correct child element: expected " - + ptype.elementType + " but got " + qn; + String errmsg = "Message (element) part " + pName + " did not contain correct child element: expected " + + ptype.elementType + " but got " + qn; __log.fatal(errmsg); throw new InvalidContextException(errmsg); } } - + } VariableInstance vinst = _scopeFrame.resolve(onMessage.variable); - + try { - initializeVariable(vinst, msgEl); + initializeVariable(vinst, msgEl); } catch (ExternalVariableModuleException e) { - __log.error("Exception while initializing external variable", e); + __log.error("Exception while initializing external variable", e); _self.parent.failure(e.toString(), null); return; } - + // Generating event VariableModificationEvent se = new VariableModificationEvent(vinst.declaration.name); se.setNewValue(msgEl); Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java Thu Mar 27 16:40:14 2008 @@ -204,4 +204,7 @@ public void recoveredFromError(SourceLocation location, CompilationException error) { } + public Part resolveHeaderPart(Variable variable, String partname) throws CompilationException { + return null; + } } Modified: ode/branches/APACHE_ODE_1.1/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java (original) +++ ode/branches/APACHE_ODE_1.1/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java Thu Mar 27 16:40:14 2008 @@ -101,7 +101,7 @@ if ( elm1 != null && elm2 != null ) { String cat = elm2.getTextContent()+" -> "+elm1.getTextContent(); elm2.setTextContent(cat); - msg.setMessagePart("probeData", elm2); + msg.setPart("probeData", elm2); final Message response = prmx.createMessage(prmx.getOperation().getOutput().getMessage().getQName()); response.setMessage(msg.getMessage()); Modified: ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java (original) +++ ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java Thu Mar 27 16:40:14 2008 @@ -68,7 +68,25 @@ } catch (Exception e) { throw new RuntimeException(e); } + } + public void setHeader(Element value) { + if (value == null) return; + if (_hself.getHeader() != null) + _session.delete(_hself.getHeader()); + HLargeData newdata = new HLargeData(DOMUtils.domToString(value)); + _session.save(newdata); + _hself.setHeader(newdata); + update(); + } + + public Element getHeader() { + if (_hself.getHeader() == null) return null; + try { + return DOMUtils.stringToDOM(_hself.getHeader().getText()); + } catch (Exception e) { + throw new RuntimeException(e); + } } public MessageExchangeDAO getMessageExchange() { Modified: ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java (original) +++ ode/branches/APACHE_ODE_1.1/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java Thu Mar 27 16:40:14 2008 @@ -30,7 +30,7 @@ private HMessageExchange _mex; private String _type; private HLargeData _data; - + private HLargeData _header; public void setMessageExchange(HMessageExchange mex) { _mex = mex; @@ -57,6 +57,15 @@ public void setMessageData(HLargeData data) { _data = data; + } + + /** @hibernate.many-to-one column="HEADER" */ + public HLargeData getHeader() { + return _header; + } + + public void setHeader(HLargeData header) { + _header = header; } } Modified: ode/branches/APACHE_ODE_1.1/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java (original) +++ ode/branches/APACHE_ODE_1.1/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java Thu Mar 27 16:40:14 2008 @@ -51,8 +51,12 @@ private String _type; @Lob @Column(name="DATA") private String _data; + @Lob @Column(name="HEADER") + private String _header; @Transient private Element _element; + @Transient + private Element _headerElement; @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.ALL}) @Column(name="MESSAGE_EXCHANGE_ID") private MessageExchangeDAOImpl _messageExchange; @@ -72,23 +76,39 @@ throw new RuntimeException(e); } } - return _element; } - public MessageExchangeDAO getMessageExchange() { - return _messageExchange; + public void setData(Element value) { + if (value == null) return; + _data = DOMUtils.domToString(value); + _element = value; } - public QName getType() { - return _type == null ? null : QName.valueOf(_type); + public Element getHeader() { + if ( _headerElement == null && _header != null ) { + try { + _headerElement = DOMUtils.stringToDOM(_header); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + return _headerElement; } - public void setData(Element value) { + public void setHeader(Element value) { if (value == null) return; - _data = DOMUtils.domToString(value); - _element = value; + _header = DOMUtils.domToString(value); + _headerElement = value; } + + public MessageExchangeDAO getMessageExchange() { + return _messageExchange; + } + + public QName getType() { + return _type == null ? null : QName.valueOf(_type); + } public void setType(QName type) { _type = type.toString(); Modified: ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel (original) +++ ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel Thu Mar 27 16:40:14 2008 @@ -18,9 +18,9 @@ ~ under the License. --> <process name="HelloWorld2" - targetNamespace="urn:/HelloWorld2.bpel" + targetNamespace="urn:/HeaderTest.bpel" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" - xmlns:tns="urn:/HelloWorld2.bpel" + xmlns:tns="urn:/HeaderTest.bpel" xmlns:hello="urn:/HelloWorld2.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> Modified: ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml?rev=642026&r1=642025&r2=642026&view=diff ============================================================================== --- ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml (original) +++ ode/branches/APACHE_ODE_1.1/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml Thu Mar 27 16:40:14 2008 @@ -17,7 +17,7 @@ ~ under the License. --> <deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" - xmlns:pns="urn:/HelloWorld2.bpel" + xmlns:pns="urn:/HeaderTest.bpel" xmlns:sns="urn:/HelloWorld2.wsdl" >
