You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/01/21 17:21:08 UTC
svn commit: r613922 - in
/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src:
main/java/org/apache/servicemix/saxon/
test/java/org/apache/servicemix/saxon/ test/resources/
Author: gnodet
Date: Mon Jan 21 08:21:07 2008
New Revision: 613922
URL: http://svn.apache.org/viewvc?rev=613922&view=rev
Log:
SM-1200: Problems using document('') inside xslt, depending on the source type
Added:
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/codes.xml
- copied unchanged from r613920, servicemix/smx3/trunk/deployables/serviceengines/servicemix-saxon/src/test/resources/codes.xml
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/doc-call.xsl
- copied unchanged from r613920, servicemix/smx3/trunk/deployables/serviceengines/servicemix-saxon/src/test/resources/doc-call.xsl
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/request.xml
- copied unchanged from r613920, servicemix/smx3/trunk/deployables/serviceengines/servicemix-saxon/src/test/resources/request.xml
Modified:
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java Mon Jan 21 08:21:07 2008
@@ -268,7 +268,7 @@
protected Document parse(Resource res) throws Exception {
URL url = null;
try {
- res.getURL();
+ url = res.getURL();
} catch (IOException e) {
// Ignore
}
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java Mon Jan 21 08:21:07 2008
@@ -18,6 +18,7 @@
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
+import java.net.URL;
import java.util.Iterator;
import java.util.Map;
@@ -32,9 +33,9 @@
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
import net.sf.saxon.TransformerFactoryImpl;
-
import org.apache.servicemix.jbi.jaxp.BytesSource;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.springframework.core.io.Resource;
@@ -47,6 +48,8 @@
private TransformerFactory transformerFactory;
private Source xsltSource;
private Templates templates;
+ private boolean useDomSourceForXslt = true;
+ private Boolean useDomSourceForContent;
public TransformerFactory getTransformerFactory() {
if (transformerFactory == null) {
@@ -59,6 +62,22 @@
this.transformerFactory = transformerFactory;
}
+ public boolean isUseDomSourceForXslt() {
+ return useDomSourceForXslt;
+ }
+
+ public void setUseDomSourceForXslt(boolean useDomSourceForXslt) {
+ this.useDomSourceForXslt = useDomSourceForXslt;
+ }
+
+ public Boolean getUseDomSourceForContent() {
+ return useDomSourceForContent;
+ }
+
+ public void setUseDomSourceForContent(Boolean useDomSourceForContent) {
+ this.useDomSourceForContent = useDomSourceForContent;
+ }
+
public void validate() throws DeploymentException {
if (xsltSource == null && getResource() == null && getExpression() == null) {
throw new DeploymentException("xsltSource, resource or expression must be specified");
@@ -77,8 +96,14 @@
protected void transformContent(Transformer transformer, MessageExchange exchange,
NormalizedMessage in, NormalizedMessage out) throws Exception {
Source src = in.getContent();
- if (src instanceof DOMSource) {
+ if (useDomSourceForContent != null && useDomSourceForContent.booleanValue()) {
src = new DOMSource(getSourceTransformer().toDOMDocument(src));
+ } else if (useDomSourceForContent != null && !useDomSourceForContent.booleanValue()) {
+ src = getSourceTransformer().toStreamSource(src);
+ } else {
+ if (src instanceof DOMSource) {
+ src = new DOMSource(getSourceTransformer().toDOMDocument(src));
+ }
}
if (RESULT_BYTES.equalsIgnoreCase(getResult())) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
@@ -105,7 +130,17 @@
}
protected Source createXsltSource(Resource res) throws Exception {
- return new DOMSource(parse(res));
+ if (useDomSourceForXslt) {
+ String url = null;
+ try {
+ url = res.getURL().toURI().toString();
+ } catch (Exception e) {
+ // Ignore
+ }
+ return new DOMSource(parse(res), url);
+ } else {
+ return new StreamSource(res.getInputStream());
+ }
}
public Templates getTemplates() throws Exception {
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java Mon Jan 21 08:21:07 2008
@@ -35,6 +35,7 @@
import org.apache.servicemix.tck.SpringTestSupport;
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.core.io.ClassPathResource;
public class SaxonComponentTest extends SpringTestSupport {
private static transient Log log = LogFactory.getLog(SaxonComponentTest.class);
@@ -113,6 +114,27 @@
me.setService(new QName("urn:test", "xslt-params"));
me.getInMessage().setContent(new StringSource("<sample id='777888' sent='"
+ new Date() + "'>hello world!</sample>"));
+ client.sendSync(me);
+ if (me.getStatus() == ExchangeStatus.ERROR) {
+ if (me.getError() != null) {
+ throw me.getError();
+ } else {
+ fail("Received ERROR status");
+ }
+ } else if (me.getFault() != null) {
+ fail("Received fault: " + new SourceTransformer().toString(me.getFault().getContent()));
+ }
+ log.info(transformer.toString(me.getOutMessage().getContent()));
+ Element el = transformer.toDOMElement(me.getOutMessage());
+ assertEquals("cheeseyCheese", textValueOfXPath(el, "//param"));
+ assertEquals("4002", textValueOfXPath(el, "//integer"));
+ }
+
+ public void testXsltWithDocCall() throws Exception {
+ DefaultServiceMixClient client = new DefaultServiceMixClient(jbi);
+ InOut me = client.createInOutExchange();
+ me.setService(new QName("urn:test", "xslt-doccall"));
+ me.getInMessage().setContent(new StreamSource(getClass().getClassLoader().getResourceAsStream("request.xml")));
client.sendSync(me);
if (me.getStatus() == ExchangeStatus.ERROR) {
if (me.getError() != null) {
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml Mon Jan 21 08:21:07 2008
@@ -37,8 +37,8 @@
<!-- START SNIPPET: xslt-params -->
<saxon:xslt service="test:xslt-params" endpoint="endpoint"
- resource="classpath:parameter-test.xsl">
- <property name="parameters">
+ resource="classpath:parameter-test.xsl">
+ <property name="parameters">
<map>
<entry key="stringParam" value="cheeseyCheese"/>
<entry key="integerParam">
@@ -47,21 +47,27 @@
</bean>
</entry>
</map>
- </property>
+ </property>
</saxon:xslt>
<!-- END SNIPPET: xslt-params -->
<!-- START SNIPPET: xslt-dynamic -->
<saxon:xslt service="test:xslt-dynamic" endpoint="endpoint">
- <saxon:expression>
- <bean class="org.apache.servicemix.expression.PropertyExpression">
- <property name="property" value="xslt.source" />
- </bean>
+ <saxon:expression>
+ <bean class="org.apache.servicemix.expression.PropertyExpression">
+ <property name="property" value="xslt.source" />
+ </bean>
</saxon:expression>
</saxon:xslt>
<!-- END SNIPPET: xslt-dynamic -->
-
- <!-- START SNIPPET: xquery -->
+
+ <saxon:xslt service="test:xslt-doccall" endpoint="endpoint"
+ resource="classpath:doc-call.xsl"
+ useDomSourceForXslt="true"
+ useDomSourceForContent="false"
+ result="bytes" />
+
+ <!-- START SNIPPET: xquery -->
<saxon:xquery service="test:xquery" endpoint="endpoint"
resource="classpath:query.xq" />
<!-- END SNIPPET: xquery -->
@@ -70,12 +76,12 @@
<saxon:xquery service="test:xquery-inline" endpoint="endpoint">
<!-- CDATA are not supported currently -->
<saxon:query>
- for $x in /bookstore/book
- where $x/price > 30
+ for $x in /bookstore/book
+ where $x/price > 30
return $x/title
</saxon:query>
- <saxon:outputProperties>
- <saxon:property key="{http://saxon.sf.net/}wrap-result-sequence">yes</saxon:property>
+ <saxon:outputProperties>
+ <saxon:property key="{http://saxon.sf.net/}wrap-result-sequence">yes</saxon:property>
</saxon:outputProperties>
</saxon:xquery>
<!-- END SNIPPET: xquery-inline -->