Write a thrift server in scala using scrooge and client in python or ruby - scala

I want to write a thrift service implementation in Scala (using Scrooge) but without the use of Finagle, since I couldn't write a ruby/python client for Finagle servers. The problem is that with scrooge the service doesn't seem to implement "Processor" class.
Assume I have a thrift definition like this:
service TestService {
void testFunction(1: string message);
}
and I generated the scala files using scrooge, when I tried to use the standard implementation of thrift for scala with that to run the server:
val st = new TServerSocket(9999)
val processor = new TestService.Processor(new TestServiceImpl)
val arg = new TThreadPoolServer.Args(st)
arg.processor(processor)
val server = new TThreadPoolServer(arg)
server.serve()
The generated TestService object doesn't seem to have the Processor inner class. Any idea how to do that without Finagle? or as another solution, how to write a python or ruby client to finagle thrift servers?

You must use the finagle thrift implementation with Scrooge. Note that it is all wire and IDL compatible, so you can use whatever implementations you want, given that you share the IDL.
You can write Ruby or Python clients for the finagle thrift service: it speaks the same protocol.

Based on the project you linked to, it appears that you have a transport mismatch between client and server.
Your python client is using the buffered transport:
transport = TTransport.TBufferedTransport(transport)
But your scala server is using the framed transport:
.codec(ThriftServerFramedCodec())
If you change the python client to use the framed transport, your issue should go away:
transport = TTransport.TFramedTransport(transport)

My problem has been solved by using the same transport in both python and scala.
in my python client.
transport = TTransport.TFramedTransport(transport)
You can find the sample working link

Related

Accessing GRPC context of request in scala

I can't find any example in scala/java where the server side is accessing the context of a grpc request (with scalapb / grpc.io). I can find many examples in golang. I found some of with akka grpc but I am using scalapb and grpc.io
If anyone knows of a repo in github that uses it or can layout the steps needs to access it, it would be very kind of you
In grpc-java and ScalaPB you get access to the request's metadata through client and server interceptors. See: https://grpc.github.io/grpc-java/javadoc/io/grpc/ServerInterceptor.html
Example: https://github.com/saturnism/grpc-java-by-example/tree/master/metadata-context-example/src/main/java/com/example/grpc/server

Marklogic : JAVA API - Dynamic Database and REST Server

I am trying to see whether MarkLogic Java API can be used to create a content database and REST Server?
I went through te Java API but I dont see any reference.
Is it possible to create a REST Server through MarkLogic Java API?
I appreciate any links or pointers regarding this.
No, that's beyond the scope of the Java Client API. The Java Client API must connect to a REST Server after it's already created. You can, however, use the /rest-apis service on port 8002 via your favorite generic REST client API for Java. To see an example of how to do this with Apache HttpClient, see Bootstrapper.java. You can use it directly like the unit tests setup util TestServerBootstrapper.java does with this code:
Bootstrapper.main(new String[] {
"-configuser", username,
"-configpassword", password,
"-confighost", host,
"-restserver", "java-unittest",
"-restport", ""+port,
"-restdb", "java-unittest"});

Extract HttpServletRequest from akka-http

We are migrating our application from spray to akka-http. We have a requirement to fetch few attributes from HttpServletRequest (set by filters).
Spray has a provision to extract HttpServletRequest by setting spray.servlet.servlet-request-access to on, like:
def httpServletRequest(requestContext: RequestContext): Option[HttpServletRequest] = {
requestContext.request.headers collect { case ServletRequestInfoHeader(hsRequest) => hsRequest } headOption
}
However, I couldn't find similar provision in akka-http. Is there a we can acheive this in akka-http?
Update:
As per AKKA-http deployment, spray-servlet is not yet ported to akka-http, and akka runs on embeded webserver. Where as our application runs on Tomcat, So we need to wait for sometime to use akka-http on tomcat.
spray-servlet is not yet ported to akka-http
Don't hold your breath. The Akka team didn't port over the spray-servlet module to Akka HTTP, because servlet containers don't fill well with the reactive approach to which Akka adheres.

TCP socket with SSL on Scala with Akka

Using Scala 2.10 and Akka 2.3.4, I've put together a simple proxy server that accepts incoming TCP connections and then proxies those messages to a remote server. Things are working with plain text, but I'm stuck with SSL.
Briefly, this is how I launch my non-secure server for incoming connections:
val server = system.actorOf(Props(new LegacyTCPServer), name = "my-tcp-server")
implicit val bindingTimeout = Timeout(1.second)
import system.dispatcher // execution context for the future
val boundFuture = IO(Tcp) ? Tcp.Bind(server, endpoint)
boundFuture.onSuccess { case Tcp.Bound(address) =>
println("Fantastic! We have a connection: " + address)
}
I can connect to this server via telnet, but now I'd like to move no to opensl. I guess there must be some configuration options for that, but I can't seem to parse it from the documentation: http://doc.akka.io/docs/akka/2.3.4/scala.html
I have seen some (non-functional) examples using akka 2.2.x that use a TCPPipelineHandler, e.g.,
https://groups.google.com/forum/#!topic/akka-user/auErrrk9wS0
https://github.com/betehess/ping-pong-bot/blob/master/app/ircbot/IrcClient.scala#L183
but TCPPipelineHandler doesn't seem to exist in akka 2.3.x, so that feels like a dead end.
I would love it if someone could provide an example of how to set up a tcp socket over ssl using current versions of Scala & Akka.
Please let me know if you'd like more information. Thanks!
spray is HTTP server/client built on top of Akka IO.
There is a pipelining infrastructure and SslTlsSupport in "io.spray" % "spray-io" % "1.3.1" package. I use it in a project, I'm currently working on. For more details, please see how it is configured for HttpServerConnection in spray.
You would need to refactor your code to use pipelines from spray, from my experience code becomes much easier if you split your code into multiple stages each responsible for a small piece.

XDS.b testing with SoapUI

I have to implement a simple client to a XDS.b server (SubmitObjectRequest and RetrieveDocumentSetRequest operations), but I'm struggling to get even a simple example of use to work.
I've tried using Mirth Connect's Channel for XDS.b also, but with no use. I even tried to copy its SOAP envelope to use with SoapUI. Didn't work.
I'm using HIEOS deployed on Glassfish as my XDS.b server.
I'm lost and confused. Could anyone give me a guidance on how to make this work?
If the HIEOS is deployed correctly within the Glassfish the service endpoint provides a wsdl definition where the interface is specified. Check the Glassfish for the wsdl of the service.
http://localhost:8080/my-ws/simple?WSDL
Quelle: docs.oracle.com/cd/E18930_01/html/821-2418/gbiyw.html
The list of provided endpoints you can see here:
https://kenai.com/projects/hieos/pages/WebServices
So to retrieve the wsdl you should use for example:
http://localhost:8080/axis2/services/xdsrepositoryb?wsdl
which applies for the ProvideAndRegisterDocumentSet-b transaction of the XDS Repository actor.
You can use the WSDL definition to create a WS request using SOAP UI at first.
SOAP UI creates a request based upon the wsdl definition which can be used to
test a against your XDS repo.
When you know how a SOAP request must be constructed you can try it using Mirth or
create your own client using Apache CXF http://cxf.apache.org/ for example.
Or you use AXIS2 to create a client from the WSDL. Of course does Visual Studio and C# also offer mechanisms to create a WS client directly from a WSDL definition.