File path gets changed when passed through a different bundle
onimurasame Jan 8, 2016 12:11 PMHello all,
I've been trying to pass an external file from a Bundle to another and when I call Bundle B's method from Bundle A... the path gets changed to my Jboss Fuse Home directory.
My code looks like this:
This is the implementation class that I'm trying to call from Bundle A:
package com.externalxsl; import java.io.File; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; public class XSLTServiceImpl implements IXSLTService { @Override public Source getXSLTSource() { return new StreamSource(new File("c:\\messages\\schema\\example.xsd")); } }
This is the blueprint to expose the method as a service:
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> <bean id="XSLTServiceImpl" class="com.externalxsl.XSLTServiceImpl" /> <service ref="XSLTServiceImpl" interface="com.externalxsl.IXSLTService" /> </blueprint>
This is the actual caller, from bundle A, of the aforementioned method:
/** * */ package com.transformer.impl; import javax.xml.transform.Source; import com.externalxsl.IXSLTService; import com.transformer.AbstractTransformer; /** * @author */ public class ClasspathTransformer extends AbstractTransformer { private IXSLTService externalXLST = null; @Override public Source getXSLT() { return getExternalXLST().getXSLTSource(); } /** * @return the externalXLST */ public IXSLTService getExternalXLST() { return externalXLST; } /** * @param externalXLST * the externalXLST to set */ public void setExternalXLST(IXSLTService externalXLST) { this.externalXLST = externalXLST; } public void init() { System.out.println("OSGi client started."); if (externalXLST != null) { System.out.println("externalXLST.getXSLTSource()"); externalXLST.getXSLTSource(); // Invoke the OSGi service! } } }
And this is the declaration of the bean and the route:
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:camel="http://camel.apache.org/schema/blueprint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> <reference id="ClasspathXSLTReference" interface="ltf.externalxsl.IXSLTService"/> <bean id="ClasspathTransformater" class="ltf.transformer.impl.ClasspathTransformer" init-method="init"> <property name="externalXLST" ref="ClasspathXSLTReference"/> </bean> <camelContext xmlns="http://camel.apache.org/schema/blueprint"> <route> <from uri="activemq:JavaTransformation.IN" /> <log message="Initiating transformation of message content = ${body}" loggingLevel="INFO" /> <doTry> <log message="Initiating transformation of message content = ${body}" loggingLevel="INFO" /> <bean ref="ClasspathTransformater" method="doTransformation" /> <doCatch> <exception>java.lang.Exception</exception> <handled> <constant>false</constant> </handled> <log message="Transformation of ${id} raised and exception = ${exception.message}" loggingLevel="ERROR" /> <transform> <simple>Exception Raised: ${exception.message} and your message was = ${body}</simple> </transform> <to uri="activemq:JavaTransformation.ERROR" /> </doCatch> </doTry> <log message="Transformation of ${id} ended and delivering message to queue" loggingLevel="INFO" /> <to uri="activemq:JavaTransformation.OUT" /> </route> </camelContext> </blueprint>
Any ideas?