Skip to content

Commit a9262a6

Browse files
committed
Merge branch 'pr/650' into 3.x
2 parents 37d9062 + ab34134 commit a9262a6

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

src/clj_http/client.clj

+20-13
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
(:import [java.io BufferedReader ByteArrayInputStream ByteArrayOutputStream EOFException File InputStream]
1717
[java.net UnknownHostException URL]
1818
[org.apache.http.entity BufferedHttpEntity ByteArrayEntity FileEntity InputStreamEntity StringEntity]
19-
[javax.xml.parsers SAXParserFactory]
19+
[javax.xml.parsers SAXParser SAXParserFactory]
20+
org.xml.sax.helpers.DefaultHandler
2021
org.apache.http.impl.conn.PoolingHttpClientConnectionManager
2122
org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager))
2223

@@ -474,18 +475,25 @@
474475
(util/force-string body charset))]
475476
(assoc resp :body body)))
476477

478+
(defn- sax-parser ^SAXParser []
479+
(..
480+
(doto
481+
(SAXParserFactory/newInstance)
482+
(.setFeature
483+
"http://apache.org/xml/features/nonvalidating/load-external-dtd" false))
484+
(newSAXParser)))
485+
486+
(defn- non-validating [s ^DefaultHandler ch]
487+
(let [parser (sax-parser)]
488+
(cond
489+
(instance? String s) (.parse parser ^String s ch)
490+
(instance? InputStream s) (.parse parser ^InputStream s ch)
491+
:else (throw (ex-info "Unsupported input" {:s s})))))
492+
477493
(defn- decode-xml-body [body]
478-
(let [non-validating (fn [s ch]
479-
(..
480-
(doto
481-
(SAXParserFactory/newInstance)
482-
(.setFeature
483-
"http://apache.org/xml/features/nonvalidating/load-external-dtd" false))
484-
(newSAXParser)
485-
(parse s ch)))]
486-
(-> body
487-
(util/force-stream)
488-
(xml/parse non-validating))))
494+
(-> body
495+
(util/force-stream)
496+
(xml/parse non-validating)))
489497

490498
(defn coerce-xml-body
491499
[request {:keys [body] :as resp} & [charset]]
@@ -892,7 +900,6 @@
892900
([req respond raise]
893901
(client (oauth-request req) respond raise))))
894902

895-
896903
(defn parse-user-info [user-info]
897904
(when user-info
898905
(str/split user-info #":")))

0 commit comments

Comments
 (0)