2013年10月21日月曜日

Windows Defenderの自動定義更新

Windows Defenderの定義更新はWindows Updateに統合されていて
自動更新させようとするとWindows Updateの自動更新も起動してしまいます。
そうすると勝手に再起動されて困ります。


そんなときに試したいのが
Windows Defenderの定義のみを更新するコマンドです

これ、

"C:\Program Files\Windows Defender\MpCmdRun.exe" -SignatureUpdate


私は、プロンプトの表示を避けたいので
下のようなvbsファイルを作成してTaskスケジューラに登録しています


WindowsDefenderUpdate.vbs :

Set ws = CreateObject("Wscript.Shell")

ws.run "cmd /c ""C:\Program Files\Windows Defender\MpCmdRun.exe"" -SignatureUpdate", vbhide


2013年10月5日土曜日

JAXB アノテーションを利用したJSON マッピング

Jerseyを使っているとレスポンス用のJSONの定義クラスに
アノテーションの@XmlTransitで省略したり
@XmlElement(name="element")で名前変更したりして
ObjectをJAXB経由でJSONに自動でパースさせてたりしますが
その定義を他でも使いまわして各々の処理でJSON文字列にパースする場合には

JacksonJAXBAnnotations

を利用すればいいです。

これは利用すればJAXBアノテーションを利用したマッピングが可能です。


mavenでpom.xmlに追加

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-xc</artifactId>
            <version>1.9.13</version>
        </dependency>



Javaでは次のようにするればobjをJSONにパース可能
例ではやってないけどObjectMapperはthread safeなので使いまわしましょう

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectWriter;
import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;



        JaxbAnnotationIntrospector introspector  = new JaxbAnnotationIntrospector();
        ObjectWriter ow = new ObjectMapper().setAnnotationIntrospector(introspector).writer()
                .withDefaultPrettyPrinter();
       
        String json = ow.writeValueAsString(obj);

       


最初は、jerseyの内部ロジックを利用しようとしましたが
ひとつのオブジェクトしかないリストがオブジェクトでパースされる問題が発生したり
いちいちクラスタイプ指定しないといけないので面倒でやめました


ちなみに 最初はこんなかんじにしてました

        private Class[] types = {
            MyClass.class,  

            ArrayList.class,
        };


        String result = null;
        JSONConfiguration config = JSONConfiguration.natural().build();
        JSONJAXBContext ctx = new JSONJAXBContext(config, types);
       
        JSONMarshaller m = ctx.createJSONMarshaller();
        StringWriter sw = new StringWriter();
        m.marshallToJSON(xmlObj, sw);
        result = sw.toString();

        return result;



JAXBContextResolverと似たような感じですね
POJOMappingFeatureで問題はどうにかなるかと思ったんですが
JacksonJAXBAnnotationsを使ったほうが楽だし早い