Dieses Blog durchsuchen

Mittwoch, 28. Oktober 2015

Using sublime in MacOSX or Linux terminal

To use SublimeText editor within your console just create a link like

ln -fs /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl    /usr/local/bin/sublime

and from now on you could use Sublime in your console like this

andre ~$ sublime .bashrc 

Mittwoch, 21. Oktober 2015

JUnit in eclipse

Running JUnit in eclipse shouldn't be a problem. I run into a

java.lang.NoSuchMethodError: org.junit.runner.Description.getClassName()Ljava/lang/String;

while using a bunch of projects in eclipse. Reason for that error was a project, which has an older version of Junit in his build path. Removing the old ref solves the problem.

set file.encoding in a JVM

To set the default file.encoding in a JVM you could set it in the JVM startup as -Dfile.encoding=UTF-8 or in JAVA_TOOLS_OPTIONS with the same part. But if you want to set it programmatically after the JVM already started?
A System.setProperty("file.encoding", "UTF-16"); will only set the file.encoding property. All other classes which rely on the defaultCharset, like all Streams and Buffers won't recognize that change. Here is a Junit Test, which shows you how to reset the Charset.defaultCharset field:


package de.kambrium;

import java.lang.reflect.Field;
import java.nio.charset.Charset;

import org.junit.Before;
import org.junit.Test;

public class CharsetTest {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void test() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        dump("Actual system config");
        System.setProperty("file.encoding", "UTF-16");
        dump("Config after System.setProperty(\"file.encoding\", \"UTF-16\")");
        Field cs = Charset.class.getDeclaredField("defaultCharset");
        cs.setAccessible(true);
        cs.set(null, null);
        dump("Config after manipulating defatulCharset field");
    }

    private void dump(String msg) {
        System.out.println(msg);
        System.out.println("****************************************************************");
        System.out.println("file.encoding          = " + System.getProperty("file.encoding"));
        System.out.println("defaultCharset         = " + Charset.defaultCharset());
        System.out.println("****************************************************************");
        System.out.println("");
    }
}


Output will look like this

Actual system config
****************************************************************
file.encoding          = UTF-8
defaultCharset         = UTF-8
****************************************************************

Config after System.setProperty("file.encoding", "UTF-16")
****************************************************************
file.encoding          = UTF-16
defaultCharset         = UTF-8
****************************************************************

Config after manipulating defatulCharset field
****************************************************************
file.encoding          = UTF-16
defaultCharset         = UTF-16
****************************************************************

Dienstag, 28. April 2015

Script for grabbing a root ca cert of a website

If you are using self signed certs or you are using certs, which are not part of the standard cacerts of your JDK you need to get the root ca cert from the desired website. To do so you might use the following script:

#!/bin/bash
ADDRESS=$1
echo -n | openssl s_client -connect $ADDRESS:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./$ADDRESS.cert 



now you should have a cert file, which you could easily add to your cacert file of the jdk with this command:


keytool -importcert -alias startcom -file $ADDRESS.cert -keystore cacerts -storepass changeit

cacerts is located in JAVA_HOME/jre/lib/security (i.e. Mac OSX /Library/Java/JavaVirtualMachines/jdkX.X.X_XX.jdk/Contents/Home/jre/lib/security/cacerts)

This command adds your cert to the cacerts of the jdk and allows any java app using the jdk to connect via ssl to the desired website. Downsite of this trick is if you move to another server or workstation you might always need to patch the cacerts with your cert. 
So the best way is to prepare a keystore with your add on certs and add it to the Java System property

-Djavax.net.ssl.keyStore=/tmp/mykeystore.jks
or even in your Java Code by using System.setProperty. This will ensure that your java prog uses trusts the certs you want to trust.



Donnerstag, 10. Oktober 2013

Proximity sensor on IPhone 5 and IOS7 not working

Since the update to IOS7 on my IPhone 5 I sometimes switched the speaker on during a running phone call with my ears. To avoid this you should do the follwing after update your device to IOS 7:

  1. Go to Settings->General->Reset->Reset All Settings
  2. Reboot your device

thats it. A simple test can be done by calling your voice mail an during the call just put your finger on the sensor (it's located  left beside the camera on IPhone5). The sensor will turn of the display once you finger approaches the sensor.

Mittwoch, 9. Oktober 2013

HP-UX WebLogic and a Jaxb2Marshaller startup failed with ArrayIndexOutOfBoundsException

I ran in to a problem on a weblogic 10.3.5 instance where we installed an ear file with a new springframework ws application. This application uses a Jaxb2Marshaller for handling the ws messages in a spring config like this:


    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"
          p:contextPath="com.mycomp.ws..client.model" />
    <bean id="sampleWsTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory"/>
    <property name="marshaller"      ref="marshaller" />
    <property name="unmarshaller"   ref="marshaller" />
    </bean>

the weblogic container failed to start up the application with the follwing messages:

org.springframework.web.context.ContextLoader Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'service': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.ws.client.core.WebServiceTemplate net.kambrium.service.impl.ServiceImpl.webServiceTemplate; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'WsTemplate' defined in class path resource [webservices.xml]: Cannot resolve reference to bean 'marshaller' while setting bean property 'marshaller'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'marshaller' defined in class path resource [webservices.xml]: Invocation of init method failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.ws.client.core.WebServiceTemplate net.kambrium.service.impl.ServiceImpl.webServiceTemplate; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'WsTemplate' defined in class path resource [webservices.xml]: Cannot resolve reference to bean 'marshaller' while setting bean property 'marshaller'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'marshaller' defined in class path resource [webservices.xml]: Invocation of init method failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'WsTemplate' defined in class path resource [webservices.xml]: Cannot resolve reference to bean 'marshaller' while setting bean property 'marshaller'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'marshaller' defined in class path resource [webservices.xml]: Invocation of init method failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'marshaller' defined in class path resource [webservices.xml]: Invocation of init method failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1

after deep diving into a lot of config an other WebLogic settings I found one settings, which was caused the problem. Within the startup of the WebLogic we used some of the tuning options HP recommends for performance reasons:

-XX:-StackTraceInThrowable



after removing that flag from the startup everything went fine. Looks like one of the initialization routines of Jaxb2 or of one of their dependent libs rely on interpreting the StackTrace. With that option we remove the stacktrace and with that we remove the chance for interpreting getStackTrace().

Dirk finally find out the reason for this error within the jaxb implementation. The jaxb uses a Util class, which uses the follwoing code



    public static Logger getClassLogger() {
        try {
            StackTraceElement[] trace = new Exception().getStackTrace();
            return Logger.getLogger(trace[1].getClassName());
        } catch( SecurityException _ ) {
            return Logger.getLogger("com.sun.xml.bind"); // use the default
        }
    }

well and that's it. The getStackTrace method returns null if the parm -StackTraceInThrowable is set thus resulting in ArrayIndexOutOfBoundsException. Thanks for not catching Exception beside Security Exception.

Freitag, 13. September 2013

Eclipse Keppler and the missing type ahead ctrl-space

Well when coding in eclipse I tend to hit ctrl-space frequently. Usually you'll see the proposed methods or vars of the class you point at. After installing a special Keppler build from one of our customers I hit ctrl-space and see a screen with just new, nls, runnable and to array:


well thats the new kind of type ahead from the eclipse guys? Ah, not at all!

Just go to Windows->Preferences->Java->Editor->Content Assist->Advanced and activate "Java Proposals" again:


eh voilá