java ee 编译_反编译JavaEE

博客讨论了使用JAD工具反编译Java代码的问题,特别是针对由XmlBeans编译器生成的代码。文中提到,Java编译器对代码进行优化,导致反编译时可能出现困难,但JAD能够较好地处理这种转换。建议如果可能,直接整合XmlBeans到项目中以避免反编译。此外,还推荐了一个将JAD集成到Eclipse的插件Jadclipse。
摘要由CSDN通过智能技术生成

尝试JAD(http://www.varaneckas.com/jad).

您显示的有问题的代码等效于以下内容:

1) Class class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder;

2) ClassLoader loader = class$schema$system$s322D2AAD7A06BA82525CDB874D86D59A$TypeSystemHolder.getClassLoader();

3) Class type = Class.forName("org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl", true, loader);

4) Constructor ctor = type.getConstructor(Class.class);

5) Object obj = ctor.newInstance(TypeSystemHolder.class);

6) SchemaTypeSystem result = (SchemaTypeSystem) obj;

7) return result;

您遇到问题的部分是第1行,它代表一个局部变量或一个字段(可能是静态的). Java编译器将表达式’TypeSystemHolder.class’转换为对getClass的调用,并将结果存储在静态字段中.该初始化在引用“ TypeSystemHolder.class”的每个类中发生一次,并且编译器使用字段访问替换使用此表达式的每个调用站点.

大多数反编译器无法将此惯用法转换回对“ TypeSystemHolder.class”的原始调用,但JAD可以很好地处理此问题.此外,还有一个插件将JAD(和其他)集成到Eclipse(http://jadclipse.sourceforge.net)中.

不幸的是,反编译器无法处理编译器生成的每个代码序列,因此始终需要进行一些手动重写.例如,Java编译器可能会为一个异常处理块生成与另一个异常处理块的代码重叠的代码.反编译器无法将其分成两个捕获块.在这种情况下,通常会看到goto语句在整个代码中杂乱无章(无效的Java),或者反编译器只是放弃了该方法.

此外,您是正确的,这是生成的代码.具体来说,它来自XmlBeans编译器,该编译器分析xn XML Schema并为Java生成绑定类.允许对符合该模式的XML文档进行序列化和反序列化.如果您有权访问模式,最好将XmlBeans合并到您的构建中,而不是反编译这些类.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值