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.
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)
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)
tan*_*son 26
以下适用于jdk 1.8.0_66中包含的wsimport 2.2.9:
wsimport -J-Djavax.xml.accessExternalSchema=all ....
Run Code Online (Sandbox Code Playgroud)
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.我会把它作为解决同样问题的人的答案.
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 = All
的jaxp.properties
,但亘古不变的为我工作.
但是我在下面找到了一个适用于我的解决方案:对于GlassFish Server,我需要在标签下修改domain.xml
GlassFish,路径:<path>/glassfish/domains/domain1
或domain2/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服务器
jaxp.properties
在“JDK version/jre/lib”的路径下创建一个名为(如果它不存在)的文件,然后在其中添加以下行。
javax.xml.accessExternalSchema = all
Run Code Online (Sandbox Code Playgroud)
当将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)
启用对外部架构的访问
您需要启用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)