VirtualBox

11 年 前 建立

11 年 前 結束

#12029 closed defect (fixed)

Cannot get state of running machines via Java web service

回報者: rshaw 負責人:
元件: webservices 版本: VirtualBox 4.2.16
關鍵字: vboxwebsrv machine state 副本:
Guest type: all Host type: all

描述

As stated in the title, the function IVirtualBox#getMachineStates is currently unusable over vboxwebsrv. One can iterate over every single machine and get their state one by one but this creates a large number of network calls instead of requesting them all at once. getMachineStates seems to be broken due to a misnaming of enum values. I ran this code against a VirtualBox instance with a single machine that was powered off. Here is my SSCCE.

import java.util.List;
import org.virtualbox_4_2.IMachine;
import org.virtualbox_4_2.IVirtualBox;
import org.virtualbox_4_2.VirtualBoxManager;

public class Main {
	public static void main(String[] args) {
		String url = "http://localhost:18083";
		VirtualBoxManager manager = VirtualBoxManager.createInstance(url);
		manager.connect(url, null, null);
		IVirtualBox vbox = manager.getVBox();
		List<IMachine> machines = vbox.getMachines();
		vbox.getMachineStates(machines);	
	}
}
Exception in thread "main" java.lang.AssertionError: java.lang.reflect.InvocationTargetException
	at org.virtualbox_4_2.Helper.convertEnums(Helper.java:108)
	at org.virtualbox_4_2.IVirtualBox.getMachineStates(IVirtualBox.java:755)
	at Main.main(Main.java:13)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.virtualbox_4_2.Helper.convertEnums(Helper.java:100)
	... 2 more
Caused by: java.lang.IllegalArgumentException: No enum constant org.virtualbox_4_2.MachineState.POWERED_OFF
	at java.lang.Enum.valueOf(Enum.java:236)
	at org.virtualbox_4_2.MachineState.fromValue(MachineState.java:344)
	... 7 more

更動歷史 (6)

comment:1 11 年 前Klaus Espenlaub 編輯

Scratching my head... all the corresponding code is automatically generated, and I have no idea whatsoever why all of a sudden there are such alien enum values such as POWERED_OFF. That's not our API naming style, we don't have such all caps things separated by underscore. Very mysterious.

comment:2 11 年 前Klaus Espenlaub 編輯

Reproduced it here, and the webservice definitely delivers the correct results (I have a large number of VMs, most PoweredOff, some Saved and so on), checked what was passed on the wire. Somehow the java client side makes garbage out of this.

comment:3 11 年 前Klaus Espenlaub 編輯

Slowly starts making sense, this naming is used internally by the JAX-WS generated code (org.VirtualBox_4_3.jaxws.MachineState). The conversion to the actually used class (org.VirtualBox_4_3.MachineState) explodes because it doesn't understand the JAX-WS generated enum values.

I wonder why this shows up all of a sudden now - the very same issue should happen with all other enum conversions, which hints that somehow the safearray content conversion is special.

comment:4 11 年 前Klaus Espenlaub 編輯

Fully understood the problem now, it's a bug in the array conversion for enum types, and it's broken for both the webservice and for the local API, in different ways. It's also clear now why no one noticed so far. There are extremely few places where this is needed. The webservice case is fixed, but now I'm struggling with the remaining NoSuchMethodException in the local API case.

comment:5 11 年 前Klaus Espenlaub 編輯

What a mess (and in this case I mean how Java handles enums internally). It made fixing the never working enum array conversion very difficult, but of course the actual bug still was in our client side API wrapper code. First public "release" will most likely be 4.3.0_beta2, but later we'll of course also fix the relevant older versions.

comment:6 11 年 前Frank Mehnert 編輯

狀態: newclosed
處理結果: fixed

Fix is part of VBox 4.3.0.

注意: 瀏覽 TracTickets 來幫助您使用待辦事項功能

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette