我正在使用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消息头不是我的选择,因为它由其他接口拥有。还有其他解决办法吗?
谢谢!
答案 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);
...
}