3
votes

Recently I am learning Spring framework. so I am trying check how Dependency Injection works in spring framework. As a result i create a new java project and practicing Dependency Injection code using constructor XML based configuration. After running my project i am getting this error....

Line 24 in XML document from class path resource [com/mir00r/beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 9; cvc-complex-type.2.3: Element 'beans' cannot have character [children], because the type's content type is element-only.

Jul 09, 2016 11:22:11 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7ee361ad: startup date [Sat Jul 09 23:22:11 BDT 2016]; root of context hierarchy Jul 09, 2016 11:22:11 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from class path resource [com/mir00r/beans.xml] Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from class path resource [com/mir00r/beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 9; cvc-complex-type.2.3: Element 'beans' cannot have character [children], because the type's content type is element-only.

at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com.mir00r.Main_Test.main(Main_Test.java:18)

Caused by: org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 9; cvc-complex-type.2.3: Element 'beans' cannot have character [children], because the type's content type is element-only. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:458) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3237) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidComplexType(XMLSchemaValidator.java:3200) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidType(XMLSchemaValidator.java:3160) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processElementContent(XMLSchemaValidator.java:3062) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleEndElement(XMLSchemaValidator.java:2140) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(XMLSchemaValidator.java:859) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2973) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) 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:848) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347) at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388) ... 14 more C:\Users\razza_000\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 BUILD FAILED (total time: 28 seconds)

Here is my code .......

Employee.java file

 package com.mir00r;

 /**
  * 
  * @author Abdur Razzak <[email protected]>
  */
 public class Employee {
     private int id;
     private String name;
     private Address address; // create object from Address class

     public Employee() {
     }

     public Employee(int id) {
         this.id = id;
     }

     public Employee(String name) {
         this.name = name;
     }

    public Employee(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public Employee(int id, String name, Address address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }

    public void show () {
        System.out.println(id + " : " + name);
        System.out.println(address);
    }
 }

Address.java file

   package com.mir00r;

  /**
  * 
  * @author Abdur Razzak <[email protected]>
  */
 public class Address {
     private final String state;
     private final String city;
     private final String country;

     public Address(String state, String city, String country) {
         this.state = state;
         this.city = city;
         this.country = country;
     }

     @Override
     public String toString() {
         return "Address{" + "state=" + state + ", city=" + city + ",  country=" + country + '}';
     }
 }

Main_Test.java file

     package com.mir00r;

     import org.springframework.context.ApplicationContext;
     import org.springframework.context.support.ClassPathXmlApplicationContext;

     /**
      * 
      * @author Abdur Razzak <[email protected]>
      */
      public class Main_Test {
          public static void main(String[] args) {
               ApplicationContext ac = new ClassPathXmlApplicationContext("com/mir00r/beans.xml");
               Employee em = (Employee)ac.getBean("emp");
               em.show();
          }
      }

beans.xml file

      <?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:p="http://www.springframework.org/schema/p"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

     <bean id="a1" class="com.mir00r.Address">
         <constructor-arg value="Badda"></constructor-arg>
         <constructor-arg value="Dhaka"></constructor-arg>
         <constructor-arg value="Bangladesh"></constructor-arg>
     </bean>

     // Dependency Injection Example using Constructor
     <bean id="emp" class="com.mir00r.Employee">
         <constructor-arg value="10" type="int" ></constructor-arg>
         <constructor-arg value="Abdur Razzak" ></constructor-arg>
         <constructor-arg>
             <ref bean="a1"></ref>
         </constructor-arg>
     </bean>
 </beans>  

Here is my project structure photo

enter image description here

What can i do now ....????

here is my error picture

enter image description here

3
Your Exception SAXParseException tells that, something wrong in your xml file. I see some people answer here and follow it bro.Ataur Rahman Munna

3 Answers

5
votes

A - Explanation

The comment line in the bean file is invalid. You are using wrong comment tag, instead of using "<!-- -->", you are using "//" which causes a parse error (org.xml.sax.SAXParseException).

It is an xml file, the following comment line is invalid;

// Dependency Injection Example using Constructor

And following comment line is valid;

<!-- Do the comments here, that's all -->

B - Solution

Use the provided bean.xml file below;

<?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:p="http://www.springframework.org/schema/p"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="a1" class="com.mir00r.Address">
        <constructor-arg value="Badda"/>
        <constructor-arg value="Dhaka"/>
        <constructor-arg value="Bangladesh"/>
    </bean>

    <!-- // Dependency Injection Example using Constructor -->
    <bean id="emp" class="com.mir00r.Employee">
        <constructor-arg value="10" type="int" />
        <constructor-arg value="Abdur Razzak" />
        <constructor-arg>
            <ref bean="a1"/>
        </constructor-arg>
    </bean>
</beans>
1
votes

Encountered the same Exception org.xml.sax.SAXParseException while compiling my spring application and what i found was an Comment element for which i forgot to remove '-->' part after uncommenting my code. So, I was able to notice that and after removing it i was able to execute my application.

0
votes

I think the file name should be com.mir00r/beans.xml instead of com/mir00r/beans.xml in main.test on the application context declaration.