型から取得したXMLからデータを解析しようとしていますClob
。なんらかの理由で、この例外が発生しています...理由がわかりません。XMLType
値、つまりXMLを含むOracleデータベース列からClobを取得しました。XMLType
から型に含まれるXMLを正常に抽出しましたClob
。これは、次のコードで取得されます。
xmlBean = XmlHelper.xPathRead(film.getXmlClob());
必要に応じてfilm
オブジェクトはモデル内にあり、getXmlClob()
メソッドはClob
XPathを使用して解析するXMLを含む値を返します。残りのコードは次のとおりです。
XMLHelper
public static XmlBean xPathRead(Clob xmlClob) {
XPathReader reader = new XPathReader(xmlClob);
XmlBean xmlBean = new XmlBean(); // just an entity from the model to store the xml's contents inside
String filmId = "/IMAGE[1]/@id";
xmlBean.setFilmId(Integer.parseInt((String) reader.read(filmId, XPathConstants.STRING)));
}
XPathReader
public class XPathReader {
private String xmlString;
private XPath xPath;
public XPathReader(Clob xmlClob) {
try {
if ((int) xmlClob.length() > 0) {
String s = xmlClob.getSubString(1, (int) xmlClob.length()); // this is a way to cast a CLOB into a STRING
this.xmlString = s;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
xPath = XPathFactory.newInstance().newXPath();
}
public Object read(String expression, QName returnType) {
try {
XPathExpression xPathExpression = xPath.compile(expression);
return xPathExpression.evaluate(xmlString, returnType);
} catch (XPathExpressionException ex) {
ex.printStackTrace();
return null;
}
}
}
何か案は?問題はevaluate()
メソッドにあります...
エラーメッセージ
java.lang.ClassCastException:java.lang.Stringは、com.sun.orgのcom.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(不明なソース)のorg.w3c.dom.Nodeにキャストできません。 .apache.xpath.internal.jaxp.XPathExpressionImpl.eval(Unknown Source)at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(Unknown Source)at helper.XPathReader.read(XPathReader.java:34 )helper.XmlHelper.xPathRead(XmlHelper.java:325)で