使用JDK8的WebService客户端生成错误

我需要在我的项目中使用Web服务。 我使用NetBeans,所以我右键单击我的项目并尝试添加一个新的“Web服务客户端”。 我上次检查时,这是创建Web服务客户端的方式。 但它导致了一个AssertionError,它说:

java.lang.AssertionError:org.xml.sax.SAXParseException; systemId:jar:file:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber:52; columnNumber:88; schema_reference:无法读取模式文档' xjc.xsd ',因为由于accessExternalSchema属性设置的限制而不允许'文件'访问。

NetBeans的默认Java平台是JDK8(Oracle的正式版本),所以当我更改netbeans.conf文件并将JDK7(也来自Oracle)作为默认值时,一切正常。 所以我认为问题在于JDK8。 这是我的java -version输出:

java版本“1.8.0”
Java(TM)SE运行时环境(build 1.8.0-b132)
Java HotSpot(TM)64位服务器虚拟机(构建25.0-b70,混合模式)

目前,我将JDK7作为我的默认Java平台。 如果有办法让JDK8工作,请分享。


那么,我找到了解决方案。 (基于http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA)

/path/to/jdk1.8.0/jre/lib下创建一个名为jaxp.properties的文件(如果它不存在),然后在其中写入以下行:

javax.xml.accessExternalSchema = all

就这样。 享受JDK 8。


不是一个实际的答案,而是更多的参考。

如果您使用的是jaxws Maven插件,并且您收到相同的错误消息,请将提及的属性添加到插件配置中:

...
<plugin>
  <groupId>org.jvnet.jax-ws-commons</groupId>
  <artifactId>jaxws-maven-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <!-- Needed with JAXP 1.5 -->
    <vmArgs>
        <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
    </vmArgs>
  </configuration>
</plugin>

我在Eclipse IDE(4.4,Luna,Windows 7 x64)中运行ant构建。 我不想修改已安装的JRE库或任何ant脚本(我的多个项目在其构建中包含XJC),而是更改Eclipse设置“外部工具配置”,并将以下内容添加到Ant构建配置的VM参数中:

-Djavax.xml.accessExternalSchema=all
链接地址: http://www.djcxy.com/p/16339.html

上一篇: WebService Client Generation Error with JDK8

下一篇: How does synchronized work in Java