AXL 12.5Apache CXF 3.3.6OpenJDK 14Spring Boot 2.3.0,执行SQL查询

String sqlStmt = "SELECT name FROM typeuserlocale";

ExecuteSQLQueryReq executeSQLQueryReq = new ExecuteSQLQueryReq();
executeSQLQueryReq.setSql(sqlStmt);

ExecuteSQLQueryRes executeSQLQueryRes = axlPort.executeSQLQuery(executeSQLQueryReq);

List<Object> rows = executeSQLQueryRes.getReturn().getRow();


给出List<Object>的响应,如何解析结果?向什么投射对象?

调试显示它是一个ElementNSImpl。尝试将其强制转换为ElementNSImpl导致IDE添加依赖项:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.9.1</version>
</dependency>


但是强制转换导致一个例外:

java.lang.ClassCastException:
class com.sun.org.apache.xerces.internal.dom.ElementNSImpl cannot be cast to class org.apache.xerces.dom.ElementNSImpl (com.sun.org.apache.xerces.internal.dom.ElementNSImpl is in module java.xml of loader 'bootstrap';
org.apache.xerces.dom.ElementNSImpl is in unnamed module of loader 'app')

最佳答案

当您的应用程序与OpenJDK一起运行时,是否可能使用wsimport的Oracle JDK版本生成了AXL服务存根?在这种情况下,您可以尝试使用OpenJDK wsdl2java进行重新生成(不确定客户端代码中是否会发生任何更改)。

这里有一个工作的Cisco DevNet示例演示了解析:https://github.com/CiscoDevNet/axl-java-samples,但是它基于Oracle JDK 1.8

07-27 18:10