سؤال

أحتاج إلى استهلاك خدمة ويب في مشروعي.أستخدم NetBeans لذا قمت بالنقر بزر الماوس الأيمن على مشروعي وحاولت إضافة "Web Service Client" جديد.آخر مرة قمت فيها بالتحقق، كانت هذه هي الطريقة لإنشاء عميل خدمة ويب.لكنه أدى إلى خطأ تأكيد، قائلا:

java.lang.خطأ التأكيد:org.xml.sax.SAXParseException;معرف النظام:jar:file:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd;رقم السطر:52؛رقم العمود:88؛مرجع المخطط:فشل في قراءة مستند المخطط 'xjc.xsd"، لأن الوصول إلى "الملف" غير مسموح به بسبب القيود التي حددها ملف accessExternalSchema ملكية.

كان نظام Java الأساسي الافتراضي لـ NetBeans هو JDK8 (الإصدار الرسمي من Oracle)، لذا عندما قمت بتغيير ملف netbeans.conf الخاص بي وجعلت JDK7 (من Oracle أيضًا) كنظام افتراضي، سار كل شيء على ما يرام.لذلك أعتقد أن المشكلة تكمن في JDK8.هنا أنا java -version انتاج:

نسخة جافا "1.8.0"
بيئة تشغيل Java(TM) SE (النسخة 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server 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

هذا كل شئ.استمتع بـ JDK 8.

نصائح أخرى

ليس إجابة فعلية ولكن أكثر كمرجع.

إذا كنت تستخدم البرنامج المساعد Jaxws Maven Plugin وتحصل على نفس رسالة الخطأ، فأضف الخاصية المذكورة إلى تكوين البرنامج المساعد:

giveacodicetagpre.

قمت بتشغيل النمل بناء داخل Eclipse IDE (4.4، Luna، على Windows 7 X64).بدلا من تعديل إعداد JRE Lib المثبت أو أي نصوص نملة (لدي مشاريع متعددة تتضمن XJC في مبانيها)، أفضل تغيير إعدادات Eclipse "تكوينات الأدوات الخارجية" وإضافة ما يلي إلى وسيطات VM لتكوين بناء النمل: giveacodicetagpre.

الأعمال التالية ل WSIMPORT 2.2.9 المضمنة في JDK 1.8.0_66:

giveacodicetagpre.

في حالتي الإضافة:

giveacodicetagpre.

إلى Jaxp.Properties لم ينجح، يجب أن أضيف:

giveacodicetagpre.

بيئتي هي Linux Mint 17 و Java 8 Oracle. سأضعها هناك كإجابة للأشخاص الذين لديهم نفس المشكلة.

اختبرت هذا للإصدار 2.4 من Artifact Org.codehaus.mojo وهذا يعمل ~

giveacodicetagpre.

هنا هو تلميح تلميح لمستخدمي المتدرج دون حقوق المسؤول: أضف هذا السطر إلى مهمة Jaxb الخاصة بك:

giveacodicetagpre.

سوف تبدو مثل هذا:

giveacodicetagpre.

إذا كنت تحصل على هذه المشكلة عند تحويل WSDL إلى Jave مع CXF-CodeGen-Plugin ، ثم يمكنك حلها عن طريق تكوين البرنامج المساعد للشوكة وتوفير الإضافي "-djavax.xml.accessernalschema= All" JVMالخيار.

giveacodicetagpre.

كنت أتلقى أيضًا نوعًا مشابهًا من الخطأ في Eclipse أثناء اختبار برنامج خدمة الويب على خادم الويب 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.

لقد أضفت javax.xml.accessExternalSchema = All في jaxp.properties, ، ولكن لا يعمل بالنسبة لي.

ومع ذلك وجدت الحل هنا أدناه والذي يناسبني:بالنسبة لخادم 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

عند استخدام Maven مع Intellij IDE، يمكنك إضافة GransoSodicetagCode إلى إعداد Maven تحت خيارات JVM ل أدوات بناء Maven Build تكوين عداء

تمكين الوصول إلى المخطط الخارجي

تحتاج إلى تمكين IDE وخادم Glassfish للوصول إلى مخطط خارجي لتحليل ملف WSDL لخدمة الويب. لتمكين الوصول الذي تحتاج إلى تعديل ملفات التكوين من IDE وخادم Glassfish. لمزيد من التفاصيل، راجع الأسئلة الشائعة كيفية تمكين تحليل WSDL مع مخطط خارجي؟ تكوين IDE

لتوليد عميل خدمة ويب في IDE من خدمة ويب أو ملف WSDL، تحتاج إلى تعديل ملف تكوين IDE (NetBeans.conf) لإضافة التبديل التالي إلى NetBeans_Default_Options.

giveacodicetagpre.

لمزيد من المعلومات حول تحديد موقع وتعديل ملف تكوين NetBeans.conf، انظر Netbeans Conf Faq. تكوين خادم Glassfish

إذا كنت تنشر على خادم Glassfish، فأنت بحاجة إلى تعديل ملف التكوين الخاص بخادم Glassfish (domain.xml) لتمكين الخادم من الوصول إلى مخططات خارجية لتحليل ملف WSDL وإنشاء عميل الاختبار. لتمكين الوصول إلى المخططات الخارجية، افتح ملف تكوين Glassfish (Glassfish_Install / Glassfish / Domains / domain1 / config / domain.xml) وإضافة عنصر خيار JVM التالي (باللون الجريء). ستحتاج إلى إعادة تشغيل الخادم لتطبيق التغيير.

giveacodicetagpre.

بالنسبة لأولئك الذين يستخدمون مهمة المهمة النمل، وسيلة لمرور الخيار كما اقترح CMMFLY وتحديدها في الوثائق هو ما يلي:

giveacodicetagpre.

انا استخدمتها مع العادية مخضرم المشروع و حصلت لها حل مع هذا البرنامج المساعد التبعية تكوين تشغيل 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

giveacodicetagpre.

تم إصلاحه الآن في إصدار 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 ):

giveacodicetagpre.

حل آخر لمعالجة: wiki.netbeans.org

معالج عميل خدمة الويب في IDE بتعيين ملف WSDL عند إنشاء عميل خدمة ويب من ملف ويب أو ملف WSDL.تحتاج إلى تعديل ملف تكوين IDE (NetBeans.conf) لإضافة التبديل التالي إلى NetBeans_Default_Options.ستحتاج إلى إعادة تشغيل IDE لتغيير نافذة المفعول.

giveacodicetagpre.

عند النشر إلى Glassfish تحتاج إلى تمكين الوصول إلى المخطط الخارجي لتوليد عميل اختبار لخدمة ويب.لتمكين الوصول إلى ما تحتاج إلى تعديل ملف التكوين لخادم Glassfish (Glassfish_install / Glassfish / Domains / domain1 / config / domain.xml) وإضافة عنصر خيار JVM التالي.ستحتاج إلى إعادة تشغيل الخادم لتطبيق التغيير.

giveacodicetagpre.

إذا كنت تستخدم Ant، فيمكنك إضافة JVMARG إلى مكالمات Java الخاصة بك:

giveacodicetagpre.

حل محمول بسيط للغاية سيكون، لوضع سطر التعليمات البرمجية التالي في مكان أساسي في جزء أساسي من التعليمات البرمجية، وهو جزء منه متأكد منه أنه سيتم تشغيله (على سبيل المثال مباشرة في الطريقة الرئيسية): giveacodicetagpre.

هذا يحدد خاصية النظام المطلوبة برمجيا، دون الحاجة إلى إجراء تغييرات صعبة Maven Pom.xml (التي لا تعمل لسبب ما بالنسبة لي).

لقد حاولت ذلك للتو إذا كنت تستخدم SoapUI (5.4.x) والاستخدام Apache CXF أداة لتوليد كود جافا، وضع javax.xml.accessExternalSchema = all في YOUR_JDK/jre/lib/jaxp.properties يعمل الملف أيضا .

بديل آخر هو تحديث البرنامج النصي WSimport.sh Shell من خلال إضافة ما يلي:

يقع wsimport.sh في هذا الدليل:

jaxws-ri.2.28 / bin

exec "$ java" $ wsimport_opts -djavax.xml.accessexternalschema= all -jar "$ jaxws_home / lib / jaxws-tools.jar" $ @ "

مرجع آخر:إذا كنت تستخدم maven-jaxb2-plugin, ، قبل الإصدار 0.9.0، يمكنك استخدام الحل البديل الموضح بشأن هذه المسألة, ، حيث أثر هذا السلوك على المكون الإضافي.

netbeans تحديث البرنامج التعليمي الخاص بهم ل JDK8 وهذه المشكلة:

href="https://netbeans.org/kb/docs/websvc/jax-ws.html#extschema" rel="nofollow"> بدء تشغيل مع خدمات الويب JAX-WS -> تمكين الوصول إلى الخارجمخطط

قم بإنشاء ملف باسم jaxp.properties (إذا لم يكن موجودًا) ضمن المسار إلى "JDK version/jre/lib" ثم أضف هذا السطر فيه:

javax.xml.accessExternalSchema = all
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top