Java

java

Changing JAX-WS Webservice Client’s Target Endpoint Url

Let say you have a wsdl that you get from an url, but you want to fire the webservice generated from it to a different url, see my code below for example,

<service name="TestingService">
	<port name="TestingServicePort" binding="tns:TestingServicePortBinding">
		<soap:address location="http://localhost:8084/WSDLTest/TestingService" />
	</port>
</service>

as you can see, my wsdl is pointing at “http://localhost:8084/WSDLTest/TestingService”. But what if i want to fire my webservice client into another url, without changing the original wsdl. For example, my new url would be http://192.168.0.101/WSDLTest/TestingService.

Well, it’s actualy quite easy. All you need to do is only casting the service interface into interface BindingProvider, and add a new url property. This is what my code would look like,


             TestingService_Service tss = new TestingService_Service();
             TestingService testingService = tss.getTestingServicePort();
             ((BindingProvider) testingService).getRequestContext()
                .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://192.168.0.101/WSDLTest/TestingService");

If you fire your service again, it will point to a new url (http://192.168.0.101/WSDLTest/TestingService) instead of the old one (http://localhost:8084/WSDLTest/TestingService).

Create an Expirable Token Using Java

On this article, im trying to create a simple java app that will hold a value that have an expiration time. I usually use this for handling request session or to hold a value that have a time limitation. Btw, i’m using EhCache for handling expiration time.

First is a simple pom.xml,

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.edw</groupId>
    <artifactId>ExpirableToken</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>ExpirableToken</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.7.4</version>
        </dependency>           
    </dependencies>
</project>

And a simple xml file to hold ehcache configurations,

<ehcache updateCheck="false" monitoring="off" dynamicConfig="false">
    
    <diskStore path="java.io.tmpdir" />
    
    <defaultCache maxEntriesLocalHeap="0" eternal="false"
                  timeToIdleSeconds="1200" timeToLiveSeconds="1200">
    </defaultCache>
    
    <!-- a 3 seconds -->
    <cache name="token" maxElementsInMemory="1000" eternal="false"
           overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="3" 
           timeToLiveSeconds="3" memoryStoreEvictionPolicy="LFU" statistics="false" transactionalMode="off">       
    </cache>                
    
    <!-- a 10 seconds -->
    <cache name="action" maxElementsInMemory="1000" eternal="false"
           overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="10" 
           timeToLiveSeconds="10" memoryStoreEvictionPolicy="LFU" statistics="false" transactionalMode="off">       
    </cache>        
    
</ehcache>

And this is my java class that i use for testing,

package com.edw.expirabletoken;

import java.util.Date;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class App {

    private CacheManager cacheManager= CacheManager.create();
    private Cache tokenCache = cacheManager.getCache("token"); // a 3 seconds cache
    private Cache actionCache = cacheManager.getCache("action"); // a 10 seconds cache

    public App() {
    }

    private void action() throws Exception {
        // add into a 3 seconds cache
        Element regElement = new Element("name", "edwin 3 seconds");
        tokenCache.put(regElement);
        
        // add into a 10 seconds cache
        Element regElement2 = new Element("name", "edwin 10 seconds");
        actionCache.put(regElement2);
        
         // 2 seconds sleep
         Thread.sleep(2000);
         getCacheContent();
         
         // 5 seconds sleep
         Thread.sleep(5000);
         getCacheContent();
         
         // 10 seconds sleep
         Thread.sleep(10000);
         getCacheContent();
    }
    
    private void getCacheContent() {
        Element element3 = tokenCache.get("name"); // get value from a 3 seconds cache
        if (element3 != null) {
            String value = (String) element3.getObjectValue();
            System.out.println(new Date()+" -- "+value);    
        } else {
            System.out.println(new Date()+" -- Empty Cache");
        }
        
         Element element10 = actionCache.get("name"); // get value from a 10 seconds cache
         if (element10 != null) {
            String value = (String) element10.getObjectValue();
            System.out.println(new Date()+" -- "+value);    
        } else {
            System.out.println(new Date()+" -- Empty Cache");
        }
    }
    
    public static void main(String[] args) throws Exception {
        App app = new App();
        app.action();
    }
}

This is what the result on my Netbeans’ console,

This is my Netbeans’ project structure,

Well i hope this helped others, have fun using ehcache.

[Book Review] Packt Publishing’s Ebook, Java Persistence with MyBatis 3

Among lots of java frameworks, MyBatis is a very popular especially because it is a database-centric-framework and it has a shallow and short learning curve, and today im trying to do a book review for it. The book that i want to review is Packt Publishing’s Java Persistence with MyBatis 3. You can see the ebook on this link, http://www.packtpub.com/java-persistence-with-mybatis-3/book.

This book’s author, K. Siva Prasad Reddy, really show the reasons of why MyBatis is very popular by providing with various code samples, from simple “down to earth” codes to a much more complicated codes, such as Spring Framework integration and Caching strategy.

These are the Table of Contents of the book,
Chapter 1: Getting started with MyBatis
Chapter 2: Bootstrapping
Chapter 3: SQL Mappers using XML
Chapter 4: SQL Mappers using Annotations
Chapter 5: Integration with Spring

So needless to say, this is the kind of ebook that i wish i had read since long time ago.

[Java] How to Convert XMLGregorianCalendar to java.util.Date and The Other Way Around

This is a simple code snippet on how to convert XMLGregorianCalendar into java.util.Date and java.util.Date into javax.xml.datatype.XMLGregorianCalendar. Usually i found XMLGregorianCalendar everytime im trying to convert java bean into webservice using wsdl2java.

But there are some time when i need to convert those XMLGregorianCalendar objects and change them into java.util.Date so i could do a much more various process on them. So this is how i convert XMLGregorianCalendar into java.util.Date,

            
            XMLGregorianCalendar calendar = responseMessage.getDate();
            java.util.Date date = calendar.toGregorianCalendar().getTime();

and this is how i convert java.util.Date into XMLGregorianCalendar

            GregorianCalendar gregorianCalendar = new GregorianCalendar();
            gregorianCalendar.setTime(new Date());
            responseMessage.setDate(new XMLGregorianCalendarImpl(gregorianCalendar));

For example, im using XMLGregorianCalendar value “2012-10-15T00:00:00”. Hope it would help others (H)

How To Change Apache Tomcat’s Server Name

On this tutorial, i’ll show you how to change Apache Tomcat’s server name. This is the screenshot from a regular Apache Tomcat,

And with a simple configuration on server.xml,

 <Connector port="8080" protocol="HTTP/1.1"
         connectionTimeout="20000"
	 server="Why So Serious"
         redirectPort="8443" />

It will change my Tomcat’s server name into,

Not hard actually 😉