小编Hap*_*eer的帖子

JAXB很好,直到我需要做一些复杂的事情.有哪些替代方案?

JAXB运行良好,直到我需要执行类似bean的操作,我无法修改源代码.如果bean没有默认构造函数,或者它引用了我想标记为transient的对象,那么我就会写一个单独的bean,我可以对其进行注释,然后手动从另一个bean复制信息.

例如,我想序列化异常对象,但发现唯一的方法是使用需要使用com.sun.*类的hack.

那么,还有哪些替代方案?什么是下一个最受欢迎的xml序列化API?能够做到这样的事情会很高兴:

  • 在序列化时选择是否在结果中包含某些字段.(在运行序列化程序时标记事物).

  • 通过使用引用或除了死亡之外的其他东西来处理对象图中的循环.

  • 也许注释一个对象,以便在版本1中以一种方式序列化事物,而在版本2中,它将它们序列化为另一种.然后在序列化时我只选择对象的哪个版本或序列化.

  • 有办法从对象的注释生成XSD.

基本上我只是想要比JAXB目前更灵活.

java xml jaxb

6
推荐指数
1
解决办法
755
查看次数

在Spring中,我可以从autowired bean中自动装配新bean吗?

我通常只是@Autowire东西成春天的对象.但是我遇到了一种情况,我需要动态创建一些需要可以自动装配的值的对象.

我该怎么办?我能做的只是手动将自动装配的值传递给新对象的构造函数.我想做的就是在创建它时自动装配每个新对象.

@Service
public class Foo {
    @Autowired private Bar bar;

    /** This creates Blah objects and passes in the autowired value. */
    public void manuallyPassValues() {
        List<Blah> blahs = new LinkedList<Blah>();
        for(int i=0; i<5; ++i) {
            Blah blah = new Blah(bar);
            blahs.add(blah);
        }
        // ...
    }

    /** This creates Blah objects and autowires them. */
    public void useAutowire() {
        List<Blah> blahs = new LinkedList<Blah>();
        for(int i=0; i<5; ++i) {
            // How do I implement the createAutowiredObject method?
            Blah blah …
Run Code Online (Sandbox Code Playgroud)

java spring autowired

6
推荐指数
1
解决办法
6585
查看次数

如何从log4j堆栈跟踪中过滤某些行?

我想使用log4j(和net.sf.cglib.*and org.springframework.*)从堆栈跟踪中过滤掉某些行.是否可以配置log4j

在eclipse中,junit插件允许您添加修改junit选项卡中显示的堆栈跟踪的过滤器,但这不会更改输出到控制台的堆栈跟踪.

filtering log4j

6
推荐指数
1
解决办法
1630
查看次数

如何使用AOP拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数?

我想拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数,并阻止任何文件名包含".."(以防止路径遍历攻击)或"\ 0"(以防止文件名空字符攻击).

我有另一个关于如何使用SecurityManager做同样事情的开放性问题,但还没有人回答它,所以我希望这种替代方法能够起作用.

这是tomcat上的spring webapp.

我知道我可以通过创建自己的SafeFile,SafeFileReader等类并修改代码来手动执行此操作.但是,我们的代码中有960个地方使用这些对象的构造函数,所以我宁愿避免这种情况,除非这是唯一的方法.

java aop spring aspectj

6
推荐指数
1
解决办法
2148
查看次数

使用xml中的公钥进行javax.xml.crypto.dsig验证

使用javax.xml.crypto.dsig,如何在不指定公钥的情况下解组和验证XMLSignature?公钥似乎是在签名的xml中,但我无法找到一种方法来获取它.

DOMValidateContext valContext = new DOMValidateContext(key,signatureNode);
XMLSignature signature = fac.unmarshalXMLSignature(valContext);
boolean coreValidity = signature.validate(valContext);
Run Code Online (Sandbox Code Playgroud)

据我所知,有必要将KeySelector而不是Key传递给DOMValidateContext.但是,我无法弄清楚如何实现KeySelector.

这是我发现的关于如何实现KeySelector的唯一示例:http: //download.oracle.com/javase/6/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html

不幸的是它不起作用.在该实现中,它执行以下操作但总是失败,因为没有KeyValue元素(看起来它们是org.jcp.xml.dsig.internal.dom.DOMX509Data元素而不是KeyValue元素,它们无法通过他们的关键).

List list = keyInfo.getContent();

for (int i = 0; i < list.size(); i++) {
    XMLStructure xs = (XMLStructure) list.get(i);
    if(xs instanceof KeyValue) {
        PublicKey pk = null;
        try {
            pk = ((KeyValue) xs).getPublicKey();
        } catch (KeyException ke) {
            throw new KeySelectorException(ke);
        }
        // make sure algorithm is compatible with method
        if (algEquals(sm.getAlgorithm(), pk.getAlgorithm())) {
            return new SimpleKeySelectorResult(pk);
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

java xml-signature

5
推荐指数
1
解决办法
4271
查看次数

android adb"usb device not found"问题的原因?

我在这里找到了各种各样的问题,在讨论使用adb时"usb设备未找到"问题的解决方案,但我没有找到任何有关正在发生的事情或是否有长期修复的解释.

当我正在开发时,我会编写一些代码然后点击运行或调试,在我的设备上观察结果然后重复该过程.

时不时地,也许每隔几天,我会得到"找不到USB设备"的错误.

我尝试的第一件事是打开任务列表并杀死adb.exe.这有时会奏效.

如果这不起作用我尝试下一件事是杀死adb.exe然后断开Android设备,重新启动它,然后重新连接它,然后从命令行运行"adb usb".这几乎总是有效的.

如果以上不起作用,那么我将重新启动Android设备,并重新启动计算机.这似乎是在问题发生的所有剩余时间内完成的.

有谁知道为什么会发生这种情况,如果有办法防止它发生?我唯一的理论(基于不多)可能是设备变热(由于在开发和调试期间CPU使用量很大)并且做了一些错误,这与adb的工作方式有关.

usb android adb

5
推荐指数
1
解决办法
8905
查看次数

如何获得我翻译的矩阵然后旋转然后翻译然后旋转第二次?

在Android应用程序中,我想画一条跑腿.为了输出腿的顶部,我做了类似的事情:

// legCX,legCY is the location on screen about which the leg rotates.
Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(legCX,legCY);
Run Code Online (Sandbox Code Playgroud)

然后我将矩阵设置到画布上并画出腿.

如何在膝盖以下绘制腿部的第二部分?它以与其上方的腿不同的速率旋转,并且具有随着腿在其上方移动的中心点.我尝试了下面的内容,但事实证明最终的结果是围绕某个单点旋转,这不会跟随上面的腿.

Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(0,-legLength);
m.postRotate(footRot);
m.postTranslate(0,legLength);
m.postTranslate(legCX,legCY);
Run Code Online (Sandbox Code Playgroud)

我怀疑可能需要在两个不同的Matrix对象中进行两次旋转,然后以某种方式将它们组合起来,但我无法弄清楚究竟是怎么做到的.

编辑:这种类型的矩阵似乎被称为"转换矩阵".组合多个操作称为转换组合.但是,此主题的所有页面均未提及如何进行一系列翻译和轮换.

当然,如果你可以使用矩阵围绕一个点进行旋转,则必须能够以某种方式进行多个矩阵运算,以允许围绕一个点旋转,然后围绕另一个点进行额外旋转.

我已经尝试过关于骨骼动画的页面,但我不能说出他们正在谈论的内容.

math android matrix

5
推荐指数
1
解决办法
913
查看次数

android MediaPlayer NullPointerException

解决这个问题对我来说有点困难,因为我是通过其他人的 android 设备的崩溃报告得到的,我无法向他们提问,而且我从未见过它发生在我自己的 android 设备上。

崩溃报告说它是 Android 4.1.2,堆栈跟踪是:

java.lang.NullPointerException
at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2102)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5021)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

不幸的是,grepcode.com 上的 android 源代码似乎与这些行号不匹配,所以我不确定哪个是空的。

我不知道发生这种情况时用户在做什么,所以我不知道这是在播放音乐或音效时发生的,还是在破坏时发生的,还是什么。我有点怀疑它可能在销毁过程中发生。我在活动的 onDestroy 方法中有以下代码:

public void onDestroy() {
    synchronized(curPlayers) {
        for(List<MediaP> ms : curPlayers.values()) {
            synchronized(ms) {
                for(MediaP m : ms) {
                    synchronized(m) {
                        m.m.stop();
                        m.m.release();
                    }
                }
            }
        }
        curPlayers.clear();
    }
}

private static class MediaP {
    private MediaP(MediaPlayer m) {
        this.m = m;
    }

    private MediaPlayer …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer

5
推荐指数
1
解决办法
2660
查看次数

如何在 Java 中返回我自己的 future?

在 Java 8 中,我正在编写一个 DAO 方法,该方法调用返回 ListenableFuture 的方法(在本例中,它是返回 ResultSetFuture 的 Cassandra 异步查询)。

但是,我一直困惑于如何将 Future 返回给 DAO 方法的调用者。我不能只返回 ResultSetFuture,因为该 future 返回一个 ResultSet。我想处理 ResultSet 并返回一个不同的对象。例如:

public ListenableFuture<ThingObj> queryForThingAsync(String thingId) {
    ListenableFuture<ResultSet> rsFuture = db.getSession().executeAsync(QueryBuilder.select().all().from("thingSchema","Thing").where(eq("thingId",thingId)));
    // Now what? How do I create a ListenableFuture<ThingObj> given a ListenableFuture<ResultSet> and a method that can convert a ResultSet into a ThingObj?
}
Run Code Online (Sandbox Code Playgroud)

java concurrency future

5
推荐指数
1
解决办法
1809
查看次数

在java中,我如何处理CompletableFutures并获得第一个完成的理想结果?

通常使用CompletableFuture,我会在结果可用时立即调用thenApply或其他方法来执行某些操作.但是,我现在有一种情况,我希望处理结果,直到我收到一个肯定的结果,然后忽略所有进一步的结果.

如果我只想获得第一个可用的结果,我可以使用CompletableFuture.anyOf(虽然我讨厌将列表转换为数组只是为了调用anyOf).但这不是我想要的.我想取第一个结果,如果它没有理想的结果,那么我想处理第二个可用结果,依此类推,直到得到理想的结果.

这是一个简单的例子,它遍历所有结果并返回它找到的大于9的第一个值.(注意,这不是我真正的任务.这只是一个简单的例子.)

public Integer findFirstGt9(List<CompletableFuture<Integer>> results) {
    for(CompletableFuture<Integer> result : results) {
        Integer v = result.get();
        if(v > 9)
            return v;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

当然,这个例子从一开始就经历了结果,而不是在完成时查看结果.所以这里有一个可以实现我想要的东西,但代码要复杂得多.

public Integer findFirstGt9(List<CompletableFuture<Integer>> results) {
    AtomicInteger finalResult = new AtomicInteger();
    CountDownLatch latch = new CountDownLatch(results.size());
    for(CompletableFuture<Integer> result : results) {
        result.whenComplete((v,e) -> {
            if(e!=null) {
                Logger.getLogger(getClass()).error("",e);
            } else if(v > 9) {
                finalResult.set(v);
                while(latch.getCount() > 0)
                    latch.countDown();
                return;
            }
            latch.countDown();
        });
    }
    latch.await();

    if(finalResult.get() > 9)
        return finalResult.get();
    return null;
}    
Run Code Online (Sandbox Code Playgroud)

有没有api,我可以这样做?

public …
Run Code Online (Sandbox Code Playgroud)

java concurrency java-8 completable-future

5
推荐指数
2
解决办法
1702
查看次数