- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对注释的使用场景有点困惑,我希望得到您的意见。
给定以下注释(与 ExistingCustomerValidator 类在同一项目中定义)包 com.tktserver.constraints;
@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { ExistingCustomerValidator.class })
@Documented
public @interface ExistingCustomerMatch {
String message() default "{customer.notfound}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
* @return The field
*/
String field();
}
及以下jxb定制
<jaxb:bindings node="xsd:complexType[@name='customer']">
<annox:annotate>
<annox:annotate
annox:class="com.tktserver.constraints.ExistingCustomerMatch"
field="electronicUserId" />
</annox:annotate>
</jaxb:bindings>
当我通过 Maven 生成我的源时,我得到了这个(整个项目都由它处理)
Caused by: org.jvnet.annox.annotation.AnnotationClassNotFoundException: Annotation class [com.tktserver.constraints.ExistingCustomerMatch] could not be found.
... 32 more
Caused by: java.lang.ClassNotFoundException: com.bgc.ticketserver.constraints.ExistingCustomerMatch
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.jvnet.annox.parser.XAnnotationParser.parse(XAnnotationParser.java:76)
... 31 more
其他 JSR-303 注释似乎工作正常。我想知道我是否被循环依赖所困,即生成源首先运行,然后编译,因此当生成源运行时没有可用的 ExistingCustomerMatch 注释类,或者这是否是一个完全不同的野兽。
谢谢,约阿尼斯
最佳答案
我通过在 maven 中使用 antrun 插件和针对 maven.compile.classpath 的 org.jvnet XJC2Task 使我的 annox JAXB 插件与 xjc 一起工作。 (参见 http://confluence.highsource.org/display/J2B/JAXB2+Basics+XJC+Ant+Task)永远无法让它与直接的 Maven 插件一起工作。
但这不是我来这里写作的原因。我猜您来到这里是因为您对 Google 搜索非常聪明,并且您下定决心要通过这个 annox 东西摆脱 JAXB 的困境。我怀着谦卑的心情写信给你,我一次又一次地和你在一起。我今天写信给你是想说:停止挣扎,你做错了
我的建议是针对那些在他们个人的“compile-xsd-to-jaxb-beans”冒险中想要通过 annox 或其他任何方式向生成的 JAXB bean 添加注释的人。如果您在那里,那么您可能会因 XSD 的局限性而感到束缚和束手无策,或者您的 XSD 可能会失控。
我在将 XML 模式构建到 JAXB bean 中的经验从一开始就非常好,很高兴看到所有这些 pojo 出现并且我的模式都很好地分解为不同的 namespace 并导入到一个主 XSD 中。我的构建非常清晰。我发现自己试图在任何地方添加 Javadoc 文档标签,而我的 XSD 变得越来越复杂。但是我生成的 bean 非常好看,而且我从交易中得到了免费的 Javadocs。我不得不放入一些 JAXB 注释(主要是@XMLTransient),我可以让 annox 在 maven 中为我工作的唯一方法是将 antrun 插件与 hacky Ant 任务一起使用,我对这种困惑感到不满意。我想,为什么这些东西不能正常工作??
然后,越来越多的要求迫使我在模式设计上陷入越来越狭窄的角落,我花费越来越多的时间来破解 XSD - 直到突破点:我必须能够使用 EclipseLink MOXy 编码为 JSON,突然之间我的模式不能扭曲成那个椒盐脆饼并获得好看的 JSON 和 XML。我被困住了,而且很长一段时间。
我咨询了一位专家,他告诉我完全放弃模式到 JAXB-beans 的工作。正确的方法是用 JAXB 和 MOXy 注释手写我的 JAXB bean,然后使用 schemagen 生成我的 .xsd。往另一个方向走!?有效。我的 schemagen 生成的 .xsd 并不漂亮,但谁在乎呢,它起作用了!根据我的 bean,模式是正确的,当我解析 XML 和使用 MOXy 时,它一切正常,我可以将我的 beans 编码为 JSON。
为了转换我的代码,我什至使用了我从手写模式中获得的原始生成的 JAXB bean 作为起点,所以我什至不需要从头开始。事实上,我丢弃了一半以上生成的 JAXB bean;它们是多余的(xjc 生成了大量的一次性类。)最好的部分是现在我熟悉了 MOXy 注释。使用 MOXy 作为一切的提供者,完全停止使用内置的 Oracle JAXB impl。 MOXy 是 JAXB 的 future 。
所以,我希望这能影响到你们这些试图让 XJC 工作的可怜人。我希望你不再因扭扭椒盐卷饼而受苦。进行更改不会花很长时间,直接去做。
关于java - 带有 jaxb/annox 和自定义注释的 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10544042/
我想使用 li 和 ul 制作一个多级下拉列表,以便显示我博客中按年和月排序的所有文章。我希望我的下拉菜单看起来像 Google Blogspot 下拉菜单: 这是我的 CSS 和 HTML 代码 u
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我
我正在尝试让我的 PC 成为 Android 2.3.4 设备的 USB 主机,以便能够在不需要实际“附件”的情况下开发 API。为此,我需要将 PC 设置为 USB 主机和“设备”(在我的例子中是运
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我在设置服务器方面几乎是个新手,但遇到了一个问题。我有一个 Ubuntu 16.04 VPS 并安装了 Apache2 和 Tomcat7。我正在为 SSL 使用 LetsEncrypt 和 Cert
我在一个基于谷歌地图的项目上工作了超过 6 个月。我使用的是 Google Maps API V1 及其开发人员 API key 。当我尝试发布应用程序时,我了解到 Google API V1 已被弃
我是 Python 的新手,所以如果我对一些简单的事情感到困惑,请原谅。 我有一个这样的对象: class myObject(object): def __init__(self):
这个问题已经有答案了: How can I access object properties containing special characters? (2 个回答) 已关闭 9 年前。 我正在尝
我有下面的 CSS。我想要的是一种流体/液体(因为缺乏正确的术语)css。我正在为移动设备开发,当我改变模式时 从纵向 View 到陆地 View ,我希望它流畅。现在的图像 在陆地 View 中效
我正在尝试使用可以接受参数的缓存属性装饰器。 我查看了这个实现:http://www.daniweb.com/software-development/python/code/217241/a-cac
这个问题在这里已经有了答案: Understanding slicing (36 个答案) 关闭 6 年前。 以a = [1,2,3,4,5]为例。根据我的直觉,我认为 a[::-1] 与 a[0:
mysqldump -t -u root -p mytestdb mytable --where=datetime LIKE '2014-09%' 这就是我正在做的事情,它会返回: mysqldum
我正在制作销售税计算器,除了总支付金额部分外,其他一切都正常。在我的程序中,我希望能够输入一个数字并获得该项目的税额我还希望能够获得支付的总金额,包括交易中的税金。到目前为止,我编写的代码完成了所有这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是否必须进行任何额外的设置才能让 apache-airflow 在任务失败时向我发送电子邮件。我的配置文件中有以下内容(与默认值保持不变): [email] email_backend = airf
这个问题在这里已经有了答案: What does the $ symbol do in VBA? (5 个回答) 3年前关闭。 使用返回字符串(如 Left)的内置函数有什么区别吗?或使用与 $ 相同
我有一个用VB6编写的应用程序,我需要使用一个用.NET编写的库。有什么方法可以在我的应用程序上使用该库吗? 谢谢 最佳答案 这取决于。您可以控制.NET库吗? 如果是这样,则可以修改您的库,以便可以
当我创建一个以 ^ 开头的类方法时,我尝试调用它,它给了我一个错误。 class C { method ^test () { "Hi" } } dd C.new.test; Too m
我已经使用 bower 安装了 angularjs 和 materialjs。 凉亭安装 Angular Material 并将“ngMaterial”注入(inject)我的应用程序,但出现此错误。
我是一名优秀的程序员,十分优秀!