0

AXL 12.5, Apache CXF 3.3.6, OpenJDK 14, Spring 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')
4

2 回答 2

0

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

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

于 2020-06-10T20:55:38.070 回答
0

Cast 必须完成org.w3c.dom.Element,并且工作正常。

于 2020-06-11T13:48:58.363 回答