首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有通用URL的JAXB -Unmarshalling

具有通用URL的JAXB -Unmarshalling
EN

Stack Overflow用户
提问于 2015-03-29 01:11:27
回答 1查看 986关注 0票数 1

我在Java中有一种方法,用于用给定的URL来解组XML文件。

如"http:// .“一切都很好,但是对于URL来说,就像"file://localhost/C:/Users/.../filename.xml“我收到了以下异常”。

我不知道他为什么不接受我的"file://localhost/"-URL's.“

代码语言:javascript
复制
javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.]
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:335)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:563)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:249)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:214)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:204)
    at preferee.data.access.IO_transfer.jaxb.XMLconverter.getItemFromStream(XMLconverter.java:40)
    at preferee.data.access.IO_transfer.jaxb.XMLconverter.getItemFromURL(XMLconverter.java:57)
    at preferee.data.access.testServer.LocalTestServer.<init>(LocalTestServer.java:42)
    at preferee.data.access.testServer.TestProvider.<init>(TestProvider.java:16)
    at preferee.data.access.Providers.createTestProvider(Providers.java:29)
    at preferee.tests.FakeServerTests.MovieDao_TEST.run(MovieDao_TEST.java:22)
    at preferee.tests.FakeServerTests.MovieDao_TEST.main(MovieDao_TEST.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1436)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:999)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:243)

顺便说一句,这是我的方法-实现:

代码语言:javascript
复制
Class classObject  = ... ;

public T getItemFromURL(String url) throws DataAccessException {
    JAXBContext jc = null;
    T item = null;
    try (InputStream XML_Stream = new URL(url).openStream();)
    {
        jc = JAXBContext.newInstance(classObject);
        item = (T) jc.createUnmarshaller().unmarshal(XML_Stream);
    } catch (IOException e) {
        throw new DataAccessException("( originele error: " + e.getClass() +" ) " + e.getMessage() + ": Kon Bestand niet ophalen of lezen." );
    } catch (JAXBException e) {
        throw new DataAccessException(e.getMessage());
    }
    return item;
}
EN

回答 1

Stack Overflow用户

发布于 2015-03-29 01:33:25

您访问文件系统的URL是不正确的。它应该是:

代码语言:javascript
复制
file:///c|/path/to/file

更新

这个"file:///“”是否适用于其他系统,如mac、linux?

您可以在任何操作系统上使用文件URL。当然,URL需要匹配那里的文件布局(即Linux中没有C驱动器)。

有没有办法转换c:\ .到c/./很容易?

代码语言:javascript
复制
File file = new File("C:/Users/.../filename.xml");
String url = file.toURI().toURL().toString();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29324548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档