众所周知spring框架是一个非常优秀的轻量级框架工具,我们借助它可以简单的将软件各个部分割裂开以实现较低的耦合度。
那么我们在有些时候强外界发布这些软件时面临着一个选择--是否将spring的相关包一起发布,如果全部一齐发布则可能使原本非常小巧的程式变得非常庞大;
如果不发布则可能使客户端面临程式工作环境配置的复杂程度加大,在这里主要是spring框架的下载、配置和使用。
基于以上情况我们选择一个折衷的办法:将spring工作必须的基本类文件和相关配置文件与我们的程式一起发布出去。在这里的问题就主要是包的选择(类相互的依赖关系)和框架类的一些配置文件的选择使用。
由于我的经历有限,在此我就将我写的一个第三方eclipse插件管理器所面临的一些问题以及获得的经验和大家分享一下。在这里我将用一个简单的spring例子作为替代说明即可。
其中spring框架的加载和配置是通过MyEclipse的插件(MyEclipse-->Project Capabilities-->Add Spring ...-->Spring 2.0 Core ...)实现的。
以下是一个简单的spring使用的程式代码:
最后运行Main类就会显示一些信息:
由于有个log配置文件的问题可能有些程式运行会有警告信息,这个不要紧,不再讨论范畴。
我的解决方案是:
文件命名为log4j.properties然后打包jar并且导入即可。
但是如果将这个工程导出,一般是不携带spring框架类文件的,这时在外部运行Main类就可能出现问题,一般提示是spring相关的类文件无法找到。 我当时就是通过这样一些错误信息一步步补全我的spring基础类文件的,应该有相关的工具但是我没有找到。
在这里我就将我的结果给大家:
*/可能可以再次简化,但是我没有继续进行,如果有兴趣可以继续,这样可以最大限度的简化类文件。
有500多个文件估计大家是不会自己组织的,我把他放在了csdn的资源里面:名字是《 spring core 运行时必要的基础包》
在里面我们可以发现META-INF目录里面有一个spring.schemas文件,那么这个文件有什么作用呢?
在这里体现的作用主要是:标记和识别。
那么他的影响是:就我的测试来看,如果系统是能够访问internet的那么运行这个程式时十分的慢(我估计是程式自动访问因特网去寻找相关的schema了),如果无法访问网络这导致了错误出现。这是相关的运行结果
无法解析xml文件而导致程式无法运行。如果将那个spring.schemas文件放入其中则一上两种情况都没有发生。
目录结构:
/**********************************************
.:
META-INF
org
springapp
src
./META-INF:
spring.schemas
./org:
apache
springframework
./springapp:
hello
main
./springapp/hello:
Hello.class
HelloWorld.class
./springapp/main:
Main.class
./src:
applicationContext.xml
**********************************************/
按照以上配置,程式便可以运行了。
最后我要强调的是那个 spring.schemas文件以及整个目录结构。当然你也可以对那些类和 META-INF打包成jar文件以方便使用,不过那个src(即那个xml文件夹)要单独存在。
希望通过大家的共同努力我们能进一步简化整个框架结构,为我们的程式打造更加小巧的世界。
那么我们在有些时候强外界发布这些软件时面临着一个选择--是否将spring的相关包一起发布,如果全部一齐发布则可能使原本非常小巧的程式变得非常庞大;
如果不发布则可能使客户端面临程式工作环境配置的复杂程度加大,在这里主要是spring框架的下载、配置和使用。
基于以上情况我们选择一个折衷的办法:将spring工作必须的基本类文件和相关配置文件与我们的程式一起发布出去。在这里的问题就主要是包的选择(类相互的依赖关系)和框架类的一些配置文件的选择使用。
由于我的经历有限,在此我就将我写的一个第三方eclipse插件管理器所面临的一些问题以及获得的经验和大家分享一下。在这里我将用一个简单的spring例子作为替代说明即可。
#System environment
Ubuntu 7.10 Linux
Eclipse Platform Version: 3.3.0 + MyEclipse 6.0
Ubuntu 7.10 Linux
Eclipse Platform Version: 3.3.0 + MyEclipse 6.0
以下是一个简单的spring使用的程式代码:
<?
xml version="1.0" encoding="UTF-8"
?>
< beans
xmlns ="http://www.springframework.org/schema/beans"
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-2.0.xsd" >
< bean id ="HelloWorld" class ="springapp.hello.HelloWorld" >
< property name ="message" >
< value > world </ value >
</ property >
</ bean >
</ beans >
< beans
xmlns ="http://www.springframework.org/schema/beans"
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-2.0.xsd" >
< bean id ="HelloWorld" class ="springapp.hello.HelloWorld" >
< property name ="message" >
< value > world </ value >
</ property >
</ bean >
</ beans >
package
springapp.hello;
public interface Hello {
public String sayHello();
}
public interface Hello {
public String sayHello();
}
package
springapp.hello;
public class HelloWorld implements Hello {
private String message;
public HelloWorld(){
message=null;
}
public String sayHello(){
return "Hello "+message+"!";
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
public class HelloWorld implements Hello {
private String message;
public HelloWorld(){
message=null;
}
public String sayHello(){
return "Hello "+message+"!";
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package
springapp.main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import springapp.hello.Hello;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"/src/applicationContext.xml");
Hello h = (Hello)ctx.getBean("HelloWorld");
System.out.println(h.sayHello());
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import springapp.hello.Hello;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"/src/applicationContext.xml");
Hello h = (Hello)ctx.getBean("HelloWorld");
System.out.println(h.sayHello());
}
}
最后运行Main类就会显示一些信息:
2008
-
02
-
14
14
:
50
:
55
,
954
INFO
[ org.springframework.context.support.FileSystemXmlApplicationContext ]
- Refreshing org.springframework.context.support.FileSystemXmlApplicationContext
@f3d6a5: display name
[ org.springframework.context.support.FileSystemXmlApplicationContext@f3d6a5 ]
; startup date [Thu Feb 14 14:50:55 CST 2008]; root of context hierarchy
2008 - 02 - 14 14 : 50 : 56 , 013 INFO
[ org.springframework.beans.factory.xml.XmlBeanDefinitionReader ]
- Loading XML bean definitions from file
[ /home/wpc/workspace/Java/MyStudy/SimplifySpringCoreJar/src/applicationContext.xml ]
2008 - 02 - 14 14 : 50 : 56 , 197 INFO
[ org.springframework.context.support.FileSystemXmlApplicationContext ]
- Bean factory for application context
[ org.springframework.context.support.FileSystemXmlApplicationContext@f3d6a5 ]
: org.springframework.beans.factory.support.DefaultListableBeanFactory@f7f540
2008 - 02 - 14 14 : 50 : 56 , 210 INFO
[ org.springframework.beans.factory.support.DefaultListableBeanFactory ]
- Pre-instantiating singletons in
org.springframework.beans.factory.support.DefaultListableBeanFactory@f7f540
: defining beans [ HelloWorld ] ; root of factory hierarchy
Hello world!
[ org.springframework.context.support.FileSystemXmlApplicationContext ]
- Refreshing org.springframework.context.support.FileSystemXmlApplicationContext
@f3d6a5: display name
[ org.springframework.context.support.FileSystemXmlApplicationContext@f3d6a5 ]
; startup date [Thu Feb 14 14:50:55 CST 2008]; root of context hierarchy
2008 - 02 - 14 14 : 50 : 56 , 013 INFO
[ org.springframework.beans.factory.xml.XmlBeanDefinitionReader ]
- Loading XML bean definitions from file
[ /home/wpc/workspace/Java/MyStudy/SimplifySpringCoreJar/src/applicationContext.xml ]
2008 - 02 - 14 14 : 50 : 56 , 197 INFO
[ org.springframework.context.support.FileSystemXmlApplicationContext ]
- Bean factory for application context
[ org.springframework.context.support.FileSystemXmlApplicationContext@f3d6a5 ]
: org.springframework.beans.factory.support.DefaultListableBeanFactory@f7f540
2008 - 02 - 14 14 : 50 : 56 , 210 INFO
[ org.springframework.beans.factory.support.DefaultListableBeanFactory ]
- Pre-instantiating singletons in
org.springframework.beans.factory.support.DefaultListableBeanFactory@f7f540
: defining beans [ HelloWorld ] ; root of factory hierarchy
Hello world!
我的解决方案是:
#
For
JBoss: Avoid to setup Log4J outside
$
JBOSS_HOME
/
server
/
default
/
deploy
/
log4j
.
xml!
# For all other servers: Comment out the Log4J listener in web . xml to activate Log4J .
log4j . rootLogger = INFO , stdout , logfile
log4j . appender . stdout = org . apache . log4j . ConsoleAppender
log4j . appender . stdout . layout = org . apache . log4j . PatternLayout
log4j . appender . stdout . layout . ConversionPattern = %d %p [%c] - %m%n
log4j . appender . logfile = org . apache . log4j . RollingFileAppender
# The log file's location
log4j . appender . logfile . File = springframe_log . log
log4j . appender . logfile . MaxFileSize = 512KB
# Keep three backup files .
log4j . appender . logfile . MaxBackupIndex = 3
# Pattern to output: data priority [category] -message
log4j . appender . logfile . layout = org . apache . log4j . PatternLayout
log4j . appender . logfile . layout . ConversionPattern = %d %p [%c] - %m%n
# For all other servers: Comment out the Log4J listener in web . xml to activate Log4J .
log4j . rootLogger = INFO , stdout , logfile
log4j . appender . stdout = org . apache . log4j . ConsoleAppender
log4j . appender . stdout . layout = org . apache . log4j . PatternLayout
log4j . appender . stdout . layout . ConversionPattern = %d %p [%c] - %m%n
log4j . appender . logfile = org . apache . log4j . RollingFileAppender
# The log file's location
log4j . appender . logfile . File = springframe_log . log
log4j . appender . logfile . MaxFileSize = 512KB
# Keep three backup files .
log4j . appender . logfile . MaxBackupIndex = 3
# Pattern to output: data priority [category] -message
log4j . appender . logfile . layout = org . apache . log4j . PatternLayout
log4j . appender . logfile . layout . ConversionPattern = %d %p [%c] - %m%n
但是如果将这个工程导出,一般是不携带spring框架类文件的,这时在外部运行Main类就可能出现问题,一般提示是spring相关的类文件无法找到。 我当时就是通过这样一些错误信息一步步补全我的spring基础类文件的,应该有相关的工具但是我没有找到。
在这里我就将我的结果给大家:
*/可能可以再次简化,但是我没有继续进行,如果有兴趣可以继续,这样可以最大限度的简化类文件。
有500多个文件估计大家是不会自己组织的,我把他放在了csdn的资源里面:名字是《 spring core 运行时必要的基础包》
在里面我们可以发现META-INF目录里面有一个spring.schemas文件,那么这个文件有什么作用呢?
在这里体现的作用主要是:标记和识别。
那么他的影响是:就我的测试来看,如果系统是能够访问internet的那么运行这个程式时十分的慢(我估计是程式自动访问因特网去寻找相关的schema了),如果无法访问网络这导致了错误出现。这是相关的运行结果
wpc@wpc-laptop:~/Desktop/JavaTest/test$ java springapp.main.Main
14 -Feb- 2008 15 : 28 : 19 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO:
Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@
13f3789: display name [ org.springframework.context.support.FileSystemXmlApplicationContext@13f3789 ] ;
startup date [Thu Feb 14 15:28:19 CST 2008]; root of context hierarchy
14 -Feb- 2008 15 : 28 : 19 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from file
[ /home/wpc/Desktop/JavaTest/test/src/applicationContext.xml ]
14 -Feb- 2008 15 : 28 : 59 org.springframework.util.xml.SimpleSaxErrorHandler warning
WARNING: Ignored XML validation warning
org.xml.sax.SAXParseException: schema_reference .4 :
Failed to read schema document
'http://www.springframework.org/schema/beans/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.reportSchemaWarning(XSDHandler.java: 2540 )
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: 3084 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java: 912 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java: 645 )
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: 508 )
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: 76 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java: 361 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 313 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 290 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 131 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 147 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 173 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 112 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 79 )
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java: 101 )
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java: 389 )
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 324 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 124 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 68 )
at springapp.main.Main.main(Main.java: 24 )
Exception in thread " main " org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:
Line 5 in XML document from file
[ /home/wpc/Desktop/JavaTest/test/src/applicationContext.xml ] is invalid ;
nested exception is org.xml.sax.SAXParseException: cvc-elt.1:
Cannot find the declaration of element 'beans'.
Caused by: org.xml.sax.SAXParseException: cvc-elt .1 : Cannot find the declaration of element 'beans'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java: 195 )
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java: 131 )
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java: 384 )
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java: 318 )
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java: 1887 )
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: 3084 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java: 912 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java: 645 )
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: 508 )
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: 76 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java: 361 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 313 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 290 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 131 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 147 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 173 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 112 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 79 )
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java: 101 )
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java: 389 )
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 324 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 124 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 68 )
at springapp.main.Main.main(Main.java: 24 )
14 -Feb- 2008 15 : 28 : 19 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO:
Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@
13f3789: display name [ org.springframework.context.support.FileSystemXmlApplicationContext@13f3789 ] ;
startup date [Thu Feb 14 15:28:19 CST 2008]; root of context hierarchy
14 -Feb- 2008 15 : 28 : 19 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from file
[ /home/wpc/Desktop/JavaTest/test/src/applicationContext.xml ]
14 -Feb- 2008 15 : 28 : 59 org.springframework.util.xml.SimpleSaxErrorHandler warning
WARNING: Ignored XML validation warning
org.xml.sax.SAXParseException: schema_reference .4 :
Failed to read schema document
'http://www.springframework.org/schema/beans/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.reportSchemaWarning(XSDHandler.java: 2540 )
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: 3084 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java: 912 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java: 645 )
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: 508 )
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: 76 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java: 361 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 313 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 290 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 131 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 147 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 173 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 112 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 79 )
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java: 101 )
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java: 389 )
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 324 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 124 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 68 )
at springapp.main.Main.main(Main.java: 24 )
Exception in thread " main " org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:
Line 5 in XML document from file
[ /home/wpc/Desktop/JavaTest/test/src/applicationContext.xml ] is invalid ;
nested exception is org.xml.sax.SAXParseException: cvc-elt.1:
Cannot find the declaration of element 'beans'.
Caused by: org.xml.sax.SAXParseException: cvc-elt .1 : Cannot find the declaration of element 'beans'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java: 195 )
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java: 131 )
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java: 384 )
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java: 318 )
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java: 1887 )
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: 3084 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java: 912 )
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java: 645 )
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: 508 )
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: 76 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java: 361 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 313 )
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 290 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 131 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 147 )
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 173 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 112 )
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java: 79 )
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java: 101 )
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java: 389 )
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 324 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 124 )
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java: 68 )
at springapp.main.Main.main(Main.java: 24 )
目录结构:
/**********************************************
.:
META-INF
org
springapp
src
./META-INF:
spring.schemas
./org:
apache
springframework
./springapp:
hello
main
./springapp/hello:
Hello.class
HelloWorld.class
./springapp/main:
Main.class
./src:
applicationContext.xml
**********************************************/
按照以上配置,程式便可以运行了。
最后我要强调的是那个 spring.schemas文件以及整个目录结构。当然你也可以对那些类和 META-INF打包成jar文件以方便使用,不过那个src(即那个xml文件夹)要单独存在。
希望通过大家的共同努力我们能进一步简化整个框架结构,为我们的程式打造更加小巧的世界。