JDK 8によるWebサービスクライアント生成エラー
-
21-12-2019 - |
質問
プロジェクトでWebサービスを消費する必要があります。私のプロジェクトを右クリックして新しい "Webサービスクライアント"を追加しようとしたので、NetBeansを使用します。最後にチェックしたとき、これはWebサービスクライアントを作成する方法でした。しかし、それはassertionErrorをもたらしました:
java.lang.asterionError:org.xml.sax.saxparseException。 systemid:jar:file:/ path/to/glassfish/modules/jaxb-osgi.jar!/ com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd;リネン数:52; columnnumber:88; schema_reference:スキーマ文書 ' xjc.xsd 'の読み込みに失敗しました。
NetBeans for NetBeansのデフォルトのJavaプラットフォームはJDK8(Oracleのオフィシャルバージョン)であるため、NetBeans.confファイルを変更し、(Oracleから)JDK7を(Oracleから)MADE DEFAULTとしましたが、すべてがうまくいきました。だから私は問題が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作業をする方法がある場合は、共有してください。
解決
まあ、私は解決策を見つけました。( 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
.
他のヒント
実際の回答ではなく、参考としてもっと。
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ビルドを実行します。インストールされているJRE libまたは任意のスクリプトを変更するのではなく(ビルドにXJCを含む複数のプロジェクトがあります)、Eclipse設定 "外部ツール設定"を変更し、Antビルド構成のVM引数に次のものを追加します。/ P>
-Djavax.xml.accessExternalSchema=all
. wsimport 2.2.9の次の作品1.8.0_66:
wsimport -J-Djavax.xml.accessExternalSchema=all ....
. 私の場合に追加:
javax.xml.accessExternalSchema = all
.
JAXP.Propertiesが機能しませんでした、追加する:
javax.xml.accessExternalDTD = all
.
私の環境はLinux Mint 17とJava 8 Oracleです。 私は同じ問題を持つ人々の答えとしてそれを置くつもりです。
Artifact Org.Codehaus.mojoのバージョン2.4でこれをテストし、〜
<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>
. これは管理者権限なしの卒業ユーザ用のヒントヒントです.JaxBタスクにこの行を追加:
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"]
}
}
. wsdlをjaveに変換するときにこの問題を回答している場合は、 cxf-codegen-plugin で、Pluginをフォークに設定し、追加の "-djavax.xml.accessexterSchema= 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サーバー上のWebServiceプログラムのテスト中に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:<path>/glassfish/domains/domain1
またはdomain2/config/domain.xml
)および追加、<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
Under
....
.
<java-config>
.
...そしてGlassFishサーバーを再起動してください
Intellij IDEでMavenを使用する場合は、 Mavenビルドツールランナー構成
IDEとGlassFishサーバーが外部スキーマにアクセスしてWebサービスのWSDLファイルを解析できるようにする必要があります。アクセスを有効にするには、IDEとGlassFishサーバーの設定ファイルを変更する必要があります。詳細については、外部スキーマを使用してWSDLの解析を有効にする方法を参照してください。 IDE
の設定WebサービスまたはWSDLファイルからIDE内のWebサービスクライアントを生成するには、IDE設定ファイル(NetBeans.conf)を変更してNetBeans_Default_Optionsに次のスイッチを追加する必要があります。
-J-Djavax.xml.accessExternalSchema=all
.
NetBeans.conf構成ファイルの位置と変更の詳細については、NetBeans Conf FAQを参照してください。 GlassFish Server
の設定GlassFishサーバーに展開している場合は、GlassFishサーバー(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>
. Antタスクwsimport
を使用しているものは、@cmflyによって推奨されるようにオプションを渡す方法で、ドキュメントは次のとおりです。
<wsimport
<!-- ... -->
fork="true"
>
<jvmarg value="-Djavax.xml.accessExternalSchema=all"/>
</wsimport>
. 私は通常の 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>
. JDK1.8.0_65
で動作します。wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl
. 現在、2.5バージョン(7月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>
.
IDEのWebサービスクライアントウィザードは、WebサービスまたはWSDLファイルからWebサービスクライアントを生成するときにWSDLファイルを解析します。NetBeans_Default_Optionsに次のスイッチを追加するには、IDE設定ファイル(NetBeans.conf)を変更する必要があります。変更を有効にするにはIDEを再起動する必要があります。
-J-Djavax.xml.accessExternalSchema=all
.
GlassFishに展開するときは、外部スキーマへのアクセスを有効にしてWebサービス用のテストクライアントを生成する必要があります。アクセスを有効にするには、GlassFishサーバーの設定ファイル(Glass Fish_install / GlassFish / Domains / domain1 / config / domain.xml)を変更し、次のJVMオプション要素を追加する必要があります。変更を有効にするためにサーバーを再起動する必要があります。
</java-config>
...
<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>
. ANTを使用している場合は、JVMARGをJava呼び出しに追加できます。
<jvmarg value="-Djavax.xml.accessExternalSchema=all" />
. 非常に単純な携帯用ソリューションは、コードの重要な部分のどこかに、次のコードをどこかに配置することです。/ P>
System.setProperty("javax.xml.accessExternalDTD", "all");
.
これは、トリッキーなMaven Pom.xmlの変更を行わなければならない(何らかの理由で私のためにうまくいかなかった)。
SoapUI (5.4.x)
を使用してApache CXF
ツールを使用してJavaコードを生成する場合は、javax.xml.accessExternalSchema = all
ファイルにYOUR_JDK/jre/lib/jaxp.properties
も機能します。
もう1つの代替案は、次のものを追加してwsimport.shシェルスクリプトを更新することです:
wsimport.shはこのディレクトリにあります。
JAXWS-RI.2.2.28 / BIN
exec "$ java" $ wsimport_opts -djavax.xml.AccessExterSchema= all -jar "$ jaxws_home / lib / jaxws-tools.jar" "" "$ @"
NetBeansはJDK8のためのチュートリアルを更新し、この問題:
hrefs.org/kb/docs/websvc/jax-ws.html#extschema" rel="nofollow"> JAX-WS Webサービス入門 - >外部へのアクセスの有効化スキーマ
「jdk version / jre / lib」へのパスの下にあるjaxp.properties
(存在しない場合)を作成してから、この行を追加してください。
javax.xml.accessExternalSchema = all
.