Kraken XMLRPC Servlet
Kraken XMLRPC provides declarative XMLRPC service programming. Just implement your XMLRPC service logic and add some annotations like this:
@Component(name = "example-hello-xmlrpc")
@Provides
public class HelloService implements XmlRpcHttpService {
@XmlRpcMethod(alias = "example", method = "hello")
public String hello(String name) {
return "hello, " + name;
}
}
Kraken HTTP Daemon, Kraken XMLRPC, and Kraken XMLRPC Servlet bundles are used for XMLRPC HTTP service.
XMLRPC Type Mappings
| XMLRPC Type | Java Type |
| i4 | Integer |
| int | Integer |
| string | String |
| boolean | Boolean |
| double | Double |
| dateTime.iso8601 | Date |
| base64 | byte[] |
| struct | Map<String, Object> |
| array | Object[] |
XMLRPC Service Tutorial
Create new Project
Use maven command:
mvn archetype:generate -DarchetypeRepository=http://download.krakenapps.org
-DarchetypeGroupId=org.krakenapps -DarchetypeArtifactId=kraken-template -DarchetypeVersion=1.0.1
-DgroupId=org.krakenapps.example -DartifactId=xmlrpc -Dversion=1.0.0
-Dpackage=org.krakenapps.example.xmlrpc -Dpackaging=jar
Configure pom.xml:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>org.krakenapps.example</groupId> <artifactId>xmlrpc</artifactId> <version>1.0.0</version> <packaging>bundle</packaging> <name>Kraken XMLRPC Example</name> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>2.0.1</version> <extensions>true</extensions> <configuration> <instructions> <Bundle-SymbolicName>org.krakenapps.example.xmlrpc</Bundle-SymbolicName> <Export-Package>org.krakenapps.example.xmlrpc</Export-Package> <Import-Package>*</Import-Package> </instructions> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.4.0</version> <executions> <execution> <goals> <goal>ipojo-bundle</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.krakenapps</groupId> <artifactId>kraken-api</artifactId> <version>1.9.8</version> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.ipojo.annotations</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>org.krakenapps</groupId> <artifactId>kraken-xmlrpc-servlet</artifactId> <version>2.0.0</version> </dependency> </dependencies> </project>
Configure metadata.xml:
<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd" xmlns="org.apache.felix.ipojo"> <instance component="example-hello-xmlrpc" /> </ipojo>
<instance> config will initiate a HelloService iPOJO component instance.
Add HelloService
package org.krakenapps.example.xmlrpc;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Provides;
import org.krakenapps.servlet.xmlrpc.XmlRpcHttpService;
import org.krakenapps.servlet.xmlrpc.XmlRpcMethod;
@Component(name = "example-hello-xmlrpc")
@Provides
public class HelloService implements XmlRpcHttpService {
@XmlRpcMethod(alias = "example", method = "hello")
public String hello(String name) {
return "hello, " + name;
}
}
@Component and @Provides are iPOJO annotations. @Component declares new component named example-hello-xmlrpc. @Provides exposes HelloService as a XmlRpcHttpService service. XmlRpcMethodRegistry service in kraken-xmlrpc-servlet recognizes new XmlRpcHttpService and add all XMLRPC methods (annotated by @XmlRpcMethod) automatically.
Install Bundle
Install all requirements using kraken-xmlrpc-servlet package:
kraken@bombom kraken-env> pkg.install kraken-xmlrpc-servlet
Resolving {groupId: org.apache.felix, artifactId: org.apache.felix.ipojo, version: 1.4.0}
-> trying to download from http://download.krakenapps.org/
-> resolved
-> installing: org.apache.felix.ipojo 1.4.0
Resolving {groupId: org.jboss.netty, artifactId: netty, version: 3.2.2.Final}
-> trying to download from http://download.krakenapps.org/
-> resolved
-> installing: org.jboss.netty 3.2.2.Final
Resolving {groupId: org.krakenapps, artifactId: kraken-ipojo, version: 1.1.0}
-> trying to download from http://download.krakenapps.org/
-> resolved
-> installing: org.krakenapps.ipojo 1.1.0
Resolving {groupId: org.krakenapps, artifactId: kraken-servlet-api, version: 3.0.0}
-> trying to download from http://download.krakenapps.org/
-> resolved
-> installing: org.krakenapps.servlet.api 3.0.0
Resolving {groupId: org.krakenapps, artifactId: kraken-httpd, version: 1.0.0}
-> trying to download from http://download.krakenapps.org/
-> resolved
-> installing: org.krakenapps.httpd 1.0.0
Resolving {groupId: org.krakenapps, artifactId: kraken-xmlrpc, version: 1.1.0}
-> trying to download from http://download.krakenapps.org/
-> resolved
-> installing: org.krakenapps.xmlrpc 1.1.0
Resolving {groupId: org.krakenapps, artifactId: kraken-xmlrpc-servlet, version: 2.0.0}
-> trying to download from http://download.krakenapps.org/
-> resolved
-> installing: org.krakenapps.servlet.xmlrpc 2.0.0
Starting Bundles
-> [OK] org.apache.felix.ipojo 1.4.0
-> [OK] org.krakenapps.ipojo 1.1.0
-> [OK] org.jboss.netty 3.2.2.Final
-> [OK] org.krakenapps.servlet.api 3.0.0
-> [OK] org.krakenapps.httpd 1.0.0
-> [OK] org.krakenapps.xmlrpc 1.1.0
-> [OK] org.krakenapps.servlet.xmlrpc 2.0.0
Complete!
Install your example code:
kraken@bombom kraken-env> bundle.install file:///c:/users/xeraph/kraken-example xmlrpc/target/xmlrpc-1.0.0.jar bundle [8] loaded
Check bundle list and start your bundle:
kraken@bombom kraken-env> bundle.list [ ID] Symbolic Name Version Status ------------------------------------------------------------------ [ 0] org.apache.felix.framework 3.2.2 ACTIVE [ 1] org.apache.felix.ipojo 1.4.0 ACTIVE [ 2] org.jboss.netty 3.2.2.Final ACTIVE [ 3] org.krakenapps.ipojo 1.1.0 ACTIVE [ 4] org.krakenapps.servlet.api 3.0.0 ACTIVE [ 5] org.krakenapps.httpd 1.0.0 ACTIVE [ 6] org.krakenapps.xmlrpc 1.1.0 ACTIVE [ 7] org.krakenapps.servlet.xmlrpc 2.0.0 ACTIVE [ 8] org.krakenapps.example.xmlrpc 1.0.0 INSTALLED kraken@bombom kraken-env> bundle.start 8 bundle 8 started.
Configuration
Now, you can see your XMLRPC method is loaded:
kraken@bombom kraken-env> xmlrpc-servlet.list XMLRPC Methods ---------------- example.hello
And there is a HTTP context that serves XMLRPC:
kraken@bombom kraken-env> httpd.contexts
HTTP Contexts
---------------
HTTP Context [xmlrpc, sessions=0]
>>
Servlet Context [xmlrpc]
* Context Path=/
* URL Mappings
Exact Mappings
/xmlrpc => Servlet xmlrpc
Servlet xmlrpc
WebSocket path [/websocket], sessions [0]
However, it is still not exposed to the internet. Open web server port and bind XMLRPC http context:
kraken@bombom kraken-env> httpd.open 80 opened http server kraken@bombom kraken-env> httpd.addVirtualHost 80 xmlrpc added
Final configuration state should be:
kraken@bombom kraken-env> httpd.bindings Port Bindings --------------------- 0.0.0.0/0.0.0.0:80 virtual host: [.*], context: xmlrpc
If you connect http://localhost/xmlrpc, you will see following error message (XMLRPC use only POST method):
Test
You can use kraken xmlrpc client for test:
kraken@bombom kraken-env> xmlrpc-client.call http://localhost/xmlrpc example.hello 'xeraph' "hello, xeraph"
Maven Configuration
<dependency> <groupId>org.krakenapps</groupId> <artifactId>kraken-xmlrpc-servlet</artifactId> <version>2.0.0</version> </dependency>
Release
- 2.0.0 (2012-01-25)
- depends new kraken-httpd 1.0.0


