JAXB运行良好,直到我需要执行类似bean的操作,我无法修改源代码.如果bean没有默认构造函数,或者它引用了我想标记为transient的对象,那么我就会写一个单独的bean,我可以对其进行注释,然后手动从另一个bean复制信息.
例如,我想序列化异常对象,但发现唯一的方法是使用需要使用com.sun.*类的hack.
那么,还有哪些替代方案?什么是下一个最受欢迎的xml序列化API?能够做到这样的事情会很高兴:
在序列化时选择是否在结果中包含某些字段.(在运行序列化程序时标记事物).
通过使用引用或除了死亡之外的其他东西来处理对象图中的循环.
也许注释一个对象,以便在版本1中以一种方式序列化事物,而在版本2中,它将它们序列化为另一种.然后在序列化时我只选择对象的哪个版本或序列化.
有办法从对象的注释生成XSD.
基本上我只是想要比JAXB目前更灵活.
我通常只是@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) 我想使用log4j(和net.sf.cglib.*and org.springframework.*)从堆栈跟踪中过滤掉某些行.是否可以配置log4j?
在eclipse中,junit插件允许您添加修改junit选项卡中显示的堆栈跟踪的过滤器,但这不会更改输出到控制台的堆栈跟踪.
我想拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数,并阻止任何文件名包含".."(以防止路径遍历攻击)或"\ 0"(以防止文件名空字符攻击).
我有另一个关于如何使用SecurityManager做同样事情的开放性问题,但还没有人回答它,所以我希望这种替代方法能够起作用.
这是tomcat上的spring webapp.
我知道我可以通过创建自己的SafeFile,SafeFileReader等类并修改代码来手动执行此操作.但是,我们的代码中有960个地方使用这些对象的构造函数,所以我宁愿避免这种情况,除非这是唯一的方法.
使用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) 我在这里找到了各种各样的问题,在讨论使用adb时"usb设备未找到"问题的解决方案,但我没有找到任何有关正在发生的事情或是否有长期修复的解释.
当我正在开发时,我会编写一些代码然后点击运行或调试,在我的设备上观察结果然后重复该过程.
时不时地,也许每隔几天,我会得到"找不到USB设备"的错误.
我尝试的第一件事是打开任务列表并杀死adb.exe.这有时会奏效.
如果这不起作用我尝试下一件事是杀死adb.exe然后断开Android设备,重新启动它,然后重新连接它,然后从命令行运行"adb usb".这几乎总是有效的.
如果以上不起作用,那么我将重新启动Android设备,并重新启动计算机.这似乎是在问题发生的所有剩余时间内完成的.
有谁知道为什么会发生这种情况,如果有办法防止它发生?我唯一的理论(基于不多)可能是设备变热(由于在开发和调试期间CPU使用量很大)并且做了一些错误,这与adb的工作方式有关.
在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对象中进行两次旋转,然后以某种方式将它们组合起来,但我无法弄清楚究竟是怎么做到的.
编辑:这种类型的矩阵似乎被称为"转换矩阵".组合多个操作称为转换组合.但是,此主题的所有页面均未提及如何进行一系列翻译和轮换.
当然,如果你可以使用矩阵围绕一个点进行旋转,则必须能够以某种方式进行多个矩阵运算,以允许围绕一个点旋转,然后围绕另一个点进行额外旋转.
我已经尝试过关于骨骼动画的页面,但我不能说出他们正在谈论的内容.
解决这个问题对我来说有点困难,因为我是通过其他人的 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) 在 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) 通常使用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)