在发送SOAP消息时,我想添加一些自定义标题,所以我在下面做了;
JAXBElement<ConfigurationResponse> jaxbElementResponse = (JAXBElement<ConfigurationResponse>) getWebServiceTemplate()
.marshalSendAndReceive(urlToSend,
new ObjectFactory().createConfigurationRequest(request),
new WebServiceMessageCallback() {
@Override
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
SaajSoapMessage soapMessage = (SaajSoapMessage) message;
SoapHeaderElement id = soapMessage.getSoapHeader().addHeaderElement(new QName(uri, localpart, prefix));
id.setText(text);
}
});
但是“NetBeans”告诉我我可以使用lambda expr。所以,如果我做了改变,就像是,
JAXBElement<ConfigurationResponse> jaxbElementResponse = (JAXBElement<ConfigurationResponse>) getWebServiceTemplate()
.marshalSendAndReceive(urlToSend,
new ObjectFactory().createConfigurationRequest(request), (WebServiceMessage message) -> {
SaajSoapMessage soapMessage = (SaajSoapMessage) message;
SoapHeaderElement id = soapMessage.getSoapHeader().addHeaderElement(new QName(uri, localpart, prefix));
id.setText(text);
});
两者都一样吗?如果是,这是如何工作的?
答案 0 :(得分:1)
Lambda表达式是匿名类的语法糖。只要类型是功能接口,Lambda就可以使用,这是一个只声明一个抽象方法的接口。 Lambda表达式提供了该单个方法的实现。
对于您的情况,WebServiceMessageCallback是一个功能接口。它有一个抽象方法:doWithMessage(...)。您创建的Lambda表达式提供了该方法的实现。