You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2008/05/20 00:55:14 UTC
svn commit: r658020 [2/2] - in /ode/trunk:
axis2-war/src/test/java/org/apache/ode/axis2/
axis2-war/src/test/java/org/apache/ode/axis2/management/
axis2-war/src/test/resources/ axis2-war/src/test/resources/TestSoapHeader/
axis2-war/src/test/resources/Te...
Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java Mon May 19 15:55:12 2008
@@ -23,6 +23,7 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import org.w3c.dom.Document;
import javax.wsdl.Binding;
import javax.wsdl.BindingInput;
@@ -42,6 +43,7 @@
import javax.wsdl.extensions.soap.SOAPHeader;
import javax.wsdl.extensions.soap.SOAPOperation;
import javax.xml.namespace.QName;
+import java.util.*;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
@@ -68,8 +70,6 @@
/**
* SOAP/ODE Message converter. Uses WSDL binding information to convert the protocol-neutral ODE representation into a SOAP
* representation and vice versa.
- *
- * @author Maciej Szefler ( m s z e f l e r (at) g m a i l . c o m )
*/
public class SoapMessageConverter {
@@ -77,12 +77,6 @@
private static final Log __log = LogFactory.getLog(SoapMessageConverter.class);
- /** Namespace (in the ODE <message>) for received parts that are in the header but not in the payload. */
- private static final QName FOREIGN_HEADER_IN = new QName("urn:ode.apache.org/axis2-il/headers/","in");
-
- /** Namespace (in the ODE <message>) for headers that should be sent but are not in the payload. */
- private static final QName FOREIGN_HEADER_OUT = new QName("urn:ode.apache.org/axis2-il/headers/","out");
-
SOAPFactory _soapFactory;
Definition _def;
@@ -101,8 +95,7 @@
private SOAPBinding _soapBinding;
- public SoapMessageConverter(Definition def, QName serviceName, String portName,
- boolean replicateEmptyNS) throws AxisFault {
+ public SoapMessageConverter(Definition def, QName serviceName, String portName) throws AxisFault {
if (def == null)
throw new NullPointerException("Null wsdl def.");
if (serviceName == null)
@@ -132,7 +125,7 @@
throw new OdeFault(__msgs.msgMultipleSoapBindingsForPort(_portName));
}
- _soapBinding = (SOAPBinding) soapBindings.iterator().next();
+ _soapBinding = soapBindings.iterator().next();
String style = _soapBinding.getStyle();
_isRPC = style != null && style.equals("rpc");
@@ -146,7 +139,7 @@
}
@SuppressWarnings("unchecked")
- public void createSoapRequest(MessageContext msgCtx, Element message, Operation op) throws AxisFault {
+ public void createSoapRequest(MessageContext msgCtx, org.apache.ode.bpel.iapi.Message message, Operation op) throws AxisFault {
if (op == null)
throw new NullPointerException("Null operation");
// The message can be null if the input message has no part
@@ -170,21 +163,17 @@
msgCtx.setEnvelope(soapEnv);
}
- List<SOAPHeader> soapHeaders = getSOAPHeaders(bi);
- for (SOAPHeader sh : soapHeaders)
- createSoapHeader(soapEnv, sh, op.getInput().getMessage(), message);
+ createSoapHeaders(soapEnv, getSOAPHeaders(bi), op.getInput().getMessage(), message.getHeaderParts());
SOAPBody soapBody = getSOAPBody(bi);
if (soapBody != null) {
- org.apache.axiom.soap.SOAPBody sb = soapEnv.getBody() == null ?
- _soapFactory.createSOAPBody(soapEnv)
- : soapEnv.getBody();
- createSoapBody(sb, soapBody, op.getInput().getMessage(), message, op.getName());
+ org.apache.axiom.soap.SOAPBody sb = soapEnv.getBody() == null ? _soapFactory.createSOAPBody(soapEnv) : soapEnv.getBody();
+ createSoapBody(sb, soapBody, op.getInput().getMessage(), message.getMessage(), op.getName());
}
}
- public void createSoapResponse(MessageContext msgCtx, Element message, Operation op) throws AxisFault {
+ public void createSoapResponse(MessageContext msgCtx, org.apache.ode.bpel.iapi.Message message, Operation op) throws AxisFault {
if (op == null)
throw new NullPointerException("Null operation");
if (message == null)
@@ -206,49 +195,48 @@
soapEnv = _soapFactory.getDefaultEnvelope();
msgCtx.setEnvelope(soapEnv);
}
- List<SOAPHeader> soapHeaders = getSOAPHeaders(bo);
- for (SOAPHeader sh : soapHeaders)
- createSoapHeader(soapEnv, sh, op.getOutput().getMessage(), message);
+
+ if (message.getHeaderParts().size() > 0 || getSOAPHeaders(bo).size() > 0)
+ createSoapHeaders(soapEnv, getSOAPHeaders(bo), op.getInput().getMessage(), message.getHeaderParts());
SOAPBody soapBody = getSOAPBody(bo);
if (soapBody != null) {
org.apache.axiom.soap.SOAPBody sb = soapEnv.getBody() == null ? _soapFactory.createSOAPBody(soapEnv) : soapEnv.getBody();
- createSoapBody(sb, soapBody, op.getOutput().getMessage(), message, op.getName() + "Response");
+ createSoapBody(sb, soapBody, op.getOutput().getMessage(), message.getMessage(), op.getName() + "Response");
}
+ }
+
+ public void createSoapHeaders(SOAPEnvelope soapEnv, List<SOAPHeader> headerDefs, Message msgdef, Map<String,Element> headers) throws AxisFault {
+ for (SOAPHeader sh : headerDefs) handleSoapHeaderDef(soapEnv, sh, msgdef, headers);
+ org.apache.axiom.soap.SOAPHeader soaphdr = soapEnv.getHeader();
+ if (soaphdr == null) soaphdr = _soapFactory.createSOAPHeader(soapEnv);
+ for (Element headerElmt : headers.values())
+ if (soaphdr.getFirstChildWithName(new QName(headerElmt.getNamespaceURI(), headerElmt.getLocalName())) == null)
+ soaphdr.addChild(OMUtils.toOM(headerElmt, _soapFactory));
}
@SuppressWarnings("unchecked")
- public void createSoapHeader(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, Element message) throws AxisFault {
+ private void handleSoapHeaderDef(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, Map<String,Element> headers) throws AxisFault {
boolean payloadMessageHeader = headerdef.getMessage() == null || headerdef.getMessage().equals(msgdef.getQName());
- if (headerdef.getPart() == null)
- return;
+ if (headerdef.getPart() == null) return;
if (payloadMessageHeader && msgdef.getPart(headerdef.getPart()) == null)
throw new OdeFault(__msgs.msgSoapHeaderReferencesUnkownPart(headerdef.getPart()));
Element srcPartEl = null;
- // Message can be null if the operation message has no part
- if (message != null) {
+ if (headers.size() > 0)
if (payloadMessageHeader)
- srcPartEl = DOMUtils.findChildByName(message, new QName(null, headerdef.getPart()));
- else {
- Element fho = DOMUtils.findChildByName(message, FOREIGN_HEADER_OUT);
- if (fho != null) {
- srcPartEl = DOMUtils.findChildByName(fho, headerdef.getElementType());
- }
- }
- }
+ srcPartEl = headers.get(headerdef.getPart());
// We don't complain about missing header data unless they are part of the message payload. This is
// because AXIS may be providing these headers.
if (srcPartEl == null && payloadMessageHeader)
throw new OdeFault(__msgs.msgOdeMessageMissingRequiredPart(headerdef.getPart()));
- if (srcPartEl == null)
- return;
+ if (srcPartEl == null) return;
org.apache.axiom.soap.SOAPHeader soaphdr = soapEnv.getHeader();
if (soaphdr == null) {
@@ -258,7 +246,6 @@
OMElement omPart = OMUtils.toOM(srcPartEl, _soapFactory);
for (Iterator<OMNode> i = omPart.getChildren(); i.hasNext();)
soaphdr.addChild(i.next());
-
}
public SOAPFault createSoapFault(Element message, QName faultName, Operation op) throws AxisFault {
@@ -305,7 +292,7 @@
return OMUtils.toOM(detail, _soapFactory);
}
- public void parseSoapRequest(Element odeMessage, SOAPEnvelope envelope, Operation op) throws AxisFault {
+ public void parseSoapRequest(org.apache.ode.bpel.iapi.Message odeMessage, SOAPEnvelope envelope, Operation op) throws AxisFault {
BindingOperation bop = _binding.getBindingOperation(op.getName(), null, null);
if (bop == null)
@@ -319,13 +306,12 @@
if (soapBody != null)
extractSoapBodyParts(odeMessage, envelope.getBody(), soapBody, op.getInput().getMessage(), op.getName());
- List<SOAPHeader> soapHeaders = getSOAPHeaders(bi);
- for (SOAPHeader sh : soapHeaders)
- extractSoapHeaderPart(odeMessage, envelope.getHeader(), sh, op.getInput().getMessage());
-
+ if (envelope.getHeader() != null)
+ extractSoapHeaderParts(odeMessage, envelope.getHeader(), getSOAPHeaders(bi), op.getInput().getMessage());
}
- public void parseSoapResponse(Element odeMessage, SOAPEnvelope envelope, Operation op) throws AxisFault {
+ public void parseSoapResponse(org.apache.ode.bpel.iapi.Message odeMessage,
+ SOAPEnvelope envelope, Operation op) throws AxisFault {
BindingOperation bop = _binding.getBindingOperation(op.getName(), null, null);
if (bop == null)
@@ -337,27 +323,17 @@
SOAPBody soapBody = getSOAPBody(bo);
if (soapBody != null)
- extractSoapBodyParts(odeMessage, envelope.getBody(),
- soapBody, op.getOutput().getMessage(), op.getName() + "Response");
+ extractSoapBodyParts(odeMessage, envelope.getBody(), soapBody, op.getOutput().getMessage(), op.getName() + "Response");
- List<SOAPHeader> soapHeaders = getSOAPHeaders(bo);
- for (SOAPHeader sh : soapHeaders)
- extractSoapHeaderPart(odeMessage, envelope.getHeader(), sh, op.getInput().getMessage());
+ if (envelope.getHeader() != null)
+ extractSoapHeaderParts(odeMessage, envelope.getHeader(), getSOAPHeaders(bo), op.getOutput().getMessage());
}
@SuppressWarnings("unchecked")
- public void createSoapBody(org.apache.axiom.soap.SOAPBody sb,
- SOAPBody soapBody,
- Message msgDef,
- Element message,
- String rpcWrapper) throws AxisFault {
-
- OMElement partHolder;
- if (_isRPC) {
- partHolder = _soapFactory.createOMElement(new QName(soapBody.getNamespaceURI(),rpcWrapper), sb);
- } else
- partHolder = sb;
+ public void createSoapBody(org.apache.axiom.soap.SOAPBody sb, SOAPBody soapBody, Message msgDef,
+ Element message, String rpcWrapper) throws AxisFault {
+ OMElement partHolder = _isRPC ? _soapFactory.createOMElement(new QName(soapBody.getNamespaceURI(),rpcWrapper), sb) : sb;
List<Part> parts = msgDef.getOrderedParts(soapBody.getParts());
for (Part part : parts) {
@@ -366,12 +342,8 @@
throw new OdeFault(__msgs.msgOdeMessageMissingRequiredPart(part.getName()));
OMElement omPart = OMUtils.toOM(srcPartEl, _soapFactory);
- if (_isRPC) {
- partHolder.addChild(omPart);
- } else {
- for (Iterator<OMNode> i = omPart.getChildren(); i.hasNext();)
- partHolder.addChild(i.next());
- }
+ if (_isRPC) partHolder.addChild(omPart);
+ else for (Iterator<OMNode> i = omPart.getChildren(); i.hasNext();) partHolder.addChild(i.next());
}
}
@@ -379,8 +351,8 @@
// public Element createODEMessage(SOAPEnvelope soapEnv,Operation op) throws AxisFault {
// }
@SuppressWarnings("unchecked")
- public void extractSoapBodyParts(Element message, org.apache.axiom.soap.SOAPBody soapBody, SOAPBody bodyDef, Message msg,String rpcWrapper)
- throws AxisFault {
+ public void extractSoapBodyParts(org.apache.ode.bpel.iapi.Message message, org.apache.axiom.soap.SOAPBody soapBody,
+ SOAPBody bodyDef, Message msg,String rpcWrapper) throws AxisFault {
List<Part> bodyParts = msg.getOrderedParts(bodyDef.getParts());
@@ -396,7 +368,7 @@
OMElement srcPart = partWrapper.getFirstChildWithName(new QName(null, pdef.getName()));
if (srcPart == null)
throw new OdeFault(__msgs.msgSOAPBodyDoesNotContainRequiredPart(pdef.getName()));
- message.appendChild(message.getOwnerDocument().importNode(OMUtils.toDOM(srcPart), true));
+ message.setPart(srcPart.getLocalName(), OMUtils.toDOM(srcPart));
}
} else {
@@ -412,18 +384,36 @@
throw new OdeFault(__msgs.msgBindingDefinesNonElementDocListParts());
if (!srcPart.getQName().equals(partDef.getElementName()))
throw new OdeFault(__msgs.msgUnexpectedElementInSOAPBody(srcPart.getQName(), partDef.getElementName()));
- Element destPart = message.getOwnerDocument().createElementNS(null, partDef.getName());
- message.appendChild(destPart);
- destPart.appendChild(message.getOwnerDocument().importNode(OMUtils.toDOM(srcPart), true));
+ Document doc = DOMUtils.newDocument();
+ Element destPart = doc.createElementNS(null, partDef.getName());
+ destPart.appendChild(doc.importNode(OMUtils.toDOM(srcPart), true));
+ message.setPart(partDef.getName(), destPart);
}
}
}
- public void extractSoapHeaderPart(Element odeMessage, org.apache.axiom.soap.SOAPHeader header, SOAPHeader headerdef,
+ public void extractSoapHeaderParts(org.apache.ode.bpel.iapi.Message message,
+ org.apache.axiom.soap.SOAPHeader soapHeader,
+ List<SOAPHeader> headerDefs, Message msg) throws AxisFault {
+ // Checking that the definitions we have are at least there
+ for (SOAPHeader headerDef : headerDefs)
+ handleSoapHeaderPartDef(message, 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, header.getQName());
+ message.setHeaderPart(partName, OMUtils.toDOM(header));
+ }
+ }
+
+ private void handleSoapHeaderPartDef(org.apache.ode.bpel.iapi.Message odeMessage, org.apache.axiom.soap.SOAPHeader header, SOAPHeader headerdef,
Message msgType) throws AxisFault {
// Is this header part of the "payload" messsage?
boolean payloadMessageHeader = headerdef.getMessage() == null || headerdef.getMessage().equals(msgType.getQName());
- boolean requiredHeader = payloadMessageHeader || (headerdef.getRequired() != null && headerdef.getRequired() == true);
+ boolean requiredHeader = payloadMessageHeader || (headerdef.getRequired() != null && headerdef.getRequired());
if (requiredHeader && header == null)
throw new OdeFault(__msgs.msgSoapHeaderMissingRequiredElement(headerdef.getElementType()));
@@ -442,32 +432,25 @@
if (requiredHeader && headerEl == null)
throw new OdeFault(__msgs.msgSoapHeaderMissingRequiredElement(headerdef.getElementType()));
- if (headerEl == null)
- return;
-
- Element destPart = odeMessage.getOwnerDocument().createElementNS(null, p.getName());
- odeMessage.appendChild(destPart);
- destPart.appendChild(odeMessage.getOwnerDocument().importNode(OMUtils.toDOM(headerEl), true));
+ if (headerEl == null) return;
- Element destPart1 = getForeignIn(odeMessage);
- destPart1.appendChild(odeMessage.getOwnerDocument().importNode(OMUtils.toDOM(headerEl), true));
+ Element msgElmt = odeMessage.getMessage();
+ Element destPart = msgElmt.getOwnerDocument().createElementNS(null, p.getName());
+ msgElmt.appendChild(destPart);
+ destPart.appendChild(msgElmt.getOwnerDocument().importNode(OMUtils.toDOM(headerEl), true));
}
- /**
- * Get the "FOREIGN_IN" message extension if it exists, otherwise create it.
- * @param odeMessage
- * @return the FOREING_IN extension element.
- */
- private Element getForeignIn(Element odeMessage) {
- Element fi = DOMUtils.findChildByName(odeMessage, FOREIGN_HEADER_IN);
- if (fi == null) {
- fi = odeMessage.getOwnerDocument().createElementNS(FOREIGN_HEADER_IN.getNamespaceURI(),FOREIGN_HEADER_IN.getLocalPart());
- odeMessage.appendChild(fi);
+ private String findHeaderPartName(List<SOAPHeader> headerDefs, QName elmtName) {
+ for (SOAPHeader headerDef : headerDefs) {
+ Message hdrMsg = _def.getMessage(headerDef.getMessage());
+ for (Object o : hdrMsg.getParts().values()) {
+ Part p = (Part) o;
+ if (p.getElementName().equals(elmtName)) return p.getName();
+ }
}
- return fi;
+ return elmtName.getLocalPart();
}
-
public static SOAPBody getSOAPBody(ElementExtensible ee) {
return getFirstExtensibilityElement(ee, SOAPBody.class);
}
Modified: ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java (original)
+++ ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java Mon May 19 15:55:12 2008
@@ -37,29 +37,22 @@
import org.apache.axis2.context.MessageContext;
import org.apache.ode.axis2.util.SoapMessageConverter;
import org.apache.ode.utils.DOMUtils;
+import org.apache.ode.bpel.engine.MessageImpl;
+import org.apache.ode.bpel.memdao.MessageDAOImpl;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class SoapMessageConverterTest extends TestCase {
Definition wsdl1, wsdlHW;
-
String wsdl1tns = "http://documentum.com/ws/2005/services";
-
QName repoService = new QName(wsdl1tns, "RepoAccessorService");
-
QName portTypeName = new QName(wsdl1tns, "RepoAccessor");
-
String portName = "RepoAccessor";
-
SoapMessageConverter portmapper;
-
PortType portType, portTypeHW;
-
Document req1bad;
-
Document req1;
-
private Operation op1, opHello;
public SoapMessageConverterTest() throws Exception {
@@ -76,7 +69,7 @@
}
public void setUp() throws Exception {
- portmapper = new SoapMessageConverter(wsdl1, repoService, portName, true);
+ portmapper = new SoapMessageConverter(wsdl1, repoService, portName);
}
public void tearDown() {
@@ -85,7 +78,7 @@
public void testBadPortName() {
try {
- new SoapMessageConverter(wsdl1, repoService, "badPort", true);
+ new SoapMessageConverter(wsdl1, repoService, "badPort");
fail("Should have thrown axis error.");
} catch (AxisFault af) {
;// expected
@@ -94,7 +87,7 @@
public void testBadServiceName() {
try {
- new SoapMessageConverter(wsdl1, new QName(wsdl1tns, "foobar"), portName, true);
+ new SoapMessageConverter(wsdl1, new QName(wsdl1tns, "foobar"), portName);
fail("Should have thrown axis error.");
} catch (AxisFault af) {
;// expected
@@ -103,7 +96,9 @@
public void testCreateSOAPRequest() throws Exception {
MessageContext msgCtx = new MessageContext();
- portmapper.createSoapRequest(msgCtx, req1.getDocumentElement(), portType.getOperation("getObjectId", null, null));
+ MessageImpl odeMsg = new MessageImpl(new MessageDAOImpl(null));
+ odeMsg.setMessage(req1.getDocumentElement());
+ portmapper.createSoapRequest(msgCtx, odeMsg, portType.getOperation("getObjectId", null, null));
SOAPEnvelope env = msgCtx.getEnvelope();
System.out.println("testCreateSOAPRequest: " + env);
QName elPartName = new QName(wsdl1tns, "getObjectId");
@@ -116,9 +111,10 @@
public void testCreateSOAPRequestFail() throws Exception {
MessageContext msgCtx = new MessageContext();
+ MessageImpl odeMsg = new MessageImpl(new MessageDAOImpl(null));
+ odeMsg.setMessage(req1bad.getDocumentElement());
try {
- portmapper.createSoapRequest(msgCtx, req1bad.getDocumentElement(), portType.getOperation("getObjectId", null,
- null));
+ portmapper.createSoapRequest(msgCtx, odeMsg, portType.getOperation("getObjectId", null, null));
fail("Should have caused an ex");
} catch (AxisFault af) {
; // expected
@@ -132,23 +128,34 @@
public void testParseRequest() throws Exception {
MessageContext msgCtx = new MessageContext();
- portmapper.createSoapRequest(msgCtx, req1.getDocumentElement(), op1);
+ MessageImpl odeMsg1 = new MessageImpl(new MessageDAOImpl(null));
+ odeMsg1.setMessage(req1.getDocumentElement());
+ odeMsg1.setHeaderPart("DocumentumRequestHeader", DOMUtils.findChildByName(req1.getDocumentElement(),
+ new QName("http://documentum.com/ws/2005/services", "DocumentumSecurityToken")));
+ portmapper.createSoapRequest(msgCtx, odeMsg1, op1);
+
SOAPEnvelope env = msgCtx.getEnvelope();
System.out.println("testParseRequest: " + env);
- Element odeMsg = DOMUtils.stringToDOM("<message/>");
- portmapper.parseSoapRequest(odeMsg, env, op1);
- System.out.println("testParseRequest: " + DOMUtils.domToString(odeMsg));
- Element params = DOMUtils.findChildByName(odeMsg, new QName(null, "parameters"));
+ Element odeMsgElmt = DOMUtils.stringToDOM("<message/>");
+ MessageImpl odeMsg2 = new MessageImpl(new MessageDAOImpl(null));
+ odeMsg1.setMessage(odeMsgElmt);
+ portmapper.parseSoapRequest(odeMsg2, env, op1);
+
+ Element params = DOMUtils.findChildByName(odeMsg2.getMessage(), new QName(null, "parameters"));
assertNotNull(params);
- Element hdr = DOMUtils.findChildByName(odeMsg, new QName("urn:ode.apache.org/axis2-il/header",
- "DocumentumRequestHeader"));
- assertNotNull(hdr);
+ assertNotNull(odeMsg2.getHeaderPart("DocumentumRequestHeader"));
+ Element hdrElmt = DOMUtils.findChildByName(odeMsg2.getHeaderPart("DocumentumRequestHeader"), new QName("http://documentum.com/ws/2005/services",
+ "DocumentumSecurityToken"));
+ assertNotNull(hdrElmt);
+ Element hdrBdyElmt = DOMUtils.findChildByName(odeMsg2.getPart("DocumentumRequestHeader"), new QName("http://documentum.com/ws/2005/services",
+ "DocumentumSecurityToken"));
+ assertNotNull(hdrBdyElmt);
}
/** Make sure hello world request parses correctly. */
public void testHelloWorldRequest() throws Exception {
SoapMessageConverter portmaper1 = new SoapMessageConverter(wsdlHW, new QName(wsdlHW
- .getTargetNamespace(), "HelloService"), "HelloPort", false);
+ .getTargetNamespace(), "HelloService"), "HelloPort");
XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(
getClass().getResourceAsStream("/HelloWorldRequest.soap"));
@@ -156,7 +163,9 @@
SOAPEnvelope se = builder.getSOAPEnvelope();
Element msg = DOMUtils.stringToDOM("<message/>");
- portmaper1.parseSoapRequest(msg, se, opHello);
+ MessageImpl odeMsg = new MessageImpl(new MessageDAOImpl(null));
+ odeMsg.setMessage(msg);
+ portmaper1.parseSoapRequest(odeMsg, se, opHello);
System.out.println(DOMUtils.domToString(msg));
}
Modified: ode/trunk/axis2/src/test/resources/testRequest1.xml
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/test/resources/testRequest1.xml?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/axis2/src/test/resources/testRequest1.xml (original)
+++ ode/trunk/axis2/src/test/resources/testRequest1.xml Mon May 19 15:55:12 2008
@@ -24,8 +24,6 @@
</getObjectId>
</parameters>
- <DocumentumRequestHeader xmlns="urn:ode.apache.org/axis2-il/header">
- <DocumentumSecurityToken xmlns="http://documentum.com/ws/2005/services"/>
- </DocumentumRequestHeader>
-
+ <DocumentumSecurityToken xmlns="http://documentum.com/ws/2005/services">SEKREET</DocumentumSecurityToken>
+
</message>
\ No newline at end of file
Modified: ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java (original)
+++ ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java Mon May 19 15:55:12 2008
@@ -19,6 +19,7 @@
package org.apache.ode.bpel.iapi;
import java.util.List;
+import java.util.Map;
import javax.xml.namespace.QName;
@@ -28,47 +29,63 @@
/**
* A representation of a WSDL-typed message. The implementation of this
* interface is provided by the integration layer.
- *
- * TODO: flush this out WRT Sybase requirements.
- * TODO: should we provide meta-data through this interface or will that
- * put an undue burden on the integration layer?
*/
public interface Message {
- /**
- * Get the message type.
- * @return message type.
- */
- QName getType();
-
- List<String> getParts();
-
- /**
- * Get a message part.
- * @param partName name of the part
- * @return named {@l
- */
- Element getPart(String partName);
-
- /**
- * Set the message part.
- * @param partName name of part
- * @param content part content
- */
- void setMessagePart(String partName, Element content);
-
- /**
- * Set the message as an element. The name of the element is irrelevant,
- * but it should have one child element for each message part.
- * TODO: remove this, temporary hack.
- */
- void setMessage(Element msg);
-
- /**
- * Get the message as an element. The returned element will have one
- * child element corresponding (and named after) each part in the message.
- * TODO: remove this, temporary hack.
- */
- Element getMessage();
-
+ /**
+ * Get the message type.
+ * @return message type.
+ */
+ QName getType();
+
+ List<String> getParts();
+
+ /**
+ * Get a message part.
+ * @param partName name of the part
+ * @return named {@l
+ */
+ Element getPart(String partName);
+
+ /**
+ * Set the message part.
+ * @param partName name of part
+ * @param content part content
+ */
+ void setPart(String partName, Element content);
+
+ /**
+ * Get a header part.
+ * @param partName name of the header part
+ * @return named
+ */
+ Element getHeaderPart(String partName);
+
+ /**
+ * Set a header part element.
+ * @param name header part name
+ * @param content header part element
+ */
+ void setHeaderPart(String name, Element content);
+
+ /**
+ * Gets all header parts in the message.
+ * @return
+ */
+ Map<String, Element> getHeaderParts();
+
+ /**
+ * Set the message as an element. The name of the element is irrelevant,
+ * but it should have one child element for each message part.
+ * TODO: remove this, temporary hack.
+ */
+ void setMessage(Element msg);
+
+ /**
+ * Get the message as an element. The returned element will have one
+ * child element corresponding (and named after) each part in the message.
+ * TODO: remove this, temporary hack.
+ */
+ Element getMessage();
+
}
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java Mon May 19 15:55:12 2008
@@ -128,8 +128,7 @@
// If direct Message->Message copy
if (ocopy.to instanceof OAssign.VariableRef && ((OAssign.VariableRef) ocopy.to).isMessageRef()
&& ocopy.from instanceof OAssign.VariableRef && ((OAssign.VariableRef) ocopy.from).isMessageRef()) {
- // Check that the LValue/RValue message types
- // match up.
+ // Check that the LValue/RValue message types match up.
String lvar = ((OAssign.VariableRef) ocopy.to).variable.name;
String rvar = ((OAssign.VariableRef) ocopy.from).variable.name;
QName tlvalue = ((OMessageVarType) ((OAssign.VariableRef) ocopy.to).variable.type).messageType;
@@ -202,6 +201,13 @@
if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
vref.location = _context.compileExpr(vv.getLocation());
}
+ if (vv.getHeader() != null) {
+ vref.headerPart = _context.resolveHeaderPart(vref.variable, vv.getHeader());
+ if (vref.headerPart == null)
+ vref.headerPart = new OMessageVarType.Part(_context.getOProcess(), vv.getHeader(), null);
+ if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
+ vref.location = _context.compileExpr(vv.getLocation());
+ }
return vref;
} else if (from.isPartnerLinkVal()) {
PartnerLinkVal plv = from.getAsPartnerLinkVal();
@@ -262,6 +268,13 @@
if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
vref.location = _context.compileExpr(vv.getLocation());
}
+ if (to.getAsVariableVal().getHeader() != null) {
+ vref.headerPart = _context.resolveHeaderPart(vref.variable, vv.getHeader());
+ if (vref.headerPart == null)
+ vref.headerPart = new OMessageVarType.Part(_context.getOProcess(), to.getAsVariableVal().getHeader(), null);
+ if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
+ vref.location = _context.compileExpr(vv.getLocation());
+ }
return vref;
} else if (to.isPartnerLinkVal()) {
OAssign.PartnerLinkRef plref = new OAssign.PartnerLinkRef(_context.getOProcess());
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java Mon May 19 15:55:12 2008
@@ -438,6 +438,13 @@
return part;
}
+ public OMessageVarType.Part resolveHeaderPart(OScope.Variable var, String partname) {
+ if (!(var.type instanceof OMessageVarType))
+ throw new CompilationException(__cmsgs.errMessageVariableRequired(var.name));
+ OMessageVarType msgVarType = (OMessageVarType) var.type;
+ return msgVarType.parts.get(partname);
+ }
+
public PartnerLinkType resolvePartnerLinkType(QName partnerLinkType) {
PartnerLinkType plinkType = _wsdlRegistry.getPartnerLinkType(partnerLinkType);
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java Mon May 19 15:55:12 2008
@@ -92,6 +92,9 @@
OMessageVarType.Part resolvePart(OScope.Variable variable, String partname)
throws CompilationException;
+ OMessageVarType.Part resolveHeaderPart(OScope.Variable variable, String partname)
+ throws CompilationException;
+
OActivity compile(Activity child)
throws CompilationException;
Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java Mon May 19 15:55:12 2008
@@ -39,13 +39,20 @@
/**
* Get the (optional) message part.
- *
* @return name of the message part, or <code>null</code>
*/
public String getPart() {
return getAttribute("part", null);
}
+ /**
+ * Get the (optional) header part.
+ * @return name of the header part, or <code>null</code>
+ */
+ public String getHeader() {
+ return getAttribute("header", null);
+ }
+
public Expression getLocation() {
return getFirstChild(Query.class);
}
Modified: ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java (original)
+++ ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java Mon May 19 15:55:12 2008
@@ -276,4 +276,8 @@
public ExtensionValidator getExtensionValidator(QName extensionElementName) {
return null;
}
+
+ public Part resolveHeaderPart(Variable variable, String partname) throws CompilationException {
+ return null;
+ }
}
Modified: ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java (original)
+++ ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java Mon May 19 15:55:12 2008
@@ -43,4 +43,10 @@
/** Get the message data (content). */
Element getData();
+ /** Set the message header (content). */
+ void setHeader(Element value);
+
+ /** Get the message header (content). */
+ Element getHeader();
+
}
Modified: ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java (original)
+++ ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java Mon May 19 15:55:12 2008
@@ -212,6 +212,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) {
@@ -227,8 +228,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;
}
/**
@@ -236,10 +236,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/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Mon May 19 15:55:12 2008
@@ -101,6 +101,8 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
class BpelRuntimeContextImpl implements BpelRuntimeContext {
@@ -526,7 +528,7 @@
MessageDAO message = myrolemex.createMessage(
operation.getOutput().getMessage()
.getQName());
- message.setData(msg);
+ buildOutgoingMessage(message, msg);
myrolemex.setResponse(message);
@@ -686,8 +688,8 @@
MessageDAO message = mexDao.createMessage(operation.getInput().getMessage().getQName());
mexDao.setRequest(message);
mexDao.setTimeout(30000);
- message.setData(outgoingMessage);
message.setType(operation.getInput().getMessage().getQName());
+ buildOutgoingMessage(message, outgoingMessage);
// prepare event
ProcessMessageExchangeEvent evt = new ProcessMessageExchangeEvent();
@@ -697,14 +699,11 @@
evt.setMexId(mexDao.getMessageExchangeId());
sendEvent(evt);
-
if (__log.isDebugEnabled()) {
__log.debug("INVOKING PARTNER: partnerLink=" + partnerLink + ", op=" + operation.getName() + " channel="
+ channel + ")");
}
-
_bpelProcess.invokePartner(mexDao);
-
// In case a response/fault was available right away, which will happen for BLOCKING/TRANSACTED invocations,
// we need to inject a message on the response channel, so that the process continues.
@@ -720,7 +719,23 @@
}
return mexDao.getMessageExchangeId();
+ }
+ private void buildOutgoingMessage(MessageDAO message, Element outgoingElmt) {
+ if (outgoingElmt == null) return;
+
+ 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() {
@@ -990,7 +1005,7 @@
}
public Element getPartnerResponse(String mexId) {
- return _getPartnerResponse(mexId).getData();
+ return mergeHeaders(_getPartnerResponse(mexId));
}
public Element getMyRequest(String mexId) {
@@ -1017,8 +1032,29 @@
throw new BpelEngineException(msg);
}
- return request.getData();
+ return mergeHeaders(request);
+ }
+
+ private Element mergeHeaders(MessageDAO msg) {
+ // Merging header data, it's all stored in the same variable
+ Element data = msg.getData();
+ if (msg.getHeader() != null) {
+ if (data == null) {
+ Document doc = DOMUtils.newDocument();
+ data = doc.createElement("message");
+ doc.appendChild(data);
+ }
+ 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/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java Mon May 19 15:55:12 2008
@@ -25,7 +25,16 @@
@Override
public void setMessage(Element msg) {
-
+ _dao.setData(msg);
}
+ @Override
+ public Element getHeader() {
+ return _dao.getHeader();
+ }
+
+ @Override
+ public void setHeader(Element msg) {
+ _dao.setHeader(msg);
+ }
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java Mon May 19 15:55:12 2008
@@ -13,14 +13,14 @@
class MemBackedMessageImpl extends MessageImpl {
private Element _msg;
+ private Element _header;
private QName _type;
MemBackedMessageImpl(Element msg, QName type, boolean ro) {
_msg = msg;
_type = type;
- if (ro)
- makeReadOnly();
+ if (ro) makeReadOnly();
}
@Override
@@ -29,14 +29,25 @@
}
@Override
+ public void setMessage(Element msg) {
+ checkWrite();
+ _msg = msg;
+ }
+
+ @Override
public QName getType() {
return _type;
}
@Override
- public void setMessage(Element msg) {
+ public Element getHeader() {
+ return _header;
+ }
+
+ @Override
+ public void setHeader(Element header) {
checkWrite();
- _msg = msg;
+ _header = header;
}
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java Mon May 19 15:55:12 2008
@@ -21,15 +21,19 @@
import java.util.List;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
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;
/**
* Implementation of the {@link Message} interface.
@@ -43,22 +47,51 @@
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);
+ if (eltList.getLength() == 0) return null;
+ else return (Element) eltList.item(0);
}
- public void setMessagePart(String partName, Element content) {
+ 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 = 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 = 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));
+ setHeader(header);
+ }
+
public abstract void setMessage(Element msg);
public abstract Element getMessage();
+ public abstract void setHeader(Element msg);
+
+ public abstract Element getHeader();
+
public abstract QName getType();
public List<String> getParts() {
@@ -73,6 +106,19 @@
return parts;
}
+ public Map<String, Element> getHeaderParts() {
+ HashMap<String,Element> l = new HashMap<String,Element>();
+ Element header = 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;
+ }
protected void makeReadOnly() {
_readOnly = true;
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java Mon May 19 15:55:12 2008
@@ -1132,7 +1132,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/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java Mon May 19 15:55:12 2008
@@ -28,6 +28,7 @@
public class MessageDAOImpl extends DaoBaseImpl implements MessageDAO {
private QName type;
private Element data;
+ private Element header;
public MessageDAOImpl() {
}
@@ -45,11 +46,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;
+ }
+
}
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java Mon May 19 15:55:12 2008
@@ -181,53 +181,39 @@
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;
- l = getBpelRuntimeContext().getExpLangRuntime().evaluate(expr,
- getEvaluationContext());
+ l = getBpelRuntimeContext().getExpLangRuntime().evaluate(expr, getEvaluationContext());
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);
+ retVal = l.get(0);
} else if (from instanceof OAssign.Literal) {
Element literalRoot = ((OAssign.Literal) from).getXmlLiteral().getDocumentElement();
assert literalRoot.getLocalName().equals("literal");
@@ -372,7 +358,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);
@@ -383,10 +369,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);
@@ -417,8 +401,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 {
@@ -482,6 +467,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
@@ -557,27 +547,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 void invokeExtensionAssignOperation(OAssign.ExtensionAssignOperation eao) throws FaultException {
Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java Mon May 19 15:55:12 2008
@@ -136,7 +136,7 @@
/**
* Calculate a duration offset from right now.
- *
+ *
* @param duration
* the offset
* @return the resulting date.
@@ -150,13 +150,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.
@@ -165,7 +163,7 @@
__log.fatal(errmsg);
throw new InvalidProcessException(errmsg);
}
-
+
OMessageVarType vartype = (OMessageVarType) onMessage.variable.type;
// Check that each part contains what we expect.
@@ -210,7 +208,7 @@
VariableInstance vinst = _scopeFrame.resolve(onMessage.variable);
try {
- initializeVariable(vinst, msgEl);
+ initializeVariable(vinst, msgEl);
} catch (ExternalVariableModuleException e) {
__log.error("Exception while initializing external variable", e);
_self.parent.failure(e.toString(), null);
Modified: ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java (original)
+++ ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java Mon May 19 15:55:12 2008
@@ -212,4 +212,9 @@
public ExtensionValidator getExtensionValidator(QName extensionElementName) {
return null;
}
+
+ public Part resolveHeaderPart(Variable variable, String partname) throws CompilationException {
+ return null;
+ }
+
}
Modified: ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java (original)
+++ ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java Mon May 19 15:55:12 2008
@@ -84,7 +84,7 @@
elm2.setTextContent(cat);
final Message response = prmx.createMessage(prmx.getOperation().getOutput().getMessage().getQName());
response.setMessage(msg.getMessage());
- response.setMessagePart("probeData", elm2);
+ response.setPart("probeData", elm2);
prmx.reply(response);
}
}
Modified: ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java (original)
+++ ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java Mon May 19 15:55:12 2008
@@ -67,7 +67,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);
+ }
}
}
Modified: ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java (original)
+++ ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java Mon May 19 15:55:12 2008
@@ -27,25 +27,35 @@
*/
public class HMessage extends HObject {
- private String _type;
- private HLargeData _data;
-
- public void setType(String type) {
- _type = type;
- }
-
- /** @hibernate.property column="TYPE" */
- public String getType() {
- return _type;
- }
-
- /** @hibernate.many-to-one column="DATA" */
- public HLargeData getMessageData() {
- return _data;
- }
-
- public void setMessageData(HLargeData data) {
- _data = data;
- }
+ private String _type;
+ private HLargeData _data;
+ private HLargeData _header;
+
+ public void setType(String type) {
+ _type = type;
+ }
+
+ /** @hibernate.property column="TYPE" */
+ public String getType() {
+ return _type;
+ }
+
+ /** @hibernate.many-to-one column="DATA" */
+ public HLargeData getMessageData() {
+ return _data;
+ }
+
+ 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/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java Mon May 19 15:55:12 2008
@@ -40,47 +40,68 @@
@Table(name="ODE_MESSAGE")
public class MessageDAOImpl implements MessageDAO {
- @Id @Column(name="MESSAGE_ID")
- @GeneratedValue(strategy=GenerationType.AUTO)
- private Long _id;
- @Basic @Column(name="TYPE")
+ @Id @Column(name="MESSAGE_ID")
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ private Long _id;
+ @Basic @Column(name="TYPE")
private String _type;
- @Lob @Column(name="DATA")
+ @Lob @Column(name="DATA")
private String _data;
- @Transient
+ @Lob @Column(name="HEADER")
+ private String _header;
+ @Transient
private Element _element;
+ @Transient
+ private Element _headerElement;
- public MessageDAOImpl() {
-
- }
- public MessageDAOImpl(QName type, MessageExchangeDAOImpl me) {
- _type = type.toString();
- }
-
- public Element getData() {
- if ( _element == null && _data != null && !"".equals(_data) ) {
- try {
- _element = DOMUtils.stringToDOM(_data);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- return _element;
- }
-
- public QName getType() {
- return _type == null ? null : QName.valueOf(_type);
- }
+ public MessageDAOImpl() {
- public void setData(Element value) {
+ }
+ public MessageDAOImpl(QName type, MessageExchangeDAOImpl me) {
+ _type = type.toString();
+ }
+
+ public Element getData() {
+ if ( _element == null && _data != null && !"".equals(_data) ) {
+ try {
+ _element = DOMUtils.stringToDOM(_data);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return _element;
+ }
+
+ public QName getType() {
+ return _type == null ? null : QName.valueOf(_type);
+ }
+
+ public void setData(Element value) {
if (value == null) return;
_data = DOMUtils.domToString(value);
- _element = value;
- }
+ _element = value;
+ }
+
+ public void setType(QName type) {
+ _type = type.toString();
+ }
+
+ public Element getHeader() {
+ if ( _headerElement == null && _header != null ) {
+ try {
+ _headerElement = DOMUtils.stringToDOM(_header);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ return _headerElement;
+ }
- public void setType(QName type) {
- _type = type.toString();
- }
+ public void setHeader(Element value) {
+ if (value == null) return;
+ _header = DOMUtils.domToString(value);
+ _headerElement = value;
+ }
}
Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java Mon May 19 15:55:12 2008
@@ -42,7 +42,7 @@
private Long _id;
@Basic @Column(name="PROP_KEY")
private String propertyKey;
- @Basic @Column(name="PROP_VALUE")
+ @Basic @Column(name="PROP_VALUE", length=2000)
private String propertyValue;
@ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST})
@Column(name="MEX_ID")
Modified: ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel
URL: http://svn.apache.org/viewvc/ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel (original)
+++ ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel Mon May 19 15:55:12 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/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml
URL: http://svn.apache.org/viewvc/ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml (original)
+++ ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml Mon May 19 15:55:12 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" >
Modified: ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
URL: http://svn.apache.org/viewvc/ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java (original)
+++ ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java Mon May 19 15:55:12 2008
@@ -73,8 +73,6 @@
public static final String PROP_WORKING_DIR = "working.dir";
- public static final String PROP_REPLICATE_EMPTYNS = "message.replicate.emptyns";
-
public static final String PROP_EVENT_LISTENERS = "event.listeners";
public static final String PROP_MEX_INTERCEPTORS = "mex.interceptors";
@@ -229,10 +227,6 @@
return getProperty(OdeConfigProperties.PROP_TX_FACTORY_CLASS, "org.apache.ode.il.EmbeddedGeronimoFactory");
}
- public boolean isReplicateEmptyNS() {
- return Boolean.valueOf(getProperty(OdeConfigProperties.PROP_REPLICATE_EMPTYNS, "true"));
- }
-
public String getEventListeners() {
return getProperty(PROP_EVENT_LISTENERS);
}
Modified: ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java
URL: http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java (original)
+++ ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java Mon May 19 15:55:12 2008
@@ -81,14 +81,13 @@
try {
ObjectInputStream ois = new ObjectInputStream(binaryStream) {
- protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
+ protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
String name = desc.getName();
try {
return Class.forName(name, false, cl);
} catch (ClassNotFoundException ex) {
return super.resolveClass(desc);
}
- }
};
return ois.readObject();
}