2016-06-29 9 views
1
File schemaLocation = new File("/home/localpc/servletaddequi/src/main/resources/BackupSample/DEMO.xsd") 

Ich bin in der Lage, Datei zu erhalten, wenn ich den Dateipfad wie oben erwähnt übergeben. Aber ich möchte den Pfad der Datei nur aus dem Projekt übergeben, wie kann ich den Pfad der Datei übergeben? Wenn ich den Dateipfad wie unten passieren:Abrufen des Dateipfads in Java-Transformer aus dem Projekt mit Servlet in Mule esb

File schemaLocation = new File("/foldername/filename.xsd"); 

Es erzeugt Fehler wie:

Failed to read schema document 'file:/BackupSample/DEMO.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:347) 
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:4166) 
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaError(XSDHandler.java:4149) 
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument1(XSDHandler.java:2479) 
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:2187) 
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:573) 
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:617) 
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:575) 
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:541) 
    at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:252) 
    at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:627) 
    at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:643) 
    at com.test.Test.transformMessage(Test.java:38) 
    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:141) 
    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:89) 
    at org.mule.DefaultMuleMessage.transformMessage(DefaultMuleMessage.java:1602) 
    at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:1509) 

und

Caused by: java.io.FileNotFoundException: /BackupSample/DEMO.xsd (No such file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:146) 
    at java.io.FileInputStream.<init>(FileInputStream.java:101) 
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90) 
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:619) 
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189) 
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:582) 
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:685) 
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(SchemaDOMParser.java:530) 
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:2175) 
    ... 218 more 
+0

Können Sie Ihre flow.xml hinzufügen. Warum brauchen Sie eine Datei im Java-Transformer? Ich bin ein bisschen verwirrt wegen dem Grund. –

Antwort

0

Siehe Antwort von diesem Beitrag: mule read single file from classpath during flow Sie Thread.currentThread().getContextClassLoader().getResource("filename.xsd") verwenden können um die URL Klasse zu bekommen.

Daher können Sie den folgenden Code versuchen:

URL url = Thread.currentThread().getContextClassLoader().getResource("filename.xsd"); 
File schemaLocation = new File(url.getFile());