使用Axis 2进行反序列化

时间:2011-01-27 10:16:30

标签: java axis2 xml-deserialization

我有一些Java代码,它接受XML(SOAP)消息并返回反序列化的对象:

public static <T> T deserializeObject(String xml, Class<T> clazz) throws AxisFault, Exception {
    assert xml != null : "xml != null";
    assert clazz != null : "clazz != null";

    T result = null;
    try {
        Message message = new Message(SOAP_START + xml + SOAP_END);
        result = (T)message.getSOAPEnvelope().getFirstBody().getObjectValue(clazz);
    } catch (Exception e) {
        // most likely namespace error due to removed namespaces
        Message message = new Message(SOAP_START_XSI + xml + SOAP_END);
        result = (T)message.getSOAPEnvelope().getFirstBody().getObjectValue(clazz);
    }
       return result;
    }

但是此代码仅适用于Axis 1.4 :-(有人可以帮助我让代码与Axis 2一起使用吗?

事实上,我可能只需要知道用import org.apache.axis.Message代替什么? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

Axis2引擎中的每条消息都包含在MessageContext对象中。当SOAP消息到达系统或准备发送时,我们创建了SOAP消息的AXIOM对象模型。

(有关AXIOM的更多信息,请阅读AXIOM文章系列)。然后,此AXIOM模型包含在消息上下文对象中。让我们看看如何在Axis2中访问此SOAP消息。

// if you are within a handler, reference to the message context 
MessageContext messageContext; 

对象将通过Handler.invoke(MessageContext)方法传递给您。

SOAPEnvelope soapEnvelope = messageContext.getEnvelope();

请看: javax.xml.soap Interface SOAPEnvelope

Processing Axis2 message