java - 无需访问源代码即可从对象获取/设置值

标签 java web-services spring reflection

我需要更改对象的 URL,但我既没有源代码,也没有该对象的任何 getter 和 setter。我可以在 Eclipse 调试器中看到这些值,但我没有任何方法可以修改它。

变量port接收一个我没有源代码可以访问的对象(它实现了DwsSoap接口(interface))。

DwsSoap port = service.getDwsSoap();

我想更改此对象中的一个名为 address 的字段,但我不确定如何更改或检索它。

Debugger screenshot

为了访问address,我需要首先访问h字段(如上图所示)。这就是我尝试的方法:

Object h = PropertyUtils.getProperty(port, "h");

但我得到一个NoSuchMethodException:

java.lang.NoSuchMethodException: Unknown property 'h'

有没有办法可以访问和更改此变量的地址

最佳答案

您需要使用“原始”反射,而不是 Spring 的 PropertyUtils。这是covered in the Java tutorial 。代码(模异常处理)看起来像这样:

DwsSoap port = ...;
Field hField = port.getClass().getField("h");
hField.setAccessible(true); // the field will probably be private
Object h = hField.get(port);

关于java - 无需访问源代码即可从对象获取/设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16846355/

相关文章:

java - 为什么每次执行uploadArchives都会生成很多pom文件?

java - 属于同一类或继承类的包中的条目

通过 wsimport 可执行 Web 服务客户端时出现 java 异常

spring - 如何通过 GELF 将 spring boot 访问日志发送到远程服务器?

java - 构造函数注入(inject)的空指针异常并与字段注入(inject)mockito一起使用

java - 如何注入(inject)一个可以在运行时改变的值?

java - 在 Java 中通过短信使用表情符号

java - 使用谓词动态过滤列表

c# - 如何调试 WCF 服务?

c# - CGI 和 WebService 有什么区别?