小编Jac*_*ack的帖子

使用Finagle实现简单的Scala SOAP客户端

我正在努力使用Twitter的Finagle库来实现对SOAP服务器的HTTP请求.

下面的代码成功地执行了第一次测试(使用java.net.URL),但是我在第二次测试时遇到了困难(使用Finagle客户端).我究竟做错了什么?

此外,我一直被拖入和命令式的写作风格.如果你能帮助我让Finagle更像'scala',我将非常感激.

开始:

import java.net.InetSocketAddress 
import scala.xml.{Elem, XML} 
import org.jboss.netty.buffer.ChannelBuffers 
import org.jboss.netty.util.CharsetUtil.UTF_8 
import com.twitter.finagle.Service; 
import com.twitter.finagle.builder.ClientBuilder; 
import com.twitter.finagle.http.Http; 
import org.jboss.netty.handler.codec.http._ 

class SoapClient { 
  private def error(msg: String) = { 
    println("SoapClient error: " + msg) 
  } 

  def wrap(xml: Elem): String = { 
    val buf = new StringBuilder 
    buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone= 
\"no\"?>\n") 
    buf.append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http:// 
schemas.xmlsoap.org/soap/envelope/\">\n") 
    buf.append("<SOAP-ENV:Body>\n") 
    buf.append(xml.toString) 
    buf.append("\n</SOAP-ENV:Body>\n") 
    buf.append("</SOAP-ENV:Envelope>\n") 
    buf.toString 
  } 

  def sendWithJavaNetURL(host: String, req: Elem): Option[Elem] = { 
    val url = new java.net.URL(host) 
    val outs = wrap(req).getBytes 
    val conn …
Run Code Online (Sandbox Code Playgroud)

soap scala finagle

12
推荐指数
1
解决办法
5466
查看次数

使用Slick提升嵌入时,如何将提升类型更改回Scala类型?

使用提升嵌入时,如何在Slick中解除查询中的值?我希望一个'得到','长'或类似的东西可以做到这一点,但没有这样的运气.

以下代码无法编译:

  val userById = for {
     uid <- Parameters[Long]
     u <- Users if u.id === uid
  } yield u

  val userFirstNameById = for {
     uid <- Parameters[Long]
     u <- userById(uid)
     ---------------^
     // type mismatch;  found   : scala.slick.lifted.Column[Long]  required: Long
  } yield u.name
Run Code Online (Sandbox Code Playgroud)

scala slick

10
推荐指数
1
解决办法
2275
查看次数

如何打印以下Slick查询的select语句?

我想找出以下哪个查询对于获取表上的行计数最有效,所以我正在尝试打印出select语句.我知道你可以添加.selectStatement到Queryable但不知道这是否告诉我完整的事实,因为我必须删除结果生成代码,例如.list.length并替换它.selectStatement.Slick可能会发现你正在寻找长度并进一步优化,所以我想查看整个查询的select语句,包括因为的生成的SQL .list.length,或者.count).first

Query(MyTable).list.length

(for{mt <- MyTable} yield mt).list.length

(for{mt <- MyTable} yield mt.count).first
Run Code Online (Sandbox Code Playgroud)

scala slick

10
推荐指数
5
解决办法
1万
查看次数

使用Play 2.0创建Web服务

我发现了一个老问题"如何使用Play框架来开发Web服务"

我正在尝试使用Play 2.0和Scala来做同样的事情.除了从Groovy模板迁移到Scala模板之外,Play 2.0上的所有内容是否仍然相同?

一个新的例子将不胜感激.

scala playframework playframework-2.0

8
推荐指数
1
解决办法
1928
查看次数

用于HTTP网关的Play2-mini和Akka2

我正在评估使用Scala的Play2-mini开发服务的可能性,该服务将位于移动客户端和现有Web服务之间.我正在寻找一个代码片段的最简单的例子,其中Play2-mini实现了服务器和客户端.理想情况下,客户端将使用Akka2 actor.

有了这个问题,我试图找出它是如何完成的,同时也看看Play2-Mini和Akka2应该如何合作.由于Play2-Mini似乎是Akka HTTP模块的替代品.

Play2-mini包含以下代码示例,其中我创建了两个TODO.如果有人可以帮助我开始使用一些示例代码,我将非常感激.

package com.example

import com.typesafe.play.mini._
import play.api.mvc._
import play.api.mvc.Results._

object App extends Application {
  def route = {
    case GET(Path("/testservice")) & QueryString(qs) => Action{ request=>
      println(request.body)
      //TODO Take parameter and content from the request them pass it to the back-end server
      //TODO Receive a response from the back-end server and pass it back as a response
      Ok(<h1>Server response: String {result}</h1>).as("text/html")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

scala playframework playframework-2.0 play2-mini

8
推荐指数
1
解决办法
2493
查看次数

在Scala中使用Some()和Option()

我一直在与Scala中解析JSON字符串的功能方法的概念作斗争,并在返回选项(某物)的情况下平放到墙上.我弹出问题,有用的答案流入.

问题是,作为Scala的新手,有什么正确的方法?

目前我这样做:

import util.parsing.json.JSON._

object JsonSoap {
  def main(args: Array[String]) {
    val x = parseFull("""{"name":"Joe","surname":"SOAP"}""")

    val y = x collect {
      case m: Map[_, _] => m collect {
        case (key: String, value: String) => key -> value
      }
    }

    val z = for (m <- y; name <- m.get("name"); surname <- m.get("surname"))
    yield {
      <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
          <Person>
            <Name>{name}</Name>
            <Surname>{surname}</Surname>
          </Person>
        </soap:Body>
      </soap:Envelope>
    }

    println(z)
  }
}
Run Code Online (Sandbox Code Playgroud)

我仍然坚持使用Some()

解决我的问题有一个很好的模式吗?当然,这必须是一个很好的探索领域.我该如何改进我的代码?

scala

8
推荐指数
2
解决办法
8679
查看次数

使用Scala的XML到JSON

对于这样的XML代码段:

val fruits =
<fruits>
  <fruit>
    <name>apple</name>
    <taste>ok</taste>
  </fruit>
  <fruit>
    <name>banana</name>
    <taste>better</taste>
  </fruit>
</fruits>
Run Code Online (Sandbox Code Playgroud)

做类似的事情:

fruits \\ "fruit"
Run Code Online (Sandbox Code Playgroud)

将返回一个类型序列,scala.xml.NodeSeq其中包含所有水果和子节点.

将此转换为JSON对象列表的最佳方法是什么?我正在尝试将我的水果列表发送回浏览器.我一看scala.util.parsing.json.JSONObjectscala.util.parsing.json.JSONArray,但我不知道如何从NodeSeq获得后者的任何人.

如果可能的话,我很想看看它是如何使用普通的Scala代码完成的.

scala

8
推荐指数
1
解决办法
9104
查看次数

为什么我的正常递归和尾递归示例之间存在舍入差异?

在使用尾递归示例进行操作时,我注意到正常递归调用和尾递归调用的结果之间存在小的差异:

scala> def fact(n: Int): Double = if(n < 1) 1 else n * fact(n - 1)
fact: (n: Int)Double

scala> fact(30)
res31: Double = 2.6525285981219103E32

scala> @tailrec def fact(n: Int, acc: Double = 1): Double = if(n < 1) acc else fact(n - 1, n * acc)
fact: (n: Int, acc: Double)Double

scala> fact(30)
res32: Double = 2.652528598121911E32
Run Code Online (Sandbox Code Playgroud)

出于好奇,有人可以向我解释为什么或在哪里进行四舍五入.我的猜测是因为Scala编译器将尾递归版本转换为循环,所以acc在循环的每次迭代中都会分配参数,并且小的舍入错误会在那里滑动.

scala

8
推荐指数
3
解决办法
594
查看次数

如何在SBT中禁用特定依赖项的日志记录?

我有以下build.sbt文件:

version := "0.1"

scalaVersion := "2.10.0-RC1"

scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")

resolvers ++= Seq(
  "sonatype releases" at "https://oss.sonatype.org/content/repositories/releases/",
  "sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/",
  "typesafe repo" at "http://repo.typesafe.com/typesafe/releases/",
  "spray repo" at "http://repo.spray.io/"
)

libraryDependencies ++= Seq(
  "io.spray"           %   "spray-can"         % "1.1-M4.2"
  ,"io.spray"          %   "spray-routing"     % "1.1-M4.2"
  ,"io.spray"          %   "spray-testkit"     % "1.1-M4.2"
  ,"io.spray"          %%  "spray-json"        % "1.2.2"     cross CrossVersion.full
  ,"com.typesafe.akka" %%  "akka-actor"        % "2.1.0-RC1" cross CrossVersion.full
  ,"org.specs2"        %%  "specs2" % "1.12.2" % "test"      cross CrossVersion.full
  ,"com.typesafe"      %   "slick_2.10.0-RC1"  % "0.11.2"
  ,"com.h2database" …
Run Code Online (Sandbox Code Playgroud)

scala logback slf4j sbt slick

8
推荐指数
1
解决办法
3112
查看次数

在Scala中验证电子邮件一行

在我的代码中添加简单的电子邮件验证,我创建了以下函数:

def isValid(email: String): Boolean = if("""(?=[^\s]+)(?=(\w+)@([\w\.]+))""".r.findFirstIn(email) == None)false else true
Run Code Online (Sandbox Code Playgroud)

这将通过电子邮件喜欢bob@testmymail.com和失败的邮件bobtestmymail.com,但邮件与空格字符滑过,就像bob @testmymail也将返回true.

我可能在这里很傻......

regex scala

8
推荐指数
2
解决办法
8726
查看次数