繁体   English   中英

如何读取ArrayList <T> 来自JMS队列的对象?

[英]How to read a ArrayList<T> object from JMS queue?

我是java的新手,我正在尝试将集合对象ArrayList<T>读取并写入JMS队列。 我可以使用以下代码段将对象写入队列。

List<Request> reqList = new ArrayList<Request>();
... code that populates the list ...
ObjectMessage om = session.createObjectMessage((Serializable) requestList);

上面的代码部分工作正常,我可以看到JMS队列中的记录。 现在我无法从队列中读回记录,下面是代码片段。

@Override
public void onMessage(Message msg)
{
    try {
        String msgText;
        msgText = msg.toString();
        List<Request> requestList = null;
        requestList = msg.getBody(ArrayList<Request>);

    } catch (JMSException jmse) {
        System.err.println("An exception occurred: " + jmse.getMessage());
    }
}

我无法完成该方法,因为我在第4行收到错误。方法getBody期望我无法提供的类的类型。 我尝试了不同的选项,如Request[].classArrayList.classrequest.getClass()

但他们似乎都没有工作。 任何人都可以帮我指定ArrayList<T>List<T>的正确类型以及如何获取它?

仅供参考, javax.jms api中getBody的方法声明是

public <T extends Object> T getBody(Class<T> type) throws JMSException; 

我感谢您的帮助。

问候。

试着像这样发送;

ArrayList<Request> reqList = new ArrayList<Request>();
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setObject(reqList);
producer.send(objectMessage);

并按如下方式阅读:

...
if (message instanceof ObjectMessage) {
Object object = ((ObjectMessage) message).getObject();
ArrayList<Request> request = (ArrayList<Request>) object);
...

如果这不起作用,请尝试创建和包含多个选项的对象,例如具有作为请求列表的字段的请求。 不要忘记Requests对象必须实现Seriazable。

在语句msg.getBody(ArrayList<Request>) ,将ArrayList<Request>替换为List.class

该方法期望一个Class引用,而不仅仅是类的名称。 如果没有.class后缀, ArrayList只是类型名称,而不是类引用。 这仍然会生成一个原始类型警告,(不幸的是)你必须使用@SuppressWarnings("rawtypes")来抑制它。

如果您发现抑制警告令人反感或无效,则有一些替代方法可以避免原始类型错误。 您可以使用Serializable.class作为正文返回类型,然后将其强制转换为List<Request> 这样可以避免原始类型警告,但会导致未经检查的强制转换警告。 同样,这可以通过@SuppressWarnings("unchecked")直接应用于完成赋值的局部变量(即不在方法级别)来沉默。 没有压制警告,没有真正的解决方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM