Weblogic包装连接上的对象。我知道我可以禁用包装,但我希望有一些代码可以启用它。
XMLType是JMS消息队列的有效负载。接收消息然后抛出和预测的监听器看起来像
public Object fromMessage(Message message) throws .. {
AQjmsAdtMessage aqMessage = (AQjmsAdtMessage) message;
Object payload = aqMessage.getAdtPayload();
return handler.getXmlContent((XMLType) payload);
}
如果我什么都不做,我会得到类强制转换异常。如果启用了包装,则接收的有效负载的实际类型是Weblogic上的weblogic.jdbc.wrapper.WrapperSQLXML_oracle_xdb_XMLType
,如果禁用包装,或者在Tomcat上运行时,它是XMLType。
我无法找到关于weblogic.jdbc.wrapper.WrapperSQLXML_oracle_xdb_XMLType
类的大量文档,但我发现它可以调用unwrap
(Class cls)方法。以下代码有效:
Method unwrap = payload.getClass().getMethod("unwrap", Class.class);
XMLTypeIntf xmlType = (XMLTypeIntf) unwrap.invoke(payload, XMLTypeIntf.class);
不幸的是,我不知道如何处理获得的XMLTypeIntf
接口,如何将其转换为真正的XMLType,Document或至少是原始XML流。 XMLTypeIntf
扩展java.sql.SQLXML, oracle.jdbc.internal.OracleOpaque
和oracle.sql.ORAData
因此理论上可以提供内容,但我尝试从这些继承的接口调用的所有内容似乎都只是未实现的存根。是否有任何可以提供XML?
我也尝试调用WrapperSQLXML_oracle_xdb_XMLType.unwrap(XMLType)
,但这也会抛出异常 - "必须是一个界面"。
有没有办法从WrapperSQLXML_oracle_xdb_XMLType对象中获取可用的XML对象或内容?