私は自分のプロジェクトで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;行番号:52;列番号:88。 schema_reference:スキーマファイル 'xjc.xsd'の読み取りに失敗しました。accessExternalSchemaプロパティで設定されている制限のために 'file'アクセスが許可されていません。
NetBeansのデフォルトのJavaプラットフォームはJDK 8(Oracleの公式バージョン)なので、netbeans.confファイルを変更してJDK 7(Oracleからも同様)をデフォルトにしても、すべてうまくいきました。だから私は問題がJDK8にあると思います。これが私のJava -version
の出力です。
Javaバージョン「1.8.0」
Java(TM)SEランタイム環境(ビルド1.8.0-b132)
Java HotSpot(TM)64ビットサーバーVM(ビルド25.0-b70、混合モード)
今のところ、私は私のデフォルトのJavaプラットフォームとしてJDK7を保っています。 JDK8を機能させる方法がある場合は、共有してください。
まあ、私は解決策を見つけました。 ( 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
それで全部です。 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 x 64上)でant buildを実行します。インストールされているJREライブラリやAntスクリプト(ビルドにXJCを含む複数のプロジェクトがあります)を変更するのではなく、Eclipse設定の「External Tools Configurations」を変更してAntのVM引数に次のように追加します。ビルド構成:
-Djavax.xml.accessExternalSchema=all
以下は、jdk 1.8.0_66に含まれるwsimport 2.2.9で動作します。
wsimport -J-Djavax.xml.accessExternalSchema=all ....
私の場合は追加:
javax.xml.accessExternalSchema = all
jaxp.propertiesにはうまくいきませんでした。
javax.xml.accessExternalDTD = all
私の環境はlinux mint 17とJava 8 Oracleです。私は同じ問題を抱えている人々への答えとしてそれをそこに置くつもりです。
私はこれをバージョン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>
これは、管理者権限を持たないGradleユーザのためのヒントです。
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"]
}
}
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>
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の場合は、GlassFishのdomain.xml
を修正する必要があります。パス:<path>/glassfish/domains/domain1
またはdomain2/config/domain.xml
)を追加し、<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
の下に<Java-config>
タグを追加します。
....
<Java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </Java-config>
...そしてGlassFishサーバーを再起動します
外部スキーマへのアクセスを有効にする
WebサービスのWSDLファイルを解析するためにIDEとGlassFish Serverが外部スキーマにアクセスできるようにする必要があります。アクセスを可能にするためにはIDEとGlassFish Serverの設定ファイルを修正する必要があります。詳細については、FAQ外部スキーマを使用したWSDLの解析を有効にする方法を参照してください。 IDEの設定
WebサービスまたはWSDLファイルからIDEにWebサービスクライアントを生成するには、IDE設定ファイル(netbeans.conf)を変更して、netbeans_default_optionsに次のスイッチを追加する必要があります。
-J-Djavax.xml.accessExternalSchema=all
Netbeans.conf設定ファイルの場所の特定と変更の詳細については、Netbeans Conf FAQを参照してください。 GlassFishサーバーの設定
GlassFishサーバーに配備する場合は、サーバーが外部スキーマにアクセスしてwsdlファイルを解析し、テストクライアントを生成できるように、GlassFishサーバーの設定ファイル(domain.xml)を変更する必要があります。外部スキーマへのアクセスを有効にするには、GlassFish設定ファイル(GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml)を開き、次のJVMオプション要素(太字)を追加します。変更を有効にするには、サーバーを再起動する必要があります。
</Java-config>
...
<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</Java-config>
IntelliJでMavenを使用する場合IDEあなたは Mavenビルドツールランナー設定のためのJVMオプションでMaven設定に-Djavax.xml.accessExternalSchema=all
を追加することができます
ANTタスクwsimport
を使用している人のために、@ CMFlyによって提案され、 ドキュメントで指定されているように オプションを渡す方法は次のとおりです。
<wsimport
<!-- ... -->
fork="true"
>
<jvmarg value="-Djavax.xml.accessExternalSchema=all"/>
</wsimport>
これはjdk1.8.0_65で動作します
wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl
現在は2.5バージョン(jul/17でリリース)で修正されています。 https://github.com/mojohaus/jaxws-maven-plugin /issues/8 。
2.4.xバージョンでは( https://github.com/mojohaus/jaxws-maven-plugin /issues/4 に記述されているように)回避策があります。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.4.1</version>
<dependencies>
<dependency>
<groupId>com.Sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>2.2.10</version>
</dependency>
</dependencies>
</plugin>
私はこれを通常のmavenプロジェクトで使用し、xjc plugin
を実行するためのこのプラグイン依存関係設定で解決しました。
<plugin>
<!-- Needed to run the plugin xjc en Java 8 or superior -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<id>set-additional-system-properties</id>
<goals>
<goal>set-system-properties</goal>
</goals>
</execution>
</executions>
<configuration>
<properties>
<property>
<name>javax.xml.accessExternalSchema</name>
<value>all</value>
</property>
<property>
<name>javax.xml.accessExternalDTD</name>
<value>all</value>
</property>
</properties>
</configuration>
</plugin>
別の解決策: wiki.netbeans.org
IDEのWebサービスクライアントウィザードは、WebサービスまたはWSDLファイルからWebサービスクライアントを生成するときにWSDLファイルを解析します。 netbeans_default_optionsに次のスイッチを追加するには、IDE構成ファイル(netbeans.conf)を変更する必要があります。変更を有効にするにはIDEを再起動する必要があります。
-J-Djavax.xml.accessExternalSchema=all
GlassFishにデプロイするときは、Webサービス用のテストクライアントを生成するために外部スキーマへのアクセスを有効にする必要があります。アクセスを有効にするには、GlassFishサーバーの設定ファイル(GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml)を変更し、次のJVMオプション要素を追加する必要があります。変更を有効にするには、サーバーを再起動する必要があります。
</Java-config>
...
<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</Java-config>
Antを使用している場合は、Java呼び出しにjvmargを追加できます。
<jvmarg value="-Djavax.xml.accessExternalSchema=all" />
非常に単純な移植可能な解決策は、コードの重要な部分のどこかに次のコード行を配置することです。その一部は、実行されることが確実な部分です(たとえば、メインメソッド内で)。
System.setProperty("javax.xml.accessExternalDTD", "all");
これは必要なシステムプロパティをプログラム的に設定しますが、pom.xmlを慎重に変更する必要はありません(何らかの理由で動作しませんでした)。
別の参考資料:バージョン0.9.0より前のmaven-jaxb2-plugin
を使用している場合は、 この問題に関して で説明されている回避策を使用できます。この場合、この動作はプラグインに影響します。
NetBeansは、JDK 8とこの問題に関するチュートリアルを更新します。
別の方法は、以下を追加してwsimport.shシェルスクリプトを更新することです。
Wsimport.shは次のディレクトリにあります。
jaxws-ri.2.2.28/bin
exec "$ Java" $ WSIMPORT_OPTS -Djavax.xml.accessExternalSchema = all -jar "$ JAXWS_HOME/lib/jaxws-tools.jar" "$ @"
SoapUI (5.4.x)
を使用し、Apache CXF
ツールを使用してJavaコードを生成する場合は、javax.xml.accessExternalSchema = all
をYOUR_JDK/jre/lib/jaxp.properties
ファイルに入れても機能することを試みました。