web-dev-qa-db-ja.com

JDK 8でのWebサービスクライアント生成エラー

私は自分のプロジェクトで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を機能させる方法がある場合は、共有してください。

207
Abdullah Battal

まあ、私は解決策を見つけました。 ( 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をお楽しみください。

369
Abdullah Battal

実際の答えではなく、参考までに。

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>
111
jassuncao

私はEclipse IDE(4.4、Luna、Windows 7 x 64上)でant buildを実行します。インストールされているJREライブラリやAntスクリプト(ビルドにXJCを含む複数のプロジェクトがあります)を変更するのではなく、Eclipse設定の「External Tools Configurations」を変更してAntのVM引数に次のように追加します。ビルド構成:

-Djavax.xml.accessExternalSchema=all
33
gb96

以下は、jdk 1.8.0_66に含まれるwsimport 2.2.9で動作します。

wsimport -J-Djavax.xml.accessExternalSchema=all ....
23
tanderson

私の場合は追加:

javax.xml.accessExternalSchema = all

jaxp.propertiesにはうまくいきませんでした。

javax.xml.accessExternalDTD = all

私の環境はlinux mint 17とJava 8 Oracleです。私は同じ問題を抱えている人々への答えとしてそれをそこに置くつもりです。

15
moretti.fabio

私はこれをバージョン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>
15
Mehdi

これは、管理者権限を持たない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"]
    }
}
14
Java_Waldi

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>
11
pjklauser

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の場合は、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サーバーを再起動します

10
Debashish

外部スキーマへのアクセスを有効にする

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>
5
Ashwin Patil
5
Dexter Legaspi

ANTタスクwsimportを使用している人のために、@ CMFlyによって提案され、 ドキュメントで指定されているように オプションを渡す方法は次のとおりです。

<wsimport
   <!-- ... -->
   fork="true"
  >
  <jvmarg value="-Djavax.xml.accessExternalSchema=all"/>
</wsimport>
4

これはjdk1.8.0_65で動作します

wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl
3
Stephen

現在は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>
3
DGardim

私はこれを通常の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>
2
EliuX

別の解決策: 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>
2

Antを使用している場合は、Java呼び出しにjvmargを追加できます。

<jvmarg value="-Djavax.xml.accessExternalSchema=all" />
1
CMfly

非常に単純な移​​植可能な解決策は、コードの重要な部分のどこかに次のコード行を配置することです。その一部は、実行されることが確実な部分です(たとえば、メインメソッド内で)。

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

これは必要なシステムプロパティをプログラム的に設定しますが、pom.xmlを慎重に変更する必要はありません(何らかの理由で動作しませんでした)。

1
R Hoekstra

別の参考資料:バージョン0.9.0より前のmaven-jaxb2-pluginを使用している場合は、 この問題に関して で説明されている回避策を使用できます。この場合、この動作はプラグインに影響します。

0
Niel de Wet

NetBeansは、JDK 8とこの問題に関するチュートリアルを更新します。

JAX-WS Webサービス入門 - >外部スキーマへのアクセスの有効化

0
user3158918

別の方法は、以下を追加して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" "$ @"

0
Percy Williams

SoapUI (5.4.x)を使用し、Apache CXFツールを使用してJavaコードを生成する場合は、javax.xml.accessExternalSchema = allYOUR_JDK/jre/lib/jaxp.propertiesファイルに入れても機能することを試みました。

0
TGU