Java development blog (tips, notes, …)
"First, solve the problem. Then, write the code." (John Johnson)

    Use a URIResolver if the stylesheets can not be found in test

    2017-09-04 19:00:00 +0000

    I use quiet a lot XSL transformations at work. Since they tend to grow rather big with every new rule I implement, I split the file up. Every file has it’s own domain/rule. This works fine. I also write a new junit test for every new xslt rule/template, to ensure that I did not break anything.

    At somepoint in every new project I get the error, that a transformation in production (src/main) does work, but in test (src/test) does not. After a few minutes of searching I come to the conclusion, that a import/include stylesheet can not be found. A few minutes later and the penny dropes… I always forget to implement the URIResolver. Every time…

    import java.io.InputStream;
    import javax.xml.transform.Source;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.URIResolver;
    import javax.xml.transform.stream.StreamSource;
    
    
    public class XsltURIResolver implements URIResolver {
    
    
        @Override
        public Source resolve(String href, String base) throws TransformerException {
            try {
                final InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(href);
                return new StreamSource(inputStream);
            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
        }
    }

    And they setting it:

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    transformerFactory.setURIResolver(new XsltURIResolver()); 

    letsencrypt "Certbot doesn't know how to automatically configure the web server on this system"

    2017-08-20 19:00:00 +0000

    Had a little problem with letsencrypt, when I tried to renew the certificates, the following error showed:

    root@tsunade / # letsencrypt --renew-by-default
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.

    So I looked in /var/log/letsencrypt/letsencrypt.log :

    2017-08-20 18:43:37,178:DEBUG:certbot.main:Root logging level set at 20
    2017-08-20 18:43:37,179:INFO:certbot.main:Saving debug log to /var/log/letsencrypt/letsencrypt.log
    2017-08-20 18:43:37,179:DEBUG:certbot.main:certbot version: 0.10.2
    2017-08-20 18:43:37,179:DEBUG:certbot.main:Arguments: ['--apache']
    2017-08-20 18:43:37,180:DEBUG:certbot.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#webroot,PluginEntryPoint#null,PluginEntryPoint#manual,PluginEntryPoint#standalone)
    2017-08-20 18:43:37,180:DEBUG:certbot.plugins.selection:Requested authenticator apache and installer apache
    2017-08-20 18:43:37,180:DEBUG:certbot.plugins.selection:No candidate plugin
    2017-08-20 18:43:37,180:DEBUG:certbot.plugins.selection:Selected authenticator None and installer None

    So…. I had no clue, but a quick search on stackoverflow showed that I missed a package

    root@tsunade / # apt-get install python-certbot-apache
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following additional packages will be installed:
      augeas-lenses libaugeas0 python-augeas

    And all ended well. I renewed the certificates:

    root@tsunade / # letsencrypt --renew-by-default
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Which names would you like to activate HTTPS for?
    -------------------------------------------------------------------------------                                                                                                              
    1: my domains
    ...
    -------------------------------------------------------------------------------
    Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
    Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org 
    Renewing an existing certificate
    ...

    Link: Xsd Reducer

    2017-08-11 18:00:00 +0000

    Simplify and reduce the size of the Xsd by deleting the unused declarations from it : http://www.abhortsoft.hu/xsdreducer/xsd_reducer.html

    Just does what it says. Good little tool.

    java is cool

    2017-02-02 18:00:00 +0000

    http://www.javais.cool :” There are many resources on news sites and blogs that carry valuable insights for your projects. Some are already well known, some a bit less and together they will keep you on the right track. Here are our favorites:”

    Commit empty folder structure (with git)

    2015-09-05 17:50:00 +0000

    In Git, you can’t commit empty folders, because Git does not actually save folders, only files. You’ll have to create some placeholder file inside those directories, if you actually want them to be “empty”.

    You could create a empty .gitignore file inside each empty folder. I find this confusing, since the goal is to keep the empty directories, not ignore them or some files inside of them.

    With the following script you can create a file named “.gitkeep” inside every empty folder. The filename has no meaning for git, but it makes it purpose clear.

    find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;

subscribe via RSS