如何在 Rhino 脚本中实例化 java 泛型 class?

How to instantiate a java generic class in a Rhino script?

我尝试在 Rhino Java脚本中编组一些 JAXB 对象。这些 JAXB 对象(顶级根是 MyClass)是使用 wsimport 从 WSDL 创建的。应用程序的 Java 端不知道 MyClass。

我的犀牛脚本如下所示:

importPackage(Packages.javax.xml.bind);
importPackage(Packages.javax.xml.namespace);
...
  var myObj = new MyClass(); // MyClass has been generated from WSDL with wsimport
  var jaxbContext = JAXBContext.newInstance(myObj.getClass().getPackage().getName());
  var marshaller = jaxbContext.createMarshaller();
  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
  var strWriter = new StringWriter();
  var qName = new QName("xxx", "MyClass");
  var jaxbElement = new JAXBElement(qName, myObj.getClass(), myObj);
  marshaller.marshal(jaxbElement, strWriter);

不幸的是,它给出了一个错误,指出 javax.xml.bind.JAXBElement 的构造函数未找到参数 object, java.lang.class, MyClass

我也尝试过不构建 jaxbElement,但编组器启动异常说它无法编组,因为缺少 XMLRootElement

有没有办法向 rhino 指示 JAXBElement 的类型或者可以在不知道 MyClass 的情况下调用的 Java 代码?

引起问题的行是:

var jaxbElement = new JAXBElement(qName, pspApp.getClass(), pspApp);

您必须在构造函数中完全限定 QName,包括其包名称:

var qName = new javax.xml.namespace.QName("xxx", "MyClass");