2016-08-16 7 views
0

Hallo alles, ich benutze Rest und MySQL als meine db.NULL-Pointer-Ausnahme bekommen, während von mysql db erhalten

unten meine Ruhe Code erhalten für allbooks (Resource)

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response getBooks(@QueryParam("format") String format) { 

    //line35: return Response.status(Status.OK).entity((new GenericEntity<List<Book>>(bookService.getAllBooks()) { 
    })).header(HttpHeaders.CONTENT_TYPE, "XML".equalsIgnoreCase(format) 
      ? MediaType.APPLICATION_XML + ";charset=UTF-8" : MediaType.APPLICATION_JSON + ";charset=UTF-8").build(); 

} 

Unten ist mein Service

public List<Book> getAllBooks() { 

    //books service line 24 return new ArrayList<Book>(booksDao.getAllBooks()); 
    /* return new ArrayList<Book>(books.values()); */ 
} 

BooksDAO Klasse

public class BooksDAO { 

private JdbcTemplate jdbcTemplate; 

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 
    this.jdbcTemplate = jdbcTemplate; 
} 

public List<Book> getAllBooks() { 
    //books dao line24: return jdbcTemplate.query("select * from books.books_table", new RowMapper<Book>() { 

     @Override 
     public Book mapRow(ResultSet rs, int rownumber) throws SQLException { 
      Book e = new Book(); 
      e.setId(rs.getInt(1)); 

      e.setName(rs.getString(2)); 

      e.setPrice(rs.getString(3)); 

      e.setAuthor(rs.getString(4)); 

      return e; 
     } 


    }); 
} 

Unten ist mein bean.I Uhr bekommen mit springJDBC

<?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="ds" 
class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
<property name="url" value="jdbc:mysql://localhost:3306/xxxx" /> 
<property name="username" value="xxxx" /> 
<property name="password" value="xxxx" /> 
</bean> 

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
<property name="dataSource" ref="ds"></property> 
</bean> 

<bean id="edao" class="com.nag.library.database.BooksDAO"> 
<property name="jdbcTemplate" ref="jdbcTemplate"></property> 
</bean> 

</beans> 

Ohne Anschluss i fein die json/xml Antwort zu erhalten bin db, aber wenn ich eine Verbindung db seine eine Nullpointer-Ausnahme werfen

Aug 16, 2016 10:43:08 AM org.apache.catalina.core.StandardWrapperValve 
invoke  
SEVERE: Servlet.service() for servlet Jersey Web Application threw exception 
java.lang.NullPointerException 
at com.nag.library.database.BooksDAO.getAllBooks(BooksDAO.java:24) 
at com.nag.library.service.BookService.getAllBooks(BookService.java:24) 
at com.nag.library.resource.BookResource.getBooks(BookResource.java:35) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

wo ich die Sache mache mir wrong.Please zu führen.

Danke

+0

Auf welche Anweisung haben Sie die NPE? Sie sollten alle BooksDAO Klasse – davidxxx

+0

NPE zeigen? Können Sie es ausarbeiten.Es tut mir leid, ich bin nur ein Anfänger. –

+0

kein Problem: NPE = NullPointerException – davidxxx

Antwort

0

Ich denke, dass das Problem ist, dass Ihr Dienst nicht eine Bohne von Spring verwaltet wird, da nicht im Frühjahr conf erklärt. So verwenden Sie nicht diese Bohnen:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
<property name="dataSource" ref="ds"></property> 
</bean> 

<bean id="edao" class="com.nag.library.database.BooksDAO"> 
<property name="jdbcTemplate" ref="jdbcTemplate"></property> 
</bean> 

Und als Konsequenz Ihrer jdbcTemplace ist null in Ihrem BooksDAO, die Sie zur Laufzeit verwenden.
Fügen Sie Ihren Dienst als Bean in dieser Konfiguration hinzu und fügen Sie ihm die Bean edao als Eigenschaft hinzu.
Sie sollten Ihren Dienst auch mit Ihrer Ruheklasse verbinden.

Edit für Präzision: Ich denke, dass das Problem hier ist, weil in dieser Linie return jdbcTemplate.query("‌​select * from books.books_table", new RowMapper<Book>() die Nullpointer eine einzige Ursache haben: jdbcTemplate null ist. Außerdem deklarieren Sie die Service Bean nicht in seiner Konfiguration. Außerdem kann keine Anweisung im Methodenkörper eine NPE auslösen. -

+0

Er sagte vorher, dass das Instance von jdbcTemplate nicht null war, dachte ich das gleiche wie Sie zuvor, aber wenn es ein Problem die Beans deklariert, wie erreicht der Anruf den DAO wenn die Instanz auf dem Dienst Klasse wird nicht autowired? – karelss

+0

Nicht logisch. In dieser Zeile 'return jdbcTemplate.query (" select * from books.books_table ", neuer RowMapper ()' kann der nullpointer eine einzige Ursache haben: 'jdbcTemplate ist null'. Außerdem deklariert er die Servicebohne nicht Seine Konfiguration Außerdem kann kein Befehl im Methodenkörper eine NPE auslösen. – davidxxx

+0

Ich habe nicht gesehen, dass du deinen Kommentar bearbeitet hast. Vielleicht instanziiert er ihn mit einem 'new()' oder vielleicht benutzt er eine andere Instanz des dao Mit freundlichen Grüßen, ich weiß es nicht, aber die NPE ist ein Problem bei der Verdrahtung von Kabeln, kein SQL-Problem. – davidxxx

0

Ich glaube, Sie etwas falsch auf Ihrem Mapping am dao haben, können Sie den Code mit Zeilennummern Post sicher meine suspicius sein ?, wihtout den Zeilennummern wir nicht sicher sein können, über die Linie mit dem Nullpointer (24).

Erstens Wenn ich Sie wäre, würde ich versuchen, die Felder Ihrer Tabelle nach Name (getString ("COLUMN_NAME")) anstelle von Index abzubilden, um zu überprüfen, ob etwas mit den Spalten (index oder data_type) falsch ist.

Schließlich, wenn dies nicht funktioniert, versuchen Sie, ein leeres Objekt als Mapper-Ergebnis zuzuordnen, um zu überprüfen, ob es ein Problem mit der Abfrage ist.

Greatings

+0

Wenn ich eine Hauptmethode geschrieben und ausgeführt habe, habe ich alle Werte von table.But ich bin nicht in der Lage, das gleiche zu einem Rest –

+0

das ist seltsam, weil der Fehler die Abfrage ausführt, verwenden Sie unterschiedliche Konfiguration xmls? – karelss

+0

Hoffentlich ja, wenn ich das Objekt drucke, gibt es die Werte –

Verwandte Themen