From c0e5d00e56ee3484e80c89346a5852a9db8d6583 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 9 Dec 2015 16:09:11 +0100 Subject: [PATCH] Jdbc4SqlXmlHandler returns null as documented (instead of throwing NPE) Issue: SPR-13782 (cherry picked from commit 78dad4c) --- .../jdbc/support/xml/Jdbc4SqlXmlHandler.java | 32 +++++++++++++------ .../jdbc/support/xml/SqlXmlHandler.java | 11 +++---- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler.java index 13f0363377..bbcf3d987c 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,37 +51,51 @@ public class Jdbc4SqlXmlHandler implements SqlXmlHandler { //------------------------------------------------------------------------- public String getXmlAsString(ResultSet rs, String columnName) throws SQLException { - return rs.getSQLXML(columnName).getString(); + SQLXML xmlObject = rs.getSQLXML(columnName); + return (xmlObject != null ? xmlObject.getString() : null); } public String getXmlAsString(ResultSet rs, int columnIndex) throws SQLException { - return rs.getSQLXML(columnIndex).getString(); + SQLXML xmlObject = rs.getSQLXML(columnIndex); + return (xmlObject != null ? xmlObject.getString() : null); } public InputStream getXmlAsBinaryStream(ResultSet rs, String columnName) throws SQLException { - return rs.getSQLXML(columnName).getBinaryStream(); + SQLXML xmlObject = rs.getSQLXML(columnName); + return (xmlObject != null ? xmlObject.getBinaryStream() : null); } public InputStream getXmlAsBinaryStream(ResultSet rs, int columnIndex) throws SQLException { - return rs.getSQLXML(columnIndex).getBinaryStream(); + SQLXML xmlObject = rs.getSQLXML(columnIndex); + return (xmlObject != null ? xmlObject.getBinaryStream() : null); } public Reader getXmlAsCharacterStream(ResultSet rs, String columnName) throws SQLException { - return rs.getSQLXML(columnName).getCharacterStream(); + SQLXML xmlObject = rs.getSQLXML(columnName); + return (xmlObject != null ? xmlObject.getCharacterStream() : null); } public Reader getXmlAsCharacterStream(ResultSet rs, int columnIndex) throws SQLException { - return rs.getSQLXML(columnIndex).getCharacterStream(); + SQLXML xmlObject = rs.getSQLXML(columnIndex); + return (xmlObject != null ? xmlObject.getCharacterStream() : null); } @SuppressWarnings("unchecked") public Source getXmlAsSource(ResultSet rs, String columnName, Class sourceClass) throws SQLException { - return rs.getSQLXML(columnName).getSource(sourceClass != null ? sourceClass : DOMSource.class); + SQLXML xmlObject = rs.getSQLXML(columnName); + if (xmlObject == null) { + return null; + } + return xmlObject.getSource(sourceClass != null ? sourceClass : DOMSource.class); } @SuppressWarnings("unchecked") public Source getXmlAsSource(ResultSet rs, int columnIndex, Class sourceClass) throws SQLException { - return rs.getSQLXML(columnIndex).getSource(sourceClass != null ? sourceClass : DOMSource.class); + SQLXML xmlObject = rs.getSQLXML(columnIndex); + if (xmlObject == null) { + return null; + } + return xmlObject.getSource(sourceClass != null ? sourceClass : DOMSource.class); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/SqlXmlHandler.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/SqlXmlHandler.java index 2a702794ee..fa08d96d54 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/SqlXmlHandler.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/xml/SqlXmlHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,6 @@ import java.io.InputStream; import java.io.Reader; import java.sql.ResultSet; import java.sql.SQLException; - import javax.xml.transform.Source; import org.w3c.dom.Document; @@ -112,7 +111,7 @@ public interface SqlXmlHandler { * database and driver. * @param rs the ResultSet to retrieve the content from * @param columnName the column name to use - * @return the content as character stream + * @return the content as character stream, or {@code null} in case of SQL NULL * @throws SQLException if thrown by JDBC methods * @see java.sql.ResultSet#getSQLXML * @see java.sql.SQLXML#getCharacterStream @@ -126,7 +125,7 @@ public interface SqlXmlHandler { * database and driver. * @param rs the ResultSet to retrieve the content from * @param columnIndex the column index to use - * @return the content as character stream + * @return the content as character stream, or {@code null} in case of SQL NULL * @throws SQLException if thrown by JDBC methods * @see java.sql.ResultSet#getSQLXML * @see java.sql.SQLXML#getCharacterStream @@ -141,7 +140,7 @@ public interface SqlXmlHandler { * @param rs the ResultSet to retrieve the content from * @param columnName the column name to use * @param sourceClass the implementation class to be used - * @return the content as character stream + * @return the content as character stream, or {@code null} in case of SQL NULL * @throws SQLException if thrown by JDBC methods * @see java.sql.ResultSet#getSQLXML * @see java.sql.SQLXML#getSource @@ -156,7 +155,7 @@ public interface SqlXmlHandler { * @param rs the ResultSet to retrieve the content from * @param columnIndex the column index to use * @param sourceClass the implementation class to be used - * @return the content as character stream + * @return the content as character stream, or {@code null} in case of SQL NULL * @throws SQLException if thrown by JDBC methods * @see java.sql.ResultSet#getSQLXML * @see java.sql.SQLXML#getSource