package-info.java_无法使用Java 8修改package-info.java的注释

我正面临一个问题,我必须修改包信息.

package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://some.url/soap/style/document_literal")

package org.example.wsdl.wsdl;

以下代码适用于1.7.0_45.

// do not load any classes before,this could break the following code.

Class> pkgInfo = Class.forName("org.example.wsdl.package-info",true,NameSpaceModifier.class.getClassLoader());

Field field = Class.class.getDeclaredField("annotations");

field.setAccessible(true);

final XmlSchema oldAnnotation = (XmlSchema) pkgInfo.getAnnotations()[0];

logger.debug("Old Annotation namespace value was: " + oldAnnotation.namespace());

XmlSchema newAnnotation = new XmlSchema() {

@Override

public XmlNs[] xmlns() {

return oldAnnotation.xmlns();

}

@Override

public String namespace() {

return "newNs";

}

@Override

public XmlNsForm elementFormDefault() {

return oldAnnotation.elementFormDefault();

}

@Override

public XmlNsForm attributeFormDefault() {

return oldAnnotation.attributeFormDefault();

}

@Override

public String location() {

return oldAnnotation.location();

}

@Override

public Class extends Annotation> annotationType() {

return oldAnnotation.annotationType();

}

};

@SuppressWarnings("unchecked")

Map,Annotation> annotations = (Map,Annotation>) field.get(pkgInfo);

annotations.put(XmlSchema.class,newAnnotation);

XmlSchema modifiedAnnotation = (XmlSchema) pkgInfo.getAnnotations()[0];

使用1.8.0_05编译和执行相同的代码时,我收到以下错误消息:

java.lang.NoSuchFieldException: annotations

at java.lang.Class.getDeclaredField(Class.java:2057)

我知道它是一个哈克,至少它看起来像一个.但Java 8是否按预期工作?

我如何更改它与Java 8一起使用的代码呢?

Javassist的答案也很受欢迎;)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值