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

java.lang.AssertionError: org.xml.sax.SAXParseException;systemId: jar文件:/道路/ / glassfish /模块/ jaxb-osgi.jar ! / com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd;lineNumber: 52个;columnNumber: 88;schema_reference:读取架构文档'xjc失败。由于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位服务器虚拟机(build 25.0-b70,混合模式)

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


当前回答

在Windows上使用RAD 9.6和JDK 1.8 websphere 8.5运行时, 在生成Java中编辑xjc.bat给出“未能读取外部模式…”错误,添加/更新jaxb。属性没有那么好,

然而,我编辑了wsimport如下所示

你可以修改wsimport.bat文件,直接将属性指定为jvm参数之一,如下所示 我们的客户报告说上述解决方案对他们有效。

正如SAXParseException中提到的那样,它就是我案例中的解决方案。

其他回答

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

如果您正在使用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>

对于没有管理员权限的gradle用户,这里有一个提示:将这一行添加到你的jaxb-task中:

System.setProperty('javax.xml.accessExternalSchema', 'all')

它看起来是这样的:

jaxb {
    System.setProperty('javax.xml.accessExternalSchema', 'all')
    xsdDir = "${project.name}/xsd"
    xjc {
        taskClassname = "com.sun.tools.xjc.XJCTask"
        args = ["-npa", "-no-header"]
    }
}

这适用于jdk1.8.0_65

wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl

在Windows上使用RAD 9.6和JDK 1.8 websphere 8.5运行时, 在生成Java中编辑xjc.bat给出“未能读取外部模式…”错误,添加/更新jaxb。属性没有那么好,

然而,我编辑了wsimport如下所示

你可以修改wsimport.bat文件,直接将属性指定为jvm参数之一,如下所示 我们的客户报告说上述解决方案对他们有效。

正如SAXParseException中提到的那样,它就是我案例中的解决方案。

我找到解决办法了。(基于http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA)

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

javax.xml.accessExternalSchema = all

这是所有。享受JDK 8吧。