clojure.data.xml和解析jdbc xml对象

时间:2017-05-17 17:08:42

标签: postgresql jdbc clojure

我正在尝试从clojure中的postgres数据库中读取xml(实际的xml类型),但是我不确定如何将org.postgresql.jdbc4.Jdbc4SQLXML对象转换为clojure.data.xml可以理解的内容。

在此对象上运行(xml/parse ...)时,我收到以下错误:

IllegalArgumentException No matching method found: createXMLStreamReader for class com.sun.xml.internal.stream.XMLInputFactoryImpl  clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)

以下代码:

(ns clj-xml-dbms.core-test
  (:require [clojure.test :refer :all]
            [clojure.java.jdbc :as j]
            [clojure.data.xml :as xml]
            [clj-xml-dbms.core :refer :all])
  (:use [clojure.pprint ] ))

(def db-spec {
             :classname "org.postgres.Driver"
             :subprotocol "postgres"
             :subname "//localhost:5432/mydb"
             :user "me"
             :password "secret"
             })

;; get the results of a query
(def results
  (let [
        sql "select row_id, xml_col from stg.some_table limit 1 "
        db-connection (j/get-connection db-spec )
        statement (j/prepare-statement db-connection sql)
        query-results (j/query db-connection [statement]) ]
    (first query-results)))

(pprint results)
;; {:row_id 18627,
;;  :xml_col #object[org.postgresql.jdbc4.Jdbc4SQLXML 0x6897f635 "org.postgresql.jdbc4.Jdbc4SQLXML@6897f635"]}

;; obviously clojure.data.xml/parse isn't going to work on that:
(xml/parse (:xml_col results))

;; IllegalArgumentException No matching method found: createXMLStreamReader for class com.sun.xml.internal.stream.XMLInputFactoryImpl  clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)

我想我可以将数据库中的xml类型转换为字符串,但我必须要有更清洁的东西。任何提示赞赏,谢谢。

0 个答案:

没有答案