如何将其他字段与soapMessage一起发送到soap处理程序?

时间:2012-02-22 23:28:02

标签: web-services soap jax-ws

我正在使用SoapHandler为Web服务客户端记录RequestXML,如下所示

public boolean handleMessage(SOAPMessageContext smc) {
    logToSystemOut(smc);
    return true;
}


private void logToSystemOut(SOAPMessageContext smc) {
     Boolean outboundProperty = (Boolean)
     smc.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);

    if (outboundProperty.booleanValue()) {
        out.println("\nOutbound message:");
    } else {
        out.println("\nInbound message:");
    }

    SOAPMessage message = smc.getMessage();
    try {
        message.writeTo(out);
        out.println("");   
        } catch (Exception e) {
        out.println("Exception in handler: " + e);
    }
} 

有一个新的要求将此xml添加到DB以及一些额外的值(xml中不存在)。有什么办法可以将几个额外的字段传递给上面的soap处理程序(在handleMessage方法中)?

请注意,更改xml / WSDL或将其添加到SOAP消息头不是我的选择,因为它由其他接口拥有。还有其他解决办法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将服务类强制转换为类型为“BindingProvider”的类。在此表单中,您可以使用它来为其分配对象,以后可以从SOAPHandler访问这些对象。另一个有用的用法是您也可以通过这种方式更改endPoint URL。

在致电服务之前:

    MySoapServicePortType service = new MySoapService().getMySoapServicePort();
    BindingProvider bp = (BindingProvider)service;
    MyTransferObject t = new MyTransferObject();
    bp.getRequestContext().put("myTransferObject", t);
    TypeResponse response = service.doRequest();
    SOAPMessage message = t.getRequestMessage(message);

从日志记录功能中执行:

private void logToSystemOut(SOAPMessageContext smc) {
    ...
    MyTransferObject t = (MyTransferObject) messageContext.get("myTransferObject");
    if (outboundProperty.booleanValue())
        t.setRequestMessage(message);
    else
        t.setResponseMessage(message);
    ...
}