JDK8的WebService客户端生成错误

a.b*_*a.b 214 webservice-client java-8 netbeans-8

我需要在我的项目中使用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运行时环境(版本1.8.0-b132)
Java HotSpot(TM)64位服务器VM(版本25.0-b70,混合模式)

现在,我将JDK7作为我的默认Java平台.如果有办法使JDK8工作,请分享.

a.b*_*a.b 388

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

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

javax.xml.accessExternalSchema = all
Run Code Online (Sandbox Code Playgroud)

就这样.享受JDK 8.

  • 这是不是很便携.您需要在尝试构建项目的每个开发人员的计算机上调整本地JDK安装. (19认同)
  • 也适用于intelliJ. (12认同)
  • 这对我不起作用,以下工作:javax.xml.accessExternalDTD = all,我也可以在代码中设置它并且它可以工作:System.setProperty("javax.xml.accessExternalDTD","all"); (7认同)
  • 这对我有用,但是我不得不将文件放在`/ path/to/jdk1.8.0/lib`下,而不是在另外的`jre`目录下. (3认同)

jas*_*cao 115

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

如果您使用的是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>
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用`org.jvnet.jaxb2.maven2:maven-jaxb2-plugin`插件的更高版本(如0.12.3),则默认设置`accessExternalSchema = all`值. (3认同)

gb9*_*b96 36

我在Eclipse IDE中运行ant构建(4.4,Luna,在Windows 7 x64上).我没有修改已安装的JRE lib或任何ant脚本(我的构建中有多个包含XJC的项目),我更喜欢更改Eclipse Settings"External Tools Configurations"并将以下内容添加到Ant构建配置的VM参数中:

-Djavax.xml.accessExternalSchema=all
Run Code Online (Sandbox Code Playgroud)

  • 我使用Apache CXF的wsdl2java.bat.所以我只是将JVM选项插入到这个BAT文件中.有用. (2认同)
  • 当我尝试运行 mvn clean install 时,我遇到了类似的问题,我只是添加了上面的标志,它已成功部署。谢谢 (2认同)

tan*_*son 26

以下适用于jdk 1.8.0_66中包含的wsimport 2.2.9:

wsimport -J-Djavax.xml.accessExternalSchema=all ....
Run Code Online (Sandbox Code Playgroud)

  • 这是直接使用 `wsimport` 时的正确答案。 (4认同)

mor*_*bio 17

在我的情况下添加:

javax.xml.accessExternalSchema = all
Run Code Online (Sandbox Code Playgroud)

到jaxp.properties不起作用,我要添加:

javax.xml.accessExternalDTD = all
Run Code Online (Sandbox Code Playgroud)

我的环境是linux mint 17和java 8 oracle.我会把它作为解决同样问题的人的答案.

  • 这取决于您是否要允许访问外部DTD或XML Schema(XSD)。DTD是XML Schema的前身。在某些情况下,您可能需要同时设置两者! (2认同)

Meh*_*hdi 15

我测试了这个版本2.4的工件org.codehaus.mojo,这个工作〜

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.4.1</version>
        <executions>
            <execution>

                <goals>
                    <goal>wsimport</goal>
                </goals>
                <configuration>
                    <wsdlDirectory>path/to/dir/wsdl</wsdlDirectory>
                </configuration>
                <id>wsimport-web-service</id>
                <phase>generate-sources</phase>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>javax.xml</groupId>
                <artifactId>webservices-api</artifactId>
                <version>${webservices-api-version}</version>
            </dependency>
        </dependencies>
        <configuration>
            <vmArgs>
                <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
            </vmArgs>
            <sourceDestDir>generated-sources/jaxws-wsimport</sourceDestDir>
            <xnocompile>true</xnocompile>
            <verbose>true</verbose>
            <extension>true</extension>
            <sei>/</sei>
        </configuration>
    </plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)


Jav*_*ldi 15

以下是没有管理员权限的gradle用户的提示提示:将此行添加到您的jaxb-task:

System.setProperty('javax.xml.accessExternalSchema', 'all')
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

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


pjk*_*ser 11

如果在使用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>
Run Code Online (Sandbox Code Playgroud)


小智 10

在glassfish 4.0 Web服务器上测试Web服务程序时,我在Eclipse中也遇到了类似的错误: java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: bundle://158.0:1/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; schema_reference: Failed to read schema document 'xjc.xsd', because 'bundle' access is not allowed due to restriction set by the accessExternalSchema property.

我加入javax.xml.accessExternalSchema = Alljaxp.properties,但亘古不变的为我工作.

但是我在下面找到了一个适用于我的解决方案:对于GlassFish Server,我需要在标签下修改domain.xmlGlassFish,路径:<path>/glassfish/domains/domain1domain2/config/domain.xml)并添加<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options><java-config>

....
Run Code Online (Sandbox Code Playgroud)

<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config> ...然后重新启动GlassFish服务器


Gay*_*nda 7

jaxp.properties在“JDK version/jre/lib”的路径下创建一个名为(如果它不存在)的文件,然后在其中添加以下行。

javax.xml.accessExternalSchema = all
Run Code Online (Sandbox Code Playgroud)


Dex*_*spi 6

当将Maven与IntelliJ IDE结合使用时,可以-Djavax.xml.accessExternalSchema=all在JVM Options(JVM选项)下为Maven Build Tools Runner配置添加到Maven设置。


小智 6

这适用于 jdk1.8.0_65

wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl
Run Code Online (Sandbox Code Playgroud)


Ash*_*til 5

启用对外部架构的访问

您需要启用IDE和GlassFish Server来访问外部模式以解析Web服务的WSDL文件.要启用访问权限,您需要修改IDE和GlassFish Server的配置文件.有关更多详细信息,请参阅常见问题解答如何使用外部模式解析WSDL?配置IDE

要从Web服务或WSDL文件在IDE中生成Web服务客户端,您需要修改IDE配置文件(netbeans.conf)以将以下开关添加到netbeans_default_options.

-J-Djavax.xml.accessExternalSchema=all
Run Code Online (Sandbox Code Playgroud)

有关查找和修改netbeans.conf配置文件的更多信息,请参阅Netbeans Conf FAQ.配置GlassFish服务器

如果要部署到GlassFish Server,则需要修改GlassFish Server(domain.xml)的配置文件,以使服务器能够访问外部模式以解析wsdl文件并生成测试客户端.要启用对外部模式的访问,请打开GlassFish配置文件(GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml)并添加以下JVM选项元素(以粗体显示).您需要重新启动服务器才能使更改生效.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>
Run Code Online (Sandbox Code Playgroud)