我无法理解为什么抛出这个JAXB IllegalAnnotationException

这是我的XML文件: 我做了2个类来解析它(Fields.java和Field.java): @XmlRootElement(name = “fields”) public class Fields { @XmlElement(name = “field”) List fields = new ArrayList(); //getter, setter } 和 public class Field { @XmlAttribute(name = “mappedField”) String mappedField; /getter,setter } 但我得到了这个例外。 [INFO] com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions [INFO] at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:66) ~[na:1.6.0_07] [INFO] at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:422) ~[na:1.6.0_07] [INFO] at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:270) ~[na:1.6.0_07] 我无法理解为什么这个例外会上升。 例外情况如下: JAXBContext context […]

如何为java对象生成校验和

我正在寻找一种解决方案来为任何类型的Java对象生成校验和,对于生成相同对象的应用程序的每次执行,它都保持不变。 我用Object.hashCode()尝试过,但api说 ….从应用程序的一次执行到同一应用程序的另一次执行,这个整数不需要保持一致。

Javagenerics方法inheritance和覆盖规则

我有一个具有generics方法的抽象类,我想通过将特定类型替换为generics参数来覆盖generics方法。 所以在伪代码中我有以下内容: public abstract class GetAndParse { public SomeClass var; public abstract void getAndParse(T… args); } public class Implementor extends GetAndParse { // some field declarations // some method declarations @Override public void getAndParse(SpecificClass… args) { // method body making use of args } } 但由于某种原因,我不允许这样做? 我是在做某种语法错误还是这种inheritance和覆盖不允许? 特别是我收到关于@Override的错误,因为eclipse IDE一直在提醒我实现getAndParse 。 以下是我希望上述代码的工作方式。 我的代码中的其他地方有一个方法,它需要实现GetAndParse的对象实例,这特别意味着它们有一个我可以使用的getAndParse方法。 当我在该实例上调用getAndParse时,编译器会检查我是否以正确的方式使用了T特定实例,因此特别是T应该扩展AnotherClass并且它应该是SpecificClass 。

Javamultithreading文件下载性能

最近我在一个需要比以前更多的IO交互的项目上工作,我觉得我想要查看常规库(特别是Commons IO)并解决更深入的IO问题。 作为一项学术测试,我决定实现一个基本的,multithreading的HTTP下载器。 这个想法很简单:提供一个下载URL,代码将下载该文件。 为了提高下载速度,将文件分块并同时下载每个块(使用HTTP Range: bytes=xx标头)以尽可能多地使用带宽。 我有一个工作原型,但你可能已经猜到了,它并不完全理想。 目前我手动启动3个“下载程序”线程,每个线程下载文件的1/3。 这些线程使用通用的同步“文件编写器”实例来实际将文件写入磁盘。 完成所有线程后,“文件编写器”完成,任何打开的流都关闭。 一些代码片段可以给你一个想法: 线程启动: ExecutorService downloadExecutor = Executors.newFixedThreadPool(3); … downloadExecutor.execute(new Downloader(fileWriter, download, start1, end1)); downloadExecutor.execute(new Downloader(fileWriter, download, start2, end2)); downloadExecutor.execute(new Downloader(fileWriter, download, start3, end3)); 每个“下载程序”线程下载一个块(缓冲)并使用“文件编写器”写入磁盘: int bytesRead = 0; byte[] buffer = new byte[1024*1024]; InputStream inStream = entity.getContent(); long seekOffset = chunkStart; while ((bytesRead = inStream.read(buffer)) […]

使用JSSE时如何进行主机名validation?

我正在编写一个Java客户端(需要在桌面JRE和Android上工作),以获得通过TLS承载的专有协议(特定于我的公司)。 我正在尝试找出用Java编写TLS客户端的最佳方法,特别是确保它正确地进行主机名validation。 ( 编辑:通过它,我的意思是检查主机名是否与X.509证书匹配,以避免中间人攻击。) JSSE是编写TLS客户端的明显API,但我从“ 世界上最危险的代码 ”论文(以及实验)中注意到,JSSE在使用SSLSocketFactory API时不validation主机名。 (这是我必须使用的,因为我的协议不是HTTPS。) 因此,似乎在使用JSSE时,我必须自己进行主机名validation。 而且,不是从头开始编写代码(因为我几乎肯定会弄错),似乎我应该“借用”一些有效的现有代码。 所以,我发现的最有可能的候选者是使用Apache HttpComponents库(具有讽刺意味的是,因为我实际上并不在做HTTP) 并使用org.apache.http.conn.ssl.SSLSocketFactory类代替标准的javax .net.ssl.SSLSocketFactory类 。 我的问题是:这是一个合理的行动方案吗? 或者我完全误解了事情,走出了深层,实际上有一种更简单的方法来获取JSSE中的主机名validation,而不需要像HttpComponents那样引入第三方库? 我也查看了BouncyCastle,它有一个非JSSE API用于TLS,但它似乎更有限,因为它甚至没有进行证书链validation,更不用说主机名validation,所以它看起来像一个非-起动机。 编辑:这个问题已经回答了Java 7,但我仍然很好奇Java 6和Android的“最佳实践”是什么。 (特别是,我必须为我的应用程序支持Android。) 再次编辑:为了使我的“借用Apache HttpComponents”的提议更加具体,我创建了一个小型库 ,其中包含从Apache HttpComponents中提取的HostnameVerifier实现(最值得注意的是StrictHostnameVerifier和BrowserCompatHostnameVerifier)。 (我意识到我需要的只是validation器,我不需要像我原先想的那样使用Apache的SSLSocketFactory。)如果留给我自己的设备,这就是我将使用的解决方案。 但首先,我有什么理由不这样做吗? (假设我的目标是以与https相同的方式进行主机名validation。我意识到它本身可以辩论,并且已经在加密列表的线程中进行了讨论,但是现在我坚持使用类似HTTPS的主机名validation,即使我没有使用HTTPS。) 假设我的解决方案没有“错误”,我的问题是:是否有一种“更好”的方式来实现它,同时仍然可以在Java 6,Java 7和Android中保持可移植性? (“更好”意味着更惯用,已经广泛使用,和/或需要更少的外部代码。)

使用Java和Bouncycastle进行X.509证书validation

通过bouncycastle wiki页面,我能够理解如何创建X.509根证书和认证请求,但我不太明白如何在此之后继续进行概念和编程。 让我们假设甲方做了一个证书请求,并从CA获得了他的客户证书。 某些乙方如何validationA的证书? A需要什么样的证书? 根证书? “普通”客户证书? 如果我们假设A已成功将他的证书以DER或PEM格式发送给B,那么validation如何在编程级别上工作? 任何帮助深表感谢。 最诚挚的问候,Rob

javax.servlet.ServletException:java.lang.NoClassDefFoundError:javax / servlet / jsp / jstl / core / ConditionalTagSupport

我使用sitemesh来装饰页面。 我正在使用JSP页面。 页面工作正常,直到我使用条件标记。 我在WEB-INF / lib文件夹中有jstl-impl-1.2.jar和sitemesh-3.0-alpha-1.jar文件。 我在jsp页面中有以下标记库声明: 我正在使用带有java 6的tomcat 7.0。当我在eclipse中创建新的动态Web项目时,我将动态Web模块版本设置为2.4。 页面有标签,它们工作正常,但是当我使用if条件标签时,我收到以下错误: javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport org.apache.jasper.servlet.JspServlet.service(JspServlet.java:342) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.java:158) org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.java:133) org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.java:39) org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.java:74) org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:175) org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126) org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:157) root cause java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClassCond(Unknown Source) java.lang.ClassLoader.defineClass(Unknown Source) java.security.SecureClassLoader.defineClass(Unknown Source) org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820) org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1223) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1450) org.apache.jasper.compiler.Parser.parse(Parser.java:138) org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242) org.apache.jasper.compiler.ParserController.parse(ParserController.java:102) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198) org.apache.jasper.compiler.Compiler.compile(Compiler.java:373) org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.java:158) org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.java:133) […]

如何使用javacv识别长度和宽度可变的方形或矩形?

我正在使用java开发项目来识别使用opencv包的组件,但我是javacv的新手,我只是想知道如何识别特定源图像中的矩形,请一些经验人员给出一些基本的指导来存档这个任务。 我尝试在这里使用模板匹配,但它只能识别确切大小的矩形。 但在我的情况下,我需要识别变长矩形? import java.util.Arrays; import static com.googlecode.javacv.cpp.opencv_core.*; import static com.googlecode.javacv.cpp.opencv_imgproc.*; import static com.googlecode.javacv.cpp.opencv_highgui.*; public class TestingTemplate { public static void main(String[] args) { //Original Image IplImage src = cvLoadImage(“src\\lena.jpg”,0); //Template Image IplImage tmp = cvLoadImage(“src\\those_eyes.jpg”,0); //The Correlation Image Result IplImage result = cvCreateImage(cvSize(src.width()-tmp.width()+1, src.height()-tmp.height()+1), IPL_DEPTH_32F, 1); //Init our new Image cvZero(result); cvMatchTemplate(src, tmp, result, […]

我可以(以及如何)使用EJB模块中的javax.naming.Context#lookup查找CDI托管bean吗?

我可以(如果是这样,如何?)在EJB模块中使用javax.naming.Context#lookup查找CDI托管bean? 我正在使用GlassFish v3。 我想我可以使用@Named ,但是什么是CDI托管bean的JNDI名称? 我想从非托管POJO中查找它们,所以我不能使用@Inject 。

通过注释而不是XML配置Spring LdapTemplate的最佳实践?

对于Spring Boot应用程序,我使用注释成功配置了Spring LdapTemplate ,包括来自application.properties的@Value的LdapContextSource依赖@Value 。 (Woot!我找不到一个例子,所以也许这会帮助别人。) 片段(下面)设置上下文源,将其注入LdapTemplate ,然后将其自动装入我的DirectoryService。 有没有更好/更清晰的方法在Spring Boot应用程序中设置ContextSource ? application.properties(在类路径上): ldap.url=ldap://server.domain.com:389 ldap.base:OU=Employees,OU=Users,DC=domain,DC=com ldap.username:CN=myuserid,OU=employees,OU=Users,DC=domain,DC=com ldap.password:secretthingy MyLdapContextSource.java: @Component public class MyLdapContextSource extends LdapContextSource implements ContextSource { @Value(“${ldap.url}”) @Override public void setUrl(String url) { super.setUrl(url); } @Value(“${ldap.base}”) @Override public void setBase(String base) {super.setBase(base); } @Value(“${ldap.username}”) @Override public void setUserDn(String userDn) {super.setUserDn(userDn); } @Value(“${ldap.password}”) @Override public void […]