Лучший способ: точки сбоя в java.net.URL

Новое в JVM, работа со Scala и Play 2.0

Я конвертирую устаревшее приложение в Play, которое требует обработки платежей через Authorize.net . Просматривая исходный код java.net.URL, можно обнаружить множество потенциальных точек отказа. Учитывая интерфейс, который я написал ниже, где бы вы реализовали блоки try/catch? Мне нужно будет соответствующим образом адаптировать сигнатуры методов, возможно, возвращая Либо [Ошибка, Успех] для вызова клиентского кода

import java.net.{URL, URLEncoder}
import java.io.{BufferedReader, DataOutputStream, InputStreamReader}
import javax.net.ssl._

trait Authnet {
  private val prodUrl = "https://secure.authorize.net/gateway/transact.dll"
  private val testUrl = "https://test.authorize.net/gateway/transact.dll"

  protected def authNetProcess(params: Map[String,String]) = {
    val(conn, urlParams) = connect(params)
    val request = new DataOutputStream( conn.getOutputStream )
    request.write(urlParams.getBytes)
    request.flush()
    request.close()
    val response = new BufferedReader(new InputStreamReader(conn.getInputStream))
    val results = response.readLine().split("\\|")
    response.close()
    results.toList
  }  

  private def connect(params: Map[String,String]) = {
    val urlParams = (config ++ params) map { case(k,v) =>
        URLEncoder.encode(k, "UTF-8") + "=" + URLEncoder.encode(v, "UTF-8")
    } mkString("&")

    lazy val url = if (isDev) new URL(testUrl) else new URL(prodUrl)
    val conn = url.openConnection
    conn.setDoOutput(true)
    conn.setUseCaches(false)
    (conn, urlParams)
  }

  private val config = Map(
    'x_login        -> "...",
    'x_tran_key     -> "...",
    ...
  )
}
10
задан virtualeyes 1 June 2012 в 10:39
поделиться