从没有源代码访问的对象获取/设置值

时间:2013-05-30 21:42:39

标签: java web-services spring reflection

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

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

DwsSoap port = service.getDwsSoap();

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

Debugger screenshot

要访问address,我需要先访问h字段(如上图所示)。这就是我尝试这样做的方式:

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

但我得到NoSuchMethodException

java.lang.NoSuchMethodException: Unknown property 'h'

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

2 个答案:

答案 0 :(得分:2)

你需要使用“原始”反射,而不是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);

答案 1 :(得分:0)

我最终通过java更改了wsdl的端点地址,如下所示:

String sharePointDWSLocation = spDir + "_vti_bin/Dws.asmx"
DwsSoap port = service.getDwsSoap();
((BindingProvider)port).getRequestContext().put(
    BindingProvider.ENDPOINT_ADDRESS_PROPERTY, sharePointDWSLocation)