SchemaLocation musim semi gagal saat tidak ada koneksi internet

107

Saya menggunakan Spring dan application-context.xmlsaya memiliki definisi berikut:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:util="http://www.springframework.org/schema/util"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   http://www.springframework.org/schema/util 
   http://www.springframework.org/schema/util/spring-util-2.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-2.1.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
   http://www.springframework.org/schema/security
   http://www.springframework.org/schema/security/spring-security-2.0.xsd"
   >

.....

Ketika koneksi internet saya terputus, saya tidak dapat menjalankan aplikasi saya melalui tomcat atau jetty.

Memberikan:

[main] WARN  org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Ignored XML validation warning
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document '/spring-beans-2.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:96)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:380)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:2541)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaWarning(XSDHandler.java:2532)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:1836)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:531)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:552)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2408)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1753)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:685)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:441)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:383)
    at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)
    at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:483)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:678)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:553)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:523)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:332)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:181)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:356)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
2009-11-13 15:31:25,675 [main] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 23 in XML document from class path resource [application-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinit........

Ada saran bagaimana memperbaikinya?

Altug
sumber

Jawaban:

115

Tidak perlu menggunakan protokol classpath: di URL schemaLocation Anda jika namespace dikonfigurasi dengan benar dan file XSD ada di classpath Anda.

Spring doc " Mendaftarkan penangan dan skema " menunjukkan bagaimana hal itu harus dilakukan.

Dalam kasus Anda, masalahnya mungkin stoples konteks pegas di jalur kelas Anda bukan 2.1. Itulah mengapa mengubah protokol ke classpath: dan menempatkan 2.1 XSD tertentu di classpath Anda memperbaiki masalah.

Dari apa yang saya lihat, ada 2 skema yang ditentukan untuk XSD utama yang terdapat dalam botol pegas *. Sekali untuk menyelesaikan URL skema dengan versi dan sekali tanpa itu.

Sebagai contoh, lihat bagian konten spring.schemas ini di spring-context-3.0.5.RELEASE.jar:

http\://www.springframework.org/schema/context/spring-context-2.5.xsd=org/springframework/context/config/spring-context-2.5.xsd
http\://www.springframework.org/schema/context/spring-context-3.0.xsd=org/springframework/context/config/spring-context-3.0.xsd
http\://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-3.0.xsd

Artinya (dalam xsi: schemaLocation)

http://www.springframework.org/schema/context/spring-context-2.5.xsd 

akan divalidasi terhadap

org/springframework/context/config/spring-context-2.5.xsd 

di jalur kelas.

http://www.springframework.org/schema/context/spring-context-3.0.xsd 

atau

http://www.springframework.org/schema/context/spring-context.xsd

akan divalidasi terhadap

org/springframework/context/config/spring-context-3.0.xsd 

di jalur kelas.

http://www.springframework.org/schema/context/spring-context-2.1.xsd

tidak ditentukan sehingga Spring akan mencarinya menggunakan URL literal yang ditentukan di schemaLocation.

David Resnick
sumber
37
Bagi mereka yang membutuhkan ringkasan: Spring tidak dapat menemukan skema di classpath. JAR inti Spring memiliki skema-> pemetaan nama file yang disertakan dalam JAR. Jika tidak dapat menyelesaikannya, ini akan masuk ke web.
Alex
Saya telah menyatakannya seperti ini "http:////www.springframework.org/schema/context http: ///www.springframework.org/schema/context/spring-context-4.0.xsd". Saya memiliki jar 4.0 di Glassfish / domain / domain1 / lib. Setiap kali saya menerapkan proyek, glassfish mengacu pada internet. Apakah masalah ini khusus untuk glassfish-4.0? (menambahkan lebih banyak '/ untuk pemformatan)
Pragalathan M
Saya pikir tautan baru "Mendaftarkan penangan dan skema" harus ada di sini: docs.spring.io/spring/docs/current/spring-framework-reference/…
Dirk
1
@ Dirk - tautan itu tampaknya rusak
Stormcloud
2
@Stormcloud, ya, tautan asli tampaknya kembali dan yang saya sarankan rusak. Berikut tautan dokumen terbaru: docs.spring.io/spring/docs/current/spring-framework-reference/…
Dirk
28

Saya menyelesaikannya

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-2.0.xsd
       http://www.springframework.org/schema/context
       classpath:spring-context-2.1.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-2.0.xsd"
       >

classpath:spring-context-2.1.xsdadalah kunci untuk bekerja dalam mode offline (tidak ada koneksi internet). Juga saya menyalin di spring-context-2.1.xsddekat (direktori yang sama) file application-context.xml

Altug
sumber
6
Untuk pengguna intellij yang mungkin mengalami ini. Ini berfungsi meskipun intellij tidak mengenali sintaks classpath di dalam schemalLocation dan menyorotnya sebagai kesalahan.
Upgradingdave
Terima kasih banyak @DaveParoulek - kesalahan itu membuat saya marah, tetapi ini benar-benar berhasil.
Zach Johnson
18

Sesuatu seperti ini berhasil untuk saya.

xsi:schemaLocation=
"http://www.springframework.org/schema/beans 
             classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
             classpath:org/springframework/beans/factory/xml/spring-context-3.0.xsd"
seperti dewa
sumber
1
Ya, ini berfungsi karena xsd dikemas di dalam tabung pegas. Jadi tidak perlu memeriksa springframework.com ketika Anda dapat menggunakan xsd di dalam toples :)
Somaiah Kumbera
Solusi ini bekerja untuk saya karena saya memiliki ketergantungan musim semi di dalam toples yang saya maksud sebagai toples eksternal dan tanpa internet gagal solusi Anda bekerja dengan sangat baik untuk saya terima kasih banyak, tuhan memberkati.
chiperortiz
@godlikeNoob Saya mencoba ini tetapi kesalahan memberi lagi "cvc-elt.1: Tidak dapat menemukan deklarasi elemen 'kacang'."
Kamini
6

Jika ada yang datang ke sini melalui root yang sama dengan yang saya lakukan - saya mengalami masalah ini karena saya sedang membangun satu JAR dengan semua dependensi, termasuk Spring JAR. Akibatnya file spring.schemas di beberapa META-INF direktori pada Spring JAR telah ditimpa.

Saya menemukan solusi yang disarankan di sini: Bagaimana cara membuat jar yang dapat dieksekusi berbasis pegas dengan maven?

Ed.
sumber
5

Mengalami masalah serupa hari ini. Dalam kasus saya, itu adalah plugin shade yang menjadi penyebabnya, selain springframework.org mengalami gangguan. Cuplikan berikut menyelesaikan semuanya:

<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
   <resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
    <resource>META-INF/spring.handlers</resource>
</transformer>

HTH seseorang

zackurey
sumber
di mana cuplikan di atas perlu ditambahkan?
Kamini
4

Anda harus memeriksa bahwa file spring.handlersdan spring.schemasada di classpath dan memiliki konten yang benar.

Ini bisa dilakukan dengan ClassLoader.getResource(..). Anda dapat menjalankan metode dengan debugger jarak jauh di lingkungan waktu proses. Setup authoring XML yang dapat diperluas dijelaskan di Spring Reference B.5. Mendaftarkan penangan dan skema .

Biasanya, file harus berada di jar pegas (springframework.jar / META-INF /) dan di jalur kelas saat Spring dapat dimulai.

Thomas Jung
sumber
1
hai, solusi Anda sangat kompleks; aku tidak mengerti maksudmu jroller.com/marshbourdon/entry/using_spring_2_x_xml , saya mencoba ini tetapi tidak berhasil. Ada saran? Tidaklah rumit untuk menjalankan aplikasi web saat tidak ada koneksi internet. Apakah saya benar ? Terima kasih.
Altug
1
Musim semi harus bekerja di luar kotak. Ada yang salah dengan jalur kelas Anda. Jawaban saya hanya berisi beberapa petunjuk untuk menganalisis masalah Anda.
Thomas Jung
2

Temukan jalur kelas

Jika Anda menggunakan eclipse klik pada file jar yang sesuai. Goto -> META-INF-> buka file spring.schemas

Anda akan melihat garis seperti di bawah ini.

http://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-3.1.xsd

salin setelah = dan konfigurasikan kacang seperti di bawah ini.

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/rabbit classpath:org/springframework/amqp/rabbit/config/spring-rabbit-1.1.xsd http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.1.xsd http://www.springframework.org/schema/context classpath:org/springframework/context/config/spring-context-3.1.xsd http://www.springframework.org/schema/util classpath:org/springframework/beans/factory/xml/spring-util-3.1.xsd">

Santhosh Hirekerur
sumber
Saya membuat perubahan ini di classpath xml springframework.org/schema/rabbit : org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd tetapi dikatakan Gagal membaca classpath dokumen skema ': org / springframework / amqp / kelinci / config / spring-rabbit-1.6.xsd '? ada saran
Lalit Mehra
1

Anda perlu menambahkan lokasi skema ke definisi kacang Anda, dan kemudian lokasi tersebut dapat ditemukan di classpath daripada diambil melalui internet. Mengingat masalah pemformatan Anda, saya tidak 100% yakin bahwa Anda belum melakukan ini.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- empty: the beans we use are in the base class's context. -->
</beans>
bmargulies
sumber
1

Kami memecahkan masalah dengan melakukan ini:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false); // This avoid to search schema online
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", "TransactionMessage_v1.0.xsd");

Harap dicatat bahwa aplikasi kami adalah aplikasi offline mandiri Java.

jyz
sumber
1

Jika Anda menggunakan eclipse untuk pengembangan Anda, ada baiknya jika Anda menginstal plugin STS untuk Eclipse [dari marketPlace untuk versi eclipse tertentu.

Sekarang Ketika Anda mencoba untuk membuat file konfigurasi baru dalam sebuah folder (biasanya sumber daya) di dalam proyek, opsi akan memiliki "Folder Musim Semi" dan Anda dapat memilih opsi "File Definisi Musim Semi Bean" Spring> Spring Bean Configuation File.

Dengan memilih opsi ini, saat Anda mengikuti langkah-langkahnya, ia meminta Anda untuk memilih ruang nama dan versi tertentu:

Sehingga kemungkinan memiliki toples yang tidak ada atau versi lama dapat dihilangkan.

Akan memposting gambar juga, tetapi reputasi saya cukup rendah .. :(

Roshan Khandelwal
sumber
1

Masalahnya terletak pada file JAR yang Anda gunakan dalam aplikasi Anda.

Apa yang saya lakukan, yang berhasil, adalah masuk ke dalam JAR untuk SPRING-CORE, SPRING-BEANS, SPRING-CONTEXT, SPRING-TX yang sesuai dengan versi yang saya gunakan. Di dalam folder META-INF, saya menggabungkan semua spring.handlers dan spring.schemas yang ada di JAR tersebut.

Saya membunuh dua burung dengan satu batu, saya memecahkan masalah skema sehingga ini juga berfungsi dengan benar dalam mode offline.

PS Saya mencoba plugin maven untuk SHADE dan transformer tetapi itu tidak berhasil.

Jose Luis Mendez
sumber
Bagaimana Anda memecahkan masalah ini, dapatkah Anda membantu saya untuk memahaminya. Saya sedang membutuhkan
Kamini
1

Saya punya masalah ini. Untuk anak cucu, pengecualian saya adalah:

org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 117;
schema_reference.4: Failed to read schema document
'http://www.springframework.org/schema/beans/spring-beans-4.2.xsd'

Saya menyelesaikannya ketika saya menyadari versi yang spring-beansditentukan di Maven saya pom.xmladalah 4.1.x, dengan demikian berarti spesifik.xsd tidak dapat ditemukan di jalur kelas.

Ini sudah lama ditutup karena saya biasanya online, jadi saya pikir offline telah "merusak" buildnya. Tapi itu benar-benar tidak ada hubungannya dengan itu. Memperbarui saya pom.xmluntuk menentukan versi yang benar spring-beans, yaitu 4.2.x, memperbaikinya.

Stewart
sumber
1

Saya mengalami masalah yang sama saat menggunakan versi konteks pegas 4.0.6 dan keamanan pegas versi 4.1.0.

Saat mengubah versi keamanan pegas ke 4.0.4 (karena 4.0.6 keamanan pegas tidak tersedia) di pom saya dan keamanan xml -> schemaLocation, ia akan dikompilasi tanpa internet.

Jadi itu berarti Anda juga bisa menyelesaikannya dengan:

  • mengubah keamanan pegas ke versi yang lebih lama atau sama dari konteks pegas.

  • mengubah konteks pegas ke versi yang lebih baru atau sama dengan keamanan pegas.

(dengan cara apa pun konteks pegas menjadi lebih baru atau versi yang sama dengan keamanan pegas)

Yasitha Bandara
sumber
0

Saya ingin menambahkan beberapa aspek tambahan dari diskusi ini. Di OS windows saya telah mengamati bahwa ketika file jar yang berisi skema disimpan dalam direktori yang jalurnya berisi karakter spasi, misalnya seperti pada contoh berikut

"c:\Program Files\myApp\spring-beans-4.0.2.RELEASE.jar"

maka menentukan URL lokasi skema dengan cara berikut tidak cukup saat Anda mengembangkan beberapa aplikasi mandiri yang juga berfungsi secara offline

<beans
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans org/springframework/beans/factory/xml/spring-beans-2.0.xsd"
    />

Saya telah belajar bahwa hasil dari resolusi URL lokasi skema tersebut adalah file yang memiliki jalur seperti berikut

"c:\Program%20Files\myApp\spring-beans-4.0.2.RELEASE.jar"

Ketika saya memulai aplikasi saya dari beberapa direktori lain yang tidak berisi karakter spasi di jalurnya, resolusi lokasi skema berfungsi dengan baik. Mungkin seseorang menghadapi masalah serupa? Namun demikian saya menemukan bahwa protokol classpath berfungsi dengan baik dalam kasus saya

<beans
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-2.0.xsd"
    />
Damiano
sumber
0

Saya juga mengalami masalah serupa ini. Dalam kasus saya, resolusi saya sangat berbeda. Ini file xml konteks pegas saya:

...
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">
...

Saya tidak menentukan versi xsd apa pun karena saya ingin spring menggunakan versi xsd terbaru di dalam dependensi spring. Versi pegas yang digunakan aplikasi saya adalah spring-beans-4.3.1.RELEASE.jar: 4.3.1.RELEASE dan ketika saya memasang aplikasi saya ke dalam jar, semua dependensi pegas ada di classpath saya. Namun, saya menerima kesalahan berikut selama permulaan konteks aplikasi musim semi saya:

org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

Setelah beberapa lama memecahkan masalah, saya menemukan masalahnya disebabkan oleh index.list di dalam folder META-INF dari file jar saya. Dengan file index.list , penangan namespace pegas tidak dapat ditemukan untuk mengurai xml konteks aplikasi pegas dengan benar. Anda dapat membaca lebih lanjut tentang edisi musim semi ini SPR-5705

Dengan menghapus pengindeksan dari maven-jar-plugin saya, saya berhasil menyelesaikan masalah. Semoga ini akan menghemat waktu bagi orang yang memiliki masalah yang sama.

Andy Ng
sumber
0

Pastikan saja file spring jar yang relevan ada di classpath waktu proses Anda. Dalam kasus saya ini, kami kehilangan spring-tx-4.3.4.RELEASE.jar dari runtime classpath. Setelah menambahkan toples ini, masalahnya teratasi.

Hari
sumber
0

Jika tidak ada koneksi internet di platform Anda dan Anda menggunakan Eclipse, ikuti langkah-langkah ini (ini menyelesaikan masalah saya)

  1. Temukan file xsd yang tepat (Anda dapat mengekstrak file ini dari toplesnya. Misalnya, spring-beans-xyxsd di spring-beans-xyzRELEASE.jar)
  2. Tambahkan file xsd ini ke Eclipse XML Catalog. (Preferensi-> XML-> Katalog XML, Tambahkan file)
  3. Tambahkan lokasi file ini ke file konfigurasi. (Hati-hati, tulis versi file yang tepat)

Contoh:

xsi: schemaLocation = " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-xyxsd "

gbii
sumber
-1

Hapus toples yang Anda tambahkan baru-baru ini di web-inf -> lib. misalnya toples jstl.

rahul
sumber