Spring schemaLocation non riesce quando non c'è connessione a Internet


107

Sto usando Spring e in application-context.xmlho le seguenti definizioni:

<?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"
   >

.....

Quando la mia connessione Internet viene persa, non posso eseguire la mia applicazione tramite Tomcat o Jetty.

Dà:

[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........

Qualche suggerimento su come risolverlo?

Risposte:


115

Non è necessario utilizzare il protocollo classpath: nell'URL schemaLocation se lo spazio dei nomi è configurato correttamente e il file XSD si trova nel percorso classe.

Il documento Spring " Registrazione del gestore e dello schema " mostra come dovrebbe essere fatto.

Nel tuo caso, il problema probabilmente era che il jar del contesto primaverile sul tuo classpath non era 2.1. Ecco perché cambiare il protocollo in classpath: e inserire l'XSD 2.1 specifico nel tuo classpath ha risolto il problema.

Da quello che ho visto, ci sono 2 schemi definiti per l'XSD principale contenuto in un barattolo spring- *. Una volta per risolvere l'URL dello schema con la versione e una volta senza di essa.

Come esempio, vedere questa parte dei contenuti di spring.schemas in 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

Ciò significa che (in xsi: schemaLocation)

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

sarà convalidato contro

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

nel classpath.

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

o

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

sarà convalidato contro

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

nel classpath.

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

non è definito, quindi Spring lo cercherà utilizzando l'URL letterale definito in schemaLocation.


37
Per chi ha bisogno di un riepilogo: Spring non riesce a trovare gli schemi nel classpath. Il JAR core di Spring ha una mappatura schema-> nome file inclusa nel JAR. Se non riesce a risolverlo, andrà sul web.
Alex

L'ho dichiarato in questo modo "http:////www.springframework.org/schema/context http: ///www.springframework.org/schema/context/spring-context-4.0.xsd". Ho il barattolo 4.0 in Glassfish / domains / domain1 / lib. Ogni volta che distribuisco il progetto, glassfish si riferisce a Internet. Questo problema è specifico per glassfish-4.0? (aggiunti più '/' per la formattazione)
Pragalathan M

Penso che il nuovo collegamento "Registrazione del gestore e schema" dovrebbe essere qui: docs.spring.io/spring/docs/current/spring-framework-reference/…
Dirk

1
@Dirk - quel collegamento sembra essere interrotto
Stormcloud

2
@Stormcloud, sì, il link originale sembra essere tornato e quello che ho suggerito interrotto. Ecco l'ultimo collegamento al documento: docs.spring.io/spring/docs/current/spring-framework-reference/…
Dirk

28

L'ho risolto

<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.xsdè la chiave per lavorare in modalità offline (nessuna connessione Internet). Inoltre ho copiato spring-context-2.1.xsdvicino (stessa directory) il file application-context.xml


6
Per gli utenti intellij che potrebbero imbattersi in questo. Funziona anche se intellij non riconosce la sintassi del percorso di classe all'interno di schemalLocation e la evidenzia come un errore.
Aggiornamento dal

Un enorme grazie @DaveParoulek - l'errore mi stava buttando fuori ma questo fa assolutamente il trucco.
Zach Johnson

18

Qualcosa del genere ha funzionato per me.

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"

1
Sì, funziona perché xsd è confezionato all'interno del barattolo a molla. Quindi non è necessario controllare su springframework.com quando è possibile utilizzare xsd all'interno del barattolo :)
Somaiah Kumbera

Questa soluzione ha funzionato per me perché avevo le dipendenze primaverili all'interno di un barattolo, intendo come un barattolo esterno e senza internet fallisce la tua soluzione ha funzionato molto bene per me grazie mille a dio benedica.
chiperortiz

@godlikeNoob Ho provato questo ma dà di nuovo l'errore "cvc-elt.1: Impossibile trovare la dichiarazione dell'elemento 'bean'."
Kamini

6

Nel caso qualcuno arrivasse qui tramite la stessa radice che ho fatto io, ho riscontrato questo problema perché stavo costruendo un singolo JAR con tutte le dipendenze, inclusi i JAR Spring. Di conseguenza, il file spring.schemas in alcune directory META-INF dei JAR Spring è stato sovrascritto.

Ho trovato le soluzioni suggerite qui: come creare un jar eseguibile basato su primavera con Maven?


5

Oggi ho riscontrato un problema simile. Nel mio caso, il colpevole è stato il plug-in ombra, oltre a springframework.org che ha avuto un'interruzione. Il seguente frammento ha chiarito le cose:

<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 qualcuno


dove è necessario aggiungere lo snippet di cui sopra?
Kamini

4

È necessario verificare che i file spring.handlerse si spring.schemastrovino nel classpath e abbiano il contenuto corretto.

Questo può essere fatto con ClassLoader.getResource(..). È possibile eseguire il metodo con un debugger remoto nell'ambiente di runtime. La configurazione di authoring XML estensibile è descritta nella Spring Reference B.5. Registrazione del gestore e dello schema .

Normalmente, i file dovrebbero essere nel vaso di primavera (springframework.jar / META-INF /) e sul classpath quando è possibile avviare Spring.


1
ciao, la tua soluzione è molto complessa; non capisco cosa intendi? jroller.com/marshbourdon/entry/using_spring_2_x_xml , l'ho provato ma non funziona. Eventuali suggerimenti ? Non potrebbe essere complesso far funzionare una webapp senza connessione a Internet. ho ragione ? Grazie.
Altug

1
La primavera dovrebbe funzionare fuori dagli schemi. Qualcosa con il tuo classpath non è corretto. La mia risposta conteneva solo alcuni suggerimenti per analizzare il tuo problema.
Thomas Jung,

2

Trova percorso di classe

Se stai usando eclipse, fai clic sul file jar corrispondente. Vai a -> META-INF-> apri il file spring.schemas

vedrai le linee qualcosa di simile sotto.

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

copia dopo = e configura i bean in modo simile sotto.

<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">


Ho apportato questa modifica in xml springframework.org/schema/rabbit classpath: org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd ma dice Impossibile leggere il documento dello schema 'classpath: org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd '? qualsiasi suggerimento
Lalit Mehra

1

È necessario aggiungere posizioni dello schema alla definizione del bean, quindi possono essere trovate in classpath invece che recuperate dalla rete. Dati i tuoi problemi di formattazione, non sono sicuro al 100% che tu non lo stia già facendo.

<?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>

1

Abbiamo risolto il problema facendo questo:

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");

Tieni presente che la nostra applicazione è un'app offline autonoma Java.


1

Se stai usando eclipse per il tuo sviluppo, è utile installare il plugin STS per Eclipse [dal marketPlace per la versione specifica di eclipse.

Ora Quando provi a creare un nuovo file di configurazione in una cartella (normalmente risorse) all'interno del progetto, le opzioni avranno una "Spring Folder" e puoi scegliere un'opzione "Spring Bean Definition File" Spring> Spring Bean Configuation File.

Con questa opzione selezionata, quando segui i passaggi, ti chiede di selezionare gli spazi dei nomi e le versioni specifiche:

E così si può eliminare la possibilità di avere un vaso inesistente o una vecchia versione.

Avrei postato anche delle immagini, ma la mia reputazione è piuttosto bassa .. :(


1

Il problema risiede nei file JAR che utilizzi nella tua applicazione.

Quello che ho fatto, che ha funzionato, è stato entrare nei JAR per SPRING-CORE, SPRING-BEANS, SPRING-CONTESTO, SPRING-TX che corrispondono alla versione che sto utilizzando. All'interno della cartella META-INF, ho concatenato tutti i file spring.handlers e spring.schemas presenti in quei JAR.

Ho preso due piccioni con una fava, ho risolto il problema degli schemi quindi funziona correttamente anche in modalità offline.

PS Ho provato il plug-in Maven per SHADE e trasformatori ma non ha funzionato.


Come hai risolto questo problema, puoi aiutarmi a capirlo per favore. Ho bisogno
Kamini

1

Ho avuto questo problema. Per i posteri, la mia eccezione è stata:

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'

L'ho risolto quando mi sono reso conto che la versione di spring-beansspecificata nel mio Maven pom.xmlera 4.1.x, quindi .xsdnon è stato possibile trovare la specifica sul classpath.

Questo è stato mascherato per molto tempo perché normalmente sono online, quindi pensavo che essere offline avesse "rotto" la build. Ma in realtà non c'entrava niente. L'aggiornamento di my pom.xmlper specificare la versione corretta di spring-beans, vale a dire 4.2.x, risolto.


1

Ho avuto lo stesso problema quando utilizzo la versione 4.0.6 del contesto primaverile e la versione 4.1.0 di Spring-Security.

Quando si cambia la versione di spring-security alla 4.0.4 (perché 4.0.6 di spring-security non è disponibile) nel mio pom e security xml -> schemaLocation, viene compilato senza Internet.

Quindi questo significa che puoi anche risolvere questo problema:

  • cambiare spring-security a una versione precedente o uguale a spring-context.

  • cambiare il contesto della primavera in una versione più recente o uguale a quella della sicurezza.

(in qualsiasi modo spring-context deve essere più recente o la stessa versione di spring-security)


0

Vorrei aggiungere qualche altro aspetto di questa discussione. Nel sistema operativo Windows ho osservato che quando un file jar contenente schema viene memorizzato in una directory il cui percorso contiene un carattere spazio, ad esempio come nell'esempio seguente

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

quindi specificare l'URL della posizione dello schema nel modo seguente non è sufficiente quando si sviluppa un'applicazione standalone che dovrebbe funzionare anche offline

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

Ho appreso che il risultato di tale risoluzione dell'URL della posizione dello schema è un file che ha un percorso come il seguente

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

Quando ho avviato la mia applicazione da un'altra directory che non conteneva caratteri di spazio nel percorso, la risoluzione della posizione dello schema ha funzionato correttamente. Forse qualcuno ha affrontato problemi simili? Tuttavia ho scoperto che il protocollo classpath funziona bene nel mio caso

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

0

Mi ero imbattuto anche in questo problema simile. Nel mio caso, la mia risoluzione è abbastanza diversa. Ecco il mio file xml di contesto primaverile:

...
<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">
...

Non sto specificando alcuna versione di xsd perché voglio che la primavera usi l'ultima versione di xsd all'interno delle dipendenze di primavera. La versione spring usata dalla mia applicazione era spring-bean-4.3.1.RELEASE.jar: 4.3.1.RELEASE e quando assemblo la mia applicazione in jar, tutte le dipendenze spring esistono nel mio classpath. Tuttavia, ho ricevuto il seguente errore durante l'avvio del contesto dell'applicazione primaverile:

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>.

Dopo un po 'di difficoltà nella risoluzione dei problemi, ho scoperto che il problema è dovuto a index.list all'interno della cartella META-INF del mio file jar. Con il file index.list , i gestori dello spazio dei nomi spring non possono essere individuati per analizzare correttamente il contesto dell'applicazione Spring. Puoi leggere di più su questo numero di primavera SPR-5705

Rimuovendo l'indicizzazione dal mio plugin maven-jar , riesco a risolvere il problema. Spero che questo salverà alcune volte per le persone che hanno lo stesso problema.


0

Assicurati solo che il file jar di primavera pertinente sia nel tuo classpath di runtime. Nel mio caso mancava spring-tx-4.3.4.RELEASE.jar dal classpath di runtime. Dopo aver aggiunto questo vaso, il problema è stato risolto.


0

Se non c'è connessione Internet nella tua piattaforma e usi Eclipse, segui questi passaggi (risolve il mio problema)

  1. Trova i file xsd esatti (puoi decomprimere questi file dai loro barattoli. Ad esempio, spring-bean-xyxsd in spring-bean-xyzRELEASE.jar)
  2. Aggiungere questi file xsd al catalogo XML di Eclipse. (Preferenze-> XML-> Catalogo XML, Aggiungi file)
  3. Aggiungi la posizione di questi file al file di configurazione. (Fai attenzione, scrivi la versione esatta del file)

Esempio:

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


-1

Rimuovi i jar che hai aggiunto di recente in web-inf -> lib. per esempio jstl jars.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.