středa 18. května 2016

How to get fully qualified name of Java class from .class file

I was creating a utility that uploads java classes using web browser to runtime environment. The problem was how to get fully qualified name of class when I obtain just the .class file without information about path of packages. For example imagine we have com.company.MyCustom class, the class is uploaded via web browser to application server as a MyCustom.class file without any information about packages. But the server has to know the packaging directory structure to store the .class file properly to classpath.

I studied the .class file internal structure to obtain the class name including packages from the content of the .class file. The structure is very well documented is the specification here: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html , but it shows little bit troublesome to parse the file in pure Java. 

Finally I found the Apache Common BCEL (http://commons.apache.org/proper/commons-bcel/manual.html) project. It is much wider that I need and contains also ability to obtain the full class name from class using 3 lines of code:

FileInputStream input = new FileInputStream(new File("MyCustom.class")); ClassParser parser = new ClassParser(input,classname);
JavaClass javaClass = parser.parse();
String fullClassname = javaClass.getClassName();

Really easy isn't it?




čtvrtek 14. ledna 2016

WebSphere Maven Repository

Pokud potřebujete použít závislosti na WebSphere kinhovny, je možné se odkázat na Maven repository:

http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/maven/repository/



 <repositories>
    <repository>
      <id>IBM</id>
      <name>IBM Maven2 Repository</name>
      <url>http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/maven/repository/</url>
    </repository>
  </repositories>



com.ibm.tools.target:was-liberty:pom:8.5.x.3:provided




\- com.ibm.tools.target:was-liberty:pom:8.5.x.3:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.basics:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.clusterMember:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.collectiveController:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.config:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.connectionpool:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.distributedMap:jar:2.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.dynamicRouting:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.ejbcontainer:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.endpoint:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.hpel:jar:2.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.j2eemanagement:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.jaxrs20:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.json:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.kernel.service:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.messaging:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.monitor:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.oauth:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.restConnector:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.scalingMember:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.scriptMetric:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.security:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.security.authorization.saf:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.security.registry.saf:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.servlet:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.sessionstats:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.transaction:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.webCache:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.webcontainer.security.app:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.zosLocalAdapters:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.anno:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.application:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.artifact:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.classloading:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.collectiveMember:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.containerServices:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.globalhandler:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.httptransport:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.javaeedd:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.jsp:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.embeddable:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.filemonitor:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.metatype:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.service:jar:1.3.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.logging:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.restHandler:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.servlet:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.ssl:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.threading:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.timedOperations:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.webCache:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.zosConnect:jar:1.0.9:provided
   +- javax.annotation:javax.annotation-api:jar:1.2:provided
   +- javax.batch:javax.batch-api:jar:1.0:provided
   +- javax.enterprise:cdi-api:jar:1.2:provided
   |  \- javax.inject:javax.inject:jar:1:provided
   +- javax.enterprise.concurrent:javax.enterprise.concurrent-api:jar:1.0:provided
   +- javax.resource:javax.resource-api:jar:1.7:provided
   +- javax.ejb:javax.ejb-api:jar:3.2:provided
   +- javax.el:javax.el-api:jar:3.0.0:provided
   +- javax.interceptor:javax.interceptor-api:jar:1.2:provided
   +- javax.security.jacc:javax.security.jacc-api:jar:1.5:provided
   +- javax.security.auth.message:javax.security.auth.message-api:jar:1.1:provided
   +- javax.mail:javax.mail-api:jar:1.5.0:provided
   |  \- javax.activation:activation:jar:1.1:provided
   +- javax.xml.bind:jaxb-api:jar:2.2.10:provided
   +- javax.ws.rs:javax.ws.rs-api:jar:2.0:provided
   +- javax.xml.ws:jaxws-api:jar:2.2.11:provided
   |  +- javax.xml.soap:javax.xml.soap-api:jar:1.3.5:provided
   |  \- javax.jws:jsr181-api:jar:1.0-MR1:provided
   +- javax.jms:javax.jms-api:jar:2.0:provided
   +- javax.faces:javax.faces-api:jar:2.2:provided
   +- javax.json:javax.json-api:jar:1.0:provided
   +- javax.servlet.jsp:javax.servlet.jsp-api:jar:2.3.1:provided
   +- org.apache.taglibs:taglibs-standard-spec:jar:1.2.5:provided
   +- javax.management.j2ee:javax.management.j2ee-api:jar:1.1.1:provided
   +- org.eclipse.persistence:javax.persistence:jar:2.1.0:provided
   +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
   +- javax.transaction:javax.transaction-api:jar:1.2:provided
   +- javax.validation:validation-api:jar:1.1.0.Final:provided
   +- javax.websocket:javax.websocket-api:jar:1.1:provided
   +- wsdl4j:wsdl4j:jar:1.6.3:provided
   +- org.osgi:org.osgi.compendium:jar:4.2.0:provided
   \- org.osgi:org.osgi.core:jar:4.3.1:provided

úterý 5. ledna 2016

Spring Initializr

Zajímavý koncept přípravy nového Spring Boot projektu, který stojí za pozornost. Tvůrci původně zamýšleli vyrobit jednoduchou aplikaci pro interní účely, ale Initializr se stal často používanou aplikací celé Spring komunity. Initializr lze použít buď z prohlížeče http://start.spring.io, přímo z vývojového prostředí Eclipse STS nebo IntelliJ Idea anebo dokonce z příkazové řádky (příkaz curl http;//start.spring.io).


Ve formuláři Initializr vývojář zaškrtne potřebné technologie, které chce mít v základu projektu předpřipraveny. Tlačítko Generate projekt pak připraví zip soubor s projektem. V současné verzi lze vybrat Maven nebo Gradle projekt.

středa 30. prosince 2015

Vaadin 7

Na Vaadin (https://vaadin.com) mě upozornil můj kolega. Jsem mu neskonale vděčný, protože se jedná o hodně zajímavý framework. Jeho snadné použití a efektní výsledky mě mile překvapily. Rozhodně stojí za prozkoumání.

Instalace Vaadin plugin do Eclipse

https://vaadin.com/book/-/page/getting-started.eclipse.html