Soap 用Lambda替换匿名内部类。这是怎么回事?
在发送SOAP消息时,我想添加一些自定义头,所以我喜欢下面的内容Soap 用Lambda替换匿名内部类。这是怎么回事?,soap,lambda,java-8,Soap,Lambda,Java 8,在发送SOAP消息时,我想添加一些自定义头,所以我喜欢下面的内容 JAXBElement<ConfigurationResponse> jaxbElementResponse = (JAXBElement<ConfigurationResponse>) getWebServiceTemplate() .marshalSendAndReceive(urlToSend,
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);
}
});
JAXBElement-jaxbElementResponse=(JAXBElement)getWebServiceTemplate()
.MarshallSendReceive(urlToSend,
新建ObjectFactory().createConfigurationRequest(请求),
新的WebServiceMessageCallback(){
@凌驾
public void doWithMessage(WebServiceMessage消息)引发IOException、TransformerException{
SaajSoapMessage soapMessage=(SaajSoapMessage)消息;
SoapHeaderElement id=soapMessage.getSoapHeader().addHeaderElement(新的QName(uri,localpart,前缀));
id.setText(文本);
}
});
但是“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);
});
JAXBElement-jaxbElementResponse=(JAXBElement)getWebServiceTemplate()
.MarshallSendReceive(urlToSend,
新建ObjectFactory().createConfigurationRequest(请求),(WebServiceMessage消息)->{
SaajSoapMessage soapMessage=(SaajSoapMessage)消息;
SoapHeaderElement id=soapMessage.getSoapHeader().addHeaderElement(新的QName(uri,localpart,前缀));
id.setText(文本);
});
都一样吗?如果是,这是如何工作的?Lambda表达式是匿名类上的语法糖。Lambda可以在类型为函数接口的情况下使用,函数接口只声明一个抽象方法。Lambda表达式提供了该单一方法的实现
对于您的情况,WebServiceMessageCallback是一个功能接口。它有一个抽象方法:doWithMessage(…)。您创建的Lambda表达式提供了该方法的实现。它不一样,更好!特别是它没有捕获
这个对象。@TagirValeev:很好!但我不明白这是怎么回事。例如,它如何使用doWithMessage()
而不提及方法名称?