Java.net.MalformedURLException: 没有协议。

8

我正在编写一个在Java中运行xjc的类。我的代码如下:

 URL url = new URL("C:\\Users\\Simran\\Desktop\\books.xsd"); 
 SchemaCompiler sc = XJC.createSchemaCompiler();
 sc.parseSchema(new InputSource(url.toExternalForm()));
 S2JJAXBModel model = sc.bind();
 JCodeModel cm = model.generateCode(null, null);
 cm.build(new FileCodeWriter(new File("C:\\Users\\Simran\\Desktop\\books.xsd")));

但是当我运行这个代码时,出现了以下错误:
Exception in thread "main" java.net.MalformedURLException: no protocol: books.xsd
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at jaxbTest.Test1.main(Test1.java:22)

请问有谁能帮忙解决这个问题吗?


你尝试过之前我建议的 sc.parseSchema(new InputSource("C:\\Users\\Simran\\Desktop\\books.xsd")); 吗? - jmj
是的,我尝试过这个,但它没有起作用。 - simran
3个回答

18

尝试在您的文件路径前添加"file://"。但是,正如Bozho提出的那样,在这里您不需要URL。


在我添加到我的答案中时,+1提到了"file://"协议 :) - Bozho
有人能给我一些使用API调用xjc的链接吗? - simran
1
哦,请标记一些答案为已接受并提出另一个问题。不要在评论中进行操作。 - Vladimir Ivanov
但在Ubuntu中呢? - nimour pristou

11

这不是一个有效的URL。可以通过在协议前添加file://来使其有效。

但是实际上您根本不需要一个URL。您可以将Reader(以及InputStream)传递给InputSource构造函数。例如:

new InputSource(new FileReader(path))

我一直以为是用三个斜杠(/)的,像file:///这样,但我会点赞这个答案。而且正确的术语不是追加,而是前置。 - Kinjal Dixit
感谢您的“前置”。两个斜杠也可以使用,我不确定哪一个是标准。我猜无论斜杠数量如何,它都会被规范化。 - Bozho

-4

当我打开虚拟控制台时,出现了上述问题。

解决方法:您在浏览器中选择了非常安全的选项。

开始 -> Java配置 -> 安全性 - 点击“非常高”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接