【问题标题】:Getting file path in java transformer from project using servlet in mule esb [duplicate]使用mule esb中的servlet从项目中获取java转换器中的文件路径[重复]
【发布时间】:2016-10-31 17:10:42
【问题描述】:
File schemaLocation = new File("/home/localpc/servletaddequi/src/main/resources/BackupSample/DEMO.xsd")

如果我如上所述传递文件路径,我可以获取文件。 但是我只想从项目中传递文件的路径,我怎样才能传递文件的路径?如果我传递文件路径如下:

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

它会产生错误:

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)

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

【问题讨论】:

  • 你能添加你的flow.xml吗?为什么需要在 Java 转换器中使用文件。原因我有点困惑。

标签: java servlets xsd mule xml-validation


【解决方案1】:

参考这篇文章的答案:mule read single file from classpath during flow,你可以使用Thread.currentThread().getContextClassLoader().getResource("filename.xsd") 来获取URL 类。

因此你可以试试下面的代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2015-04-20
    • 2018-10-24
    • 1970-01-01
    相关资源
    最近更新 更多