我需要在项目中使用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工作的方法,请分享。


当前回答

一个非常简单的可移植的解决方案是,将下面这行代码放在你的代码的关键部分,其中一部分你肯定会运行(例如在main方法中):

System.setProperty("javax.xml.accessExternalDTD", "all");

这将以编程方式设置所需的系统属性,而不必进行棘手的maven pom.xml更改(出于某种原因,这对我不起作用)。

其他回答

NetBeans更新了JDK8的教程和以下问题:

JAX-WS Web服务入门->启用对外部模式的访问

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

-Djavax.xml.accessExternalSchema=all

如果您正在使用Intellij IDEA,请在maven工具窗口中

选择Maven Settings,展开Maven下拉菜单,选择Runner。

在VM选项下添加-Djavax.xml.accessExternalSchema=all

如果您在使用cxf-codegen-plugin将wsdl转换为jave时遇到了这个问题,那么您可以通过将插件配置为fork并提供额外的“-Djavax.xml”来解决这个问题。accessExternalSchema=all" JVM选项。

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>${cxf.version}</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <fork>always</fork>
                        <additionalJvmArgs>
                            -Djavax.xml.accessExternalSchema=all
                        </additionalJvmArgs>

另一个替代方案是通过添加以下内容更新wsimport.sh shell脚本:

wsimport.sh位于这个目录下:

jaxws-ri.2.2.28 / bin

执行“$JAVA”$WSIMPORT_OPTS -Djavax.xml。accessExternalSchema=all -jar "$JAXWS_HOME/lib/jaxws-tools.jar" "$@"