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/28 19:42:21 UTC
svn commit: r661027 - in /ode/branches/APACHE_ODE_1.1:
bpel-api/src/main/java/org/apache/ode/bpel/explang/
bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/
bpel-runtime/src/main/java/org/apache/ode/bpel/engine/
bpel-runtime/src/mai...
Author: mriou
Date: Wed May 28 10:42:20 2008
New Revision: 661027
URL: http://svn.apache.org/viewvc?rev=661027&view=rev
Log:
ODE-296 Support XSLT's document() function. Patch from Ciaran Jessup.
Modified:
ode/branches/APACHE_ODE_1.1/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XslRuntimeUriResolver.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java
ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
Modified: ode/branches/APACHE_ODE_1.1/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-api/src/main/java/org/apache/ode/bpel/explang/EvaluationContext.java Wed May 28 10:42:20 2008
@@ -18,6 +18,8 @@
*/
package org.apache.ode.bpel.explang;
+import java.net.URI;
+
import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.o.OExpression;
import org.apache.ode.bpel.o.OLink;
@@ -97,4 +99,11 @@
* using this evaluation context.
*/
boolean narrowTypes();
+
+ /**
+ * Retrieves the base URI that the BPEL Process execution contextis running relative to.
+ *
+ * @return URI - the URI representing the absolute physical file path location that this process is defined within.
+ */
+ URI getBaseResourceURI();
}
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java Wed May 28 10:42:20 2008
@@ -89,7 +89,7 @@
} else if (Constants.EXT_FUNCTION_GETLINKSTATUS.equals(localName)) {
return new GetLinkStatus();
} else if (Constants.EXT_FUNCTION_DOXSLTRANSFORM.equals(localName)) {
- return new DoXslTransform();
+ return new DoXslTransform(_ectx);
} else {
throw new WrappedResolverException("Unknown BPEL function: " + functionName);
}
@@ -181,7 +181,12 @@
}
public class DoXslTransform implements XPathFunction {
- public Object evaluate(List args) throws XPathFunctionException {
+ private EvaluationContext _ectx;
+ public DoXslTransform(EvaluationContext ectx) {
+ this._ectx= ectx;
+ }
+
+ public Object evaluate(List args) throws XPathFunctionException {
if (args.size() < 2 || (args.size() % 2) != 0)
throw new XPathFunctionException(new FaultException(new QName(Namespaces.ODE_EXTENSION_NS, "doXslTransformInvalidSource"), "Invalid arguments"));
@@ -264,7 +269,7 @@
// of the transformation is just a string.
StringWriter writerResult = new StringWriter();
StreamResult result = new StreamResult(writerResult);
- XslRuntimeUriResolver resolver = new XslRuntimeUriResolver(_oxpath);
+ XslRuntimeUriResolver resolver = new XslRuntimeUriResolver(_oxpath, _ectx.getBaseResourceURI());
XslTransformHandler.getInstance().cacheXSLSheet(xslUri, xslSheet.sheetBody, resolver);
try {
XslTransformHandler.getInstance().transform(xslUri, source, result, parametersMap, resolver);
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XslRuntimeUriResolver.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XslRuntimeUriResolver.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XslRuntimeUriResolver.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XslRuntimeUriResolver.java Wed May 28 10:42:20 2008
@@ -19,14 +19,24 @@
package org.apache.ode.bpel.elang.xpath20.runtime;
+import org.apache.ode.bpel.compiler.api.CompilationException;
import org.apache.ode.bpel.elang.xpath10.o.OXPath10Expression;
import org.apache.ode.bpel.o.OXslSheet;
+import org.apache.ode.utils.StreamUtils;
+import org.apache.ode.utils.fs.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import javax.xml.transform.URIResolver;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.stream.StreamSource;
import java.net.URI;
+import java.net.URISyntaxException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.io.StringReader;
/**
@@ -36,15 +46,67 @@
*/
public class XslRuntimeUriResolver implements URIResolver {
- private OXPath10Expression _expr;
+ private static final Log __log = LogFactory.getLog(XslRuntimeUriResolver.class);
+
+ private OXPath10Expression _expr;
+ private final URI _baseResourceURI;
+
+ public XslRuntimeUriResolver(OXPath10Expression expr, URI baseResourceURI) {
+ _expr = expr;
+ _baseResourceURI= baseResourceURI;
+ }
+
+ public Source resolve(String href, String base) throws TransformerException {
+ String result;
+ URI uri;
+ try {
+ uri = new URI(FileUtils.encodePath(href));
+ } catch (URISyntaxException e) {
+ return null;
+ }
+
+ OXslSheet sheet = _expr.xslSheets.get(uri);
+ if( sheet != null) {
+ result = sheet.sheetBody;
+ } else {
+ result = getResourceAsString(uri);
+ }
+
+ if( result != null ) {
+ return new StreamSource(new StringReader(result));
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Given a URI this function will attempt to retrieve the resource declared at that URI location
+ * as a string. (Hopefully everything's character encodings are all ok...) This URI can be
+ * defined as being relative to the executing process instance's physical file location.
+ *
+ * @param docUri - the URI to resolve
+ * @return String - the resource contents, or null if none found.
+ */
+ private String getResourceAsString(URI docUri) {
+ URI resolvedURI= _baseResourceURI.resolve(docUri);
+ InputStream is = null;
+ try {
+ File f = new File(resolvedURI);
+ if (!f.exists()) return null;
+ is = new FileInputStream(f);
+ return new String(StreamUtils.read(is));
+ } catch (IOException e) {
+ __log.info("Couldn't load XSL resource " + docUri);
+ } finally {
+ try {
+ if (is != null) is.close();
+ } catch (Exception ex) {
+ // No worries.
+ }
+ }
+ return null;
+ }
+
+
- public XslRuntimeUriResolver(OXPath10Expression expr) {
- _expr = expr;
- }
-
- public Source resolve(String href, String base) throws TransformerException {
- URI uri = URI.create(href);
- OXslSheet sheet = _expr.xslSheets.get(uri);
- return new StreamSource(new StringReader(sheet.sheetBody));
- }
}
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java Wed May 28 10:42:20 2008
@@ -19,6 +19,7 @@
package org.apache.ode.bpel.engine;
import java.io.InputStream;
+import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -121,6 +122,15 @@
}
/**
+ * Retrives the base URI to use for local resource resolution.
+ *
+ * @return URI - instance representing the absolute file path to the physical location of the process definition folder.
+ */
+ public URI getBaseResourceURI() {
+ return this._pconf.getBaseURI();
+ }
+
+ /**
* Intiialize the external variable configuration/engine manager. This is called from hydration logic, so it
* is possible to change the external variable configuration at runtime.
*
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=661027&r1=661026&r2=661027&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 Wed May 28 10:42:20 2008
@@ -20,6 +20,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -1362,4 +1363,8 @@
return vrp;
}
+ public URI getBaseResourceURI() {
+ return _bpelProcess.getBaseResourceURI();
+ }
+
}
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=661027&r1=661026&r2=661027&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 Wed May 28 10:42:20 2008
@@ -53,6 +53,7 @@
import org.w3c.dom.Text;
import javax.xml.namespace.QName;
+import java.net.URI;
import java.util.List;
/**
@@ -650,6 +651,10 @@
public boolean narrowTypes() {
return false;
}
+
+ public URI getBaseResourceURI() {
+ return _ctx.getBaseResourceURI();
+ }
}
}
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java Wed May 28 10:42:20 2008
@@ -20,6 +20,7 @@
import java.util.Collection;
import java.util.Date;
+import java.net.URI;
import javax.wsdl.Operation;
import javax.xml.namespace.QName;
@@ -265,4 +266,11 @@
public Node value;
public Node reference;
}
+
+ /**
+ * Retrieves the base URI that this BPEL Process instance is running relative to.
+ *
+ * @return URI - the URI representing the absolute physical file path location that this process is defined within.
+ */
+ URI getBaseResourceURI();
}
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java Wed May 28 10:42:20 2008
@@ -18,6 +18,7 @@
*/
package org.apache.ode.bpel.runtime;
+import java.net.URI;
import java.util.Map;
import org.apache.commons.logging.Log;
@@ -142,4 +143,8 @@
_native.sendEvent(se);
}
+ public URI getBaseResourceURI() {
+ return _native.getBaseResourceURI();
+ }
+
}
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PropertyAliasEvaluationContext.java Wed May 28 10:42:20 2008
@@ -18,6 +18,8 @@
*/
package org.apache.ode.bpel.runtime;
+import java.net.URI;
+
import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.explang.EvaluationContext;
import org.apache.ode.bpel.o.OElementVarType;
@@ -87,5 +89,9 @@
public boolean narrowTypes() {
return true;
}
+
+ public URI getBaseResourceURI() {
+ return null;
+ }
}
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.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/XPath20ExpressionRuntimeTest.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java Wed May 28 10:42:20 2008
@@ -36,6 +36,8 @@
import org.w3c.dom.NodeList;
import javax.xml.namespace.QName;
+
+import java.net.URI;
import java.util.HashMap;
import java.util.Map;
@@ -152,4 +154,8 @@
Expression exp = new Expression(e);
return (OXPath20ExpressionBPEL20)_compiler.compileLValue(exp);
}
+ @Override
+ public URI getBaseResourceURI() {
+ return null;
+ }
}
Modified: ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java?rev=661027&r1=661026&r2=661027&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java (original)
+++ ode/branches/APACHE_ODE_1.1/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java Wed May 28 10:42:20 2008
@@ -20,6 +20,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.net.URI;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
@@ -438,5 +439,10 @@
// TODO Auto-generated method stub
return null;
}
+
+ public URI getBaseResourceURI() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}