2016-04-16 20 views
0

Ich versuche, Frühling in Java zu lernen. Ich stehe am Anfang fest, wenn ich das erste Programm starte. Ich versuche, die draw Methode der Dreieckklasse zu nennen. Aber ich sehe viele Fehler.Spring Framework Bean Fehler

In der DrawingApp.java Klasse Eclipse zeigt einige Warnung - (The type XmlBeanFactory is deprecated).

Ich biete meine Implementierung zusammen mit Fehlern unten.

Triangle.java

package org.hemant.spring; 

public class Triangle { 

public void draw(){ 
    System.out.println("Triangle drawn"); 
} 
} 

DrawingApp.java

package org.hemant.spring; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.beans.factory.xml.XmlBeanFactory; 
import org.springframework.core.io.FileSystemResource; 

public class DrawingApp { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    BeanFactory factory = new XmlBeanFactory(new FileSystemResource("spring.xml")); 

    Triangle triangle = (Triangle)factory.getBean("Triangle.class"); 
    triangle.draw(); 
    } 

} 

spring.xml

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE bean PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  "http://www.springframework.org/dtd/spring-bean-2.0.dtd"> 

<bean> 
    <bean id="triangle" class="org.hemant.spring.Triangle"/> 
</bean> 

Fehler

 Apr 16, 2016 12:33:45 PM  org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
    INFO: Loading XML bean definitions from file [C:\Users\hemant001\workspace_mars_eclipse\spring tutorial\spring.xml] 
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [C:\Users\hemant001\workspace_mars_eclipse\spring tutorial\spring.xml]; nested exception is java.io.FileNotFoundException: http://www.springframework.org/dtd/spring-bean-2.0.dtd 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefiniti ons(XmlBeanDefinitionReader.java:408) 
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.xml.XmlBeanFactory.<init> (XmlBeanFactory.java:78) 
at org.springframework.beans.factory.xml.XmlBeanFactory.<init> (XmlBeanFactory.java:66) 
at org.hemant.spring.DrawingApp.main(DrawingApp.java:17) 
    Caused by: java.io.FileNotFoundException: http://www.springframework.org/dtd/spring-bean-2.0.dtd 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388) 
... 5 more 
+0

Welche Fehler haben Sie? –

+0

Ich habe den Fehler jetzt, plz Hilfe - @PeterRader – Hemant

+0

Könnte es sein, dass 'factory.getBean (" Triangle.class ");' sollte 'factory.getBean (" Dreieck ");'? –

Antwort

2

Sie sollten http://www.springframework.org/dtd/spring-bean-2.0.dtd ersetzen mit http://www.springframework.org/dtd/spring-beans-2.0.dtd (Hinweis Bohnen, nicht Bohne) in Ihrem spring.xml.

1

Dieses:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE bean PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  "http://www.springframework.org/dtd/spring-bean-2.0.dtd"> 
<bean> 
    <bean id="triangle" class="org.hemant.spring.Triangle"/> 
</bean> 

sollte auch so etwas wie

<?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.xsd"> 
     <bean id="triangle" class="org.hemant.spring.Triangle"/> 
</beans> 

sein, wie in den Kommentaren erwähnt, sollte factory.getBean("Triangle.class"); sein factory.getBean("triangle");

Für Kontext, würde ich lieber tun

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

... 

     ApplicationContext context = new ClassPathXmlApplicationContext(
       "spring.xml"); // or FileSystemXmlApplicationContext, if .xml is not in class path 

     Triangle obj = (Triangle) context.getBean("triangle"); 

Und warum verwenden Sie Version 2.0 von Spring (basierend auf Ihrem dtd)? Das ist wirklich alt.

+0

Bessere Verwendung von 'getBean (Triangle.class)' –

+0

neue Ausnahme ausgelöst - Ausnahme im Thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Zeile 5 im XML-Dokument aus Datei [C: \ Users \ hemant001 \ workspace_mars_eclipse \ spring tutorial \ spring.xml] ist ungültig; verschachtelte Ausnahme ist org.xml.sax.SAXParseException; Zeilennummer: 5; Spaltennummer: 72; Das Präfix "xsi" für das Attribut "xsi: schemaLocation", das einem Elementtyp "beans" zugeordnet ist, ist nicht gebunden. - @eis – Hemant

+0

@Hemant du hast Recht, habe eine Zeile aus meinem .xml Beispiel vergessen. Ich habe jetzt hinzugefügt. 'xmlns: xsi =" http://www.w3.org/2001/XMLSchema-instance "' ist das, was ich vergessen habe. – eis

0
  1. Bitte XmlBeanFactory nicht mehr verwenden, verwenden Sie die DefaultListableBeanFactory, weil es den Leser aus der Fabrik trennt und eine saubere OOD darstellen.

  2. Es ist nicht wirklich ein Fehler, es ist ein Format-Problem mit der Konfiguration (ich arbeite, um zu erklären, warum Eclipse Ihnen keine Nachrichten gibt). Sie sehen, eine Konfiguration, die nicht gelesen werden konnte, ist kein Fehler. Dies bedeutet, dass Ihre Anwendung gut funktioniert (seien Sie stolz auf Ihren ersten Versuch), aber die Konfiguration ist falsch! Um die Konfiguration zu lösen, geben Sie doctype und ns ein.

  3. Triangle triangle = (Triangle)factory.getBean("Triangle.class"); finde keine Definition. Verwenden Sie stattdessen Triangle triangle = factory.getBean(Triangle.class);, da Sie nicht zu übertragen haben.

So sollte die main so aussehen:

DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); 
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory); 
reader.loadBeanDefinitions(new FileSystemResource("spring.xml")); 
Triangle triangle = factory.getBean(Triangle.class); 
triangle.draw(); 
+0

Gute Idee. Aber ich habe gerne erklärt, warum Eclipse eine Warnung über die Klasse anzeigt, ist veraltet. Oh wait "FileSystemXmlApplicationContext" lädt das XML automatisch neu. –

+0

jaaa ..... es ist getan - vielen Dank - @eis – Hemant