java - 使用 mule esb 中的 servlet 从项目获取 java 转换器中的文件路径

标签 java servlets xsd mule xml-validation

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

最佳答案

引用这篇文章的答案: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());

关于java - 使用 mule esb 中的 servlet 从项目获取 java 转换器中的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38092046/

相关文章:

java - 如何使用 uibinder 创建带有子项的 gwt 复合组件?

java - 无法在 Eclipse Oxygen 中将动态 Web 项目版本设置为 4.0

c# - 如何将 XSD 文件转换为 C# 类

java - 解析 XSD 文件以从复杂类型中获取元素名称

datetime - 这是有效的 xsd :dateTime? 如果是,为什么?

java - Struts 2迭代器标签在jsp中不起作用?

java - 当我调用 hashTable.get(key) 时获取 null

java - servlet 请求方法实现

java - 我需要在特定 session 计数后重定向页面

java - JSP 代码中的大括号