Saya perlu mengkonsumsi layanan web di proyek saya. Saya menggunakan NetBeans sehingga saya mengklik kanan pada proyek saya dan mencoba menambahkan "Klien Layanan Web" baru. Terakhir kali saya memeriksa, ini adalah cara untuk membuat klien layanan web. Tapi itu menghasilkan AssertionError, mengatakan:
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: Gagal membaca dokumen skema ' xjc.xsd ', karena akses 'file' tidak diperbolehkan karena pembatasan yang ditetapkan oleh properti accessExternalSchema .
Platform Java default untuk NetBeans adalah JDK8 (versi resmi Oracle), jadi ketika saya mengubah file netbeans.conf saya dan menjadikan JDK7 (dari Oracle, juga) sebagai default saya, semuanya bekerja dengan baik. Jadi saya pikir masalahnya adalah dengan JDK8. Ini java -version
output saya :
versi java "1.8.0"
Java (TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot (TM) 64-Bit Server VM (build 25.0-b70, mode campuran)
Untuk saat ini, saya menjaga JDK7 sebagai platform Java default saya. Jika ada cara untuk membuat JDK8 berfungsi, silakan bagikan.
Jawaban:
Saya menemukan solusinya. (berdasarkan http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA )
Buat file bernama
jaxp.properties
(jika tidak ada) di bawah/path/to/jdk1.8.0/jre/lib
dan kemudian tulis baris ini di dalamnya:Itu saja. Nikmati JDK 8.
sumber
/path/to/jdk1.8.0/lib
tidak di bawahjre
direktori lebih lanjut .Bukan jawaban yang sebenarnya tetapi lebih sebagai referensi.
Jika Anda menggunakan plugin jaxws Maven dan Anda mendapatkan pesan kesalahan yang sama, tambahkan properti yang disebutkan ke konfigurasi plugin:
sumber
accessExternalSchema=all
nilai diatur secara default jika Anda menggunakan versi (seperti 0.12.3) dariorg.jvnet.jaxb2.maven2:maven-jaxb2-plugin
Plugin.Saya menjalankan build semut dalam Eclipse IDE (4.4, Luna, pada Windows 7 x64). Daripada memodifikasi lib JRE yang diinstal atau skrip semut apa pun (Saya memiliki beberapa proyek yang menyertakan XJC dalam pembuatannya), saya lebih suka mengubah Pengaturan Eclipse "Konfigurasi Alat Eksternal" dan menambahkan yang berikut ke argumen VM untuk konfigurasi pembangunan Ant:
sumber
Karya-karya berikut untuk wsimport 2.2.9 termasuk dalam jdk 1.8.0_66:
sumber
wsimport
secara langsung.Dalam kasus saya menambahkan:
ke jaxp.properties tidak berfungsi, saya harus menambahkan:
Lingkungan saya adalah linux mint 17 dan java 8 oracle. Saya akan meletakkannya di sana sebagai jawaban untuk orang-orang dengan masalah yang sama.
sumber
Saya menguji ini untuk versi 2.4 dari artifact org.codehaus.mojo dan itu berhasil ~
sumber
-Djavax.xml.accessExternalSchema=all
yang dikonfigurasi dalam deklarasi plugin Anda. Hal ini dibahas dalam Netbeans Bug 244891Berikut adalah petunjuk untuk pengguna gradle tanpa hak admin: tambahkan baris ini ke tugas-jaxb Anda:
akan terlihat seperti ini:
sumber
Jika Anda mendapatkan masalah ini saat mengonversi wsdl untuk bergabung dengan cxf-codegen-plugin , maka Anda dapat menyelesaikannya dengan mengkonfigurasi plugin ke fork dan memberikan opsi "-Djavax.xml.accessExternalSchema = all" JVM tambahan.
sumber
Saya juga mendapatkan jenis kesalahan yang serupa di Eclipse selama pengujian program layanan web di server web glassfish 4.0:
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.
Saya telah menambahkan
javax.xml.accessExternalSchema = All
dijaxp.properties
, tapi pekerjaan tidak mencerminkan bagi saya.Namun saya menemukan solusi di sini di bawah ini yang berfungsi untuk saya: Untuk GlassFish Server, saya perlu memodifikasi
domain.xml
GlassFish, path:<path>/glassfish/domains/domain1
ataudomain2/config/domain.xml
) dan menambahkan, di<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
bawah<java-config>
tag<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config>
... dan kemudian restart server GlassFishsumber
Mengaktifkan Akses ke Skema Eksternal
Anda perlu mengaktifkan IDE dan GlassFish Server untuk mengakses skema eksternal untuk mem-parsing file WSDL dari layanan web. Untuk mengaktifkan akses Anda perlu memodifikasi file-file konfigurasi IDE dan GlassFish Server. Untuk detail lebih lanjut, lihat FAQ Cara mengaktifkan parsing WSDL dengan skema eksternal? Mengkonfigurasi IDE
Untuk menghasilkan klien layanan web di IDE dari layanan web atau file WSDL Anda perlu memodifikasi file konfigurasi IDE (netbeans.conf) untuk menambahkan switch berikut ke netbeans_default_options.
Untuk lebih lanjut tentang mencari dan memodifikasi file konfigurasi netbeans.conf, lihat FAQ Konfederasi Netbeans. Mengkonfigurasi Server GlassFish
Jika Anda menggunakan Server GlassFish Anda perlu memodifikasi file konfigurasi Server GlassFish (domain.xml) untuk memungkinkan server mengakses skema eksternal untuk mem-parsing file wsdl dan menghasilkan klien uji. Untuk mengaktifkan akses ke skema eksternal, buka file konfigurasi GlassFish (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) dan tambahkan elemen opsi JVM berikut (dicetak tebal). Anda harus memulai ulang server agar perubahan diterapkan.
sumber
Saat menggunakan Maven dengan IntelliJ IDE, Anda dapat menambahkan
-Djavax.xml.accessExternalSchema=all
ke pengaturan Maven di bawah Opsi JVM untuk konfigurasi Runner Runner Maven Build Toolssumber
Ini berfungsi pada jdk1.8.0_65
sumber
Bagi mereka yang menggunakan tugas ANT
wsimport
, cara meneruskan opsi seperti yang disarankan oleh @CMFly dan ditentukan dalam dokumentasi adalah sebagai berikut:sumber
Sekarang diperbaiki dalam versi 2.5 (dirilis pada jul / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .
Untuk versi 2.4.x ada solusi (seperti yang dijelaskan dalam https://github.com/mojohaus/jaxws-maven-plugin/issues/4 ):
sumber
Saya menggunakannya dengan proyek pakar reguler , dan menyelesaikannya dengan konfigurasi dependensi plugin ini untuk menjalankan
xjc plugin
:sumber
jaxws-maven-plugin
ke 2.5 sebagaimana ditentukan dalam jawaban orang lain mojohaus.org/jaxws-maven-plugin/usage.html Tapi tetap saja, jawaban terbaik dalam kasus saya, terima kasih!Buat file bernama
jaxp.properties
(jika tidak ada) di bawah path ke "JDK versi / jre / lib" dan kemudian tambahkan baris ini di dalamnya:sumber
Solusi lain untuk mengatasi: wiki.netbeans.org
Wisaya Klien Layanan Web di IDE mem-parsing file WSDL saat membuat klien layanan web dari layanan web atau file WSDL. Anda perlu memodifikasi file konfigurasi IDE (netbeans.conf) untuk menambahkan saklar berikut ke netbeans_default_options. Anda harus memulai ulang IDE agar perubahan diterapkan.
Ketika menyebarkan ke GlassFish Anda perlu mengaktifkan akses ke skema eksternal untuk menghasilkan klien uji untuk layanan web. Untuk mengaktifkan akses Anda perlu memodifikasi file konfigurasi GlassFish Server (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) dan tambahkan elemen opsi JVM berikut. Anda harus memulai ulang server agar perubahan diterapkan.
sumber
Jika Anda menggunakan semut, Anda dapat menambahkan jvmarg ke panggilan java Anda:
sumber
Solusi portabel yang sangat sederhana adalah, untuk menempatkan baris kode berikut di suatu tempat di bagian penting dari kode Anda, bagian di mana Anda yakin itu akan dijalankan (misalnya tepat di metode utama):
Ini menetapkan properti sistem yang diperlukan secara program, tanpa harus melakukan perubahan maven pom.xml yang rumit (yang karena beberapa alasan tidak berhasil bagi saya).
sumber
Saya baru saja mencoba bahwa jika Anda menggunakan
SoapUI (5.4.x)
dan menggunakanApache CXF
alat untuk menghasilkan kode java, putjavax.xml.accessExternalSchema = all
diYOUR_JDK/jre/lib/jaxp.properties
berkas juga bekerja.sumber
Alternatif lain adalah memperbarui skrip shell wsimport.sh dengan menambahkan berikut ini:
Wsimport.sh terletak di direktori ini:
jaxws-ri.2.2.28 / bin
exec "$ JAVA" $ WSIMPORT_OPTS -Djavax.xml.accessExternalSchema = all -jar "$ JAXWS_HOME / lib / jaxws-tools.jar" "$ @"
sumber
Referensi lain: Jika Anda menggunakan
maven-jaxb2-plugin
, sebelum versi 0.9.0, Anda dapat menggunakan solusi yang dijelaskan pada masalah ini , di mana perilaku ini mempengaruhi plugin.sumber
NetBeans memperbarui tutorial mereka untuk JDK8 dan Masalah ini:
Memulai dengan Layanan Web JAX-WS -> Mengaktifkan Akses ke Skema Eksternal
sumber