Monthly Archives: January 2013

Doing HTTPS communication with http:outbound-gateway

In Spring Integration when using http:outbound-gateway if you have to do https communication, you need to do the following trick,

<int-http:outbound-gateway id="my.outbound.gateway"
request-channel="request-channel" reply-channel="reply-channel"
url="https://localhost:8443/myservice/myService"
http-method="POST"
expected-response-type="java.lang.String">
</int-http:outbound-gateway>

Now you need to pass the keystore and trust store of the client and server as follows,

<bean id="trustStore">
<property name="targetObject" value="#{@systemProperties}" />
<property name="targetMethod" value="putAll" />
<property name="arguments">
<props>
<prop key="javax.net.ssl.trustStore"><jks key location></prop>
<prop key="javax.net.ssl.keyStorePassword">password</prop>
</props>
</property>
</bean>

<bean id="keystore">
<property name="targetObject" value="#{@systemProperties}" />
<property name="targetMethod" value="putAll" />
<property name="arguments">
<props>
<prop key="javax.net.ssl.keyStore"><jks key location></prop>
<prop key="javax.net.ssl.keyStorePassword">password</prop>
</props>
</property>
</bean>

There is also another way as mentioned in this article @ http://forum.springsource.org/showthread.php?115198-HTTPS-in-http-outbound-gateway

I hope this blog helped you.

Advertisements

SPARQL and dbpedia: Getting structured data from wikipedia

I was always wonder if we can extract structured data from Wikipedia. I stumbled up on DBPedia and SPARQL. DBPedia stores Wikipedia data as Dataset and it can be accessed using SPARQL. Let me demonstrate this with an example.

DBPedia has a SPARQL endpoint . And you can use SNORQL for exploring DBPedia. Let us execute the below SPARQL query in SNORQL and notice the resultset that is returned,

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT DISTINCT ?film_title ?star_name
where {?film_title rdf:type <http://dbpedia.org/ontology/Film> .
?film_titleĀ  foaf:name ?film_name .
?film_title rdfs:comment ?film_abstract .
?film_title dbpedia-owl:starring ?star .
?star dbpprop:name ?star_name
}
LIMIT 5

I get the results as below,

SPARQL results from DBPedia

SPARQL results from DBPedia

As good place to learn SPARQL is http://answers.semanticweb.com/ .

I hope this article helps you.

Debugging Spring Components with Namespace based configuration

Sometimes it hard to debug a Spring component especially if it is Namespace based standard spring components. In this blog I will explain how to debug a spring security component. Consider the below code,

<authentication-manager>
<authentication-provider>
<user-service id="userService">
<user name="${some-user}" password="${some-password}"
authorities="secure-access" />
</user-service>
</authentication-provider>
</authentication-manager>

In the above component if there is a problem with authorization, how do you know what value is being passed? How do you know which class is this and where to put the debug break point? If you notice “user-service” is just another bean with Spring id as “userService”. Namespace based configuration is a syntactic sugar for bean definition. Spring JUnit test and autowiring capability comes to your rescue. Define a simple test function as below,

@Autowired
@Qualifier("userService")
private Object userService;
@Test
public void testUserService(){
assertNotNull(userService);
logger.debug(userService);
}

Run the above test, it will show as green. The logger message will print InMemoryDaoImpl class. Once you know that this is the object you can modify the test as below and further debug,

@Autowired
@Qualifier("userService")
private InMemoryDaoImpl userService;
@Test
public void testUserService(){
assertNotNull(userService);
UserMap map = userService.getUserMap();
//Assuming that krishna is set as dynamic property for some-user
UserDetails user = map.getUser("krishna");
assertNotNull(user);
}

This is one way to debug it, but there might be few other ways. Please suggest me.

I hope this helped.