Java SpringWebServiceTemplate&x27;s MarshallSendReceive方法在发送请求时将SOAP头作为null发送
我正在用java开发一个SOAP客户端。我的SOAPRequest如下所示: SOAP请求Java SpringWebServiceTemplate&x27;s MarshallSendReceive方法在发送请求时将SOAP头作为null发送,java,spring,spring-boot,web-services,jakarta-ee,Java,Spring,Spring Boot,Web Services,Jakarta Ee,我正在用java开发一个SOAP客户端。我的SOAPRequest如下所示: SOAP请求 1312 测试213 试验 试验 试验 我使用Spring Framework的WebServiceTemplate来使用SOAPService。但是当我尝试使用它时,我发现作为主体部分的请求对象运行得非常好。但是头部分变为null。我的SOAP客户端如下所示: SOAPClient: 公共对象callWebService(MyRequest){ MyResponse myObj=(MyRespons
1312
测试213
试验
试验
试验
我使用Spring Framework的WebServiceTemplate来使用SOAPService。但是当我尝试使用它时,我发现作为主体部分的请求对象运行得非常好。但是头部分变为null。我的SOAP客户端如下所示:
SOAPClient:
公共对象callWebService(MyRequest){
MyResponse myObj=(MyResponse)getWebServiceTemplate()。MarshalSendReceive(“http://localhost:9000/MyServices/ws/soap/MyService,请求,新WebServiceMessageCallback(){
公共无效doWithMessage(WebServiceMessage消息){
试一试{
SoapMessage SoapMessage=(SoapMessage)消息;
SoapHeader=soapMessage.getSoapHeader();
StringSource headerSource=新的StringSource(“\n\n1312\ntest213\n\n”);
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(headerSource,header.getResult());
}捕获(例外e){
System.out.println(“错误:+e”);
}
}
});
MyResponse=(MyResponse)myObj;
返回myObj;
}
在上面的“请求”中有SOAPRequest的主体部分。请让我知道我在这里缺少了什么。提前谢谢你,我能够解决这个问题。我能够使用JAXBContext添加标题以实现添加标题。我已经修改了链接中给出的代码,它就像gem一样工作。我给出下面的代码供参考: 代码
公共对象callWebService(MyRequest){
MyResponse myObj=(MyResponse)getWebServiceTemplate()。MarshalSendReceive(“http://localhost:9000/MyServices/ws/soap/MyService,请求,新WebServiceMessageCallback(){
公共无效doWithMessage(WebServiceMessage消息){
试一试{
SoapHeader SoapHeader=((SoapMessage)消息).getSoapHeader();
//创建header元素
ObjectFactory=新的ObjectFactory();
MYHeader headerType=factory.createMYHeader();
Auth authType=新的Auth();
authType.setMyID(“1010”);
authType.setPwd(“myPwd”);
headerType.setAuth(authType);
JAXBElement头=
createMYHeader(headerType);
//创建封送拆收器
JAXBContext context=JAXBContext.newInstance(MYHeader.class);
Marshaller=context.createMarshaller();
marshaller.marshall(headers,soapHeader.getResult());
}捕获(例外e){
System.out.println(“错误:+e”);
}
}
});
MyResponse=(MyResponse)myObj;
返回myObj;
}
在我看来,使用更简单、更干净。下面是doWithMessage示例方法代码。让我知道你的想法
import org.springframework.ws.soap.saaj.SaajSoapMessage;
import org.springframework.xml.transform.StringSource;
public void doWithMessage(WebServiceMessage message) {
if (message instanceof SaajSoapMessage) {
try {
SaajSoapMessage soapMessage = (SaajSoapMessage) message;
SoapHeader soapHeader = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<MYHeader>\n<Auth>\n<MyID>1312</MyID>\n<Pwd>test213</Pwd>\n</Auth>\n</MYHeader>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, soapHeader.getResult());
} catch (TransformerFactoryConfigurationError | TransformerException e) {
logger.error(e.getMessage(), e);
}
}
}
import org.springframework.ws.soap.saaj.SaajSoapMessage;
导入org.springframework.xml.transform.StringSource;
公共无效doWithMessage(WebServiceMessage消息){
if(SaajSoapMessage的消息实例){
试一试{
SaajSoapMessage soapMessage=(SaajSoapMessage)消息;
SoapHeader SoapHeader=soapMessage.getSoapHeader();
StringSource headerSource=新的StringSource(“\n\n1312\ntest213\n\n”);
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(headerSource,soapHeader.getResult());
}捕获(TransformerFactoryConfigurationError | TransformerException e){
logger.error(e.getMessage(),e);
}
}
}
public Object callWebService(MyRequest request){
MyResponse myObj = (MyResponse)getWebServiceTemplate().marshalSendAndReceive("http://localhost:9000/MyServices/ws/soap/MyService", request,new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader header = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<MYHeader>\n<Auth>\n<MyID>1312</MyID>\n<Pwd>test213</Pwd>\n</Auth>\n</MYHeader>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
} catch (Exception e) {
System.out.println("ERROR : "+e);
}
}
});
MyResponse response= (MyResponse) myObj;
return myObj;
}
public Object callWebService(MyRequest request){
MyResponse myObj = (MyResponse)getWebServiceTemplate().marshalSendAndReceive("http://localhost:9000/MyServices/ws/soap/MyService", request,new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
try {
SoapHeader soapHeader = ((SoapMessage) message).getSoapHeader();
// create the header element
ObjectFactory factory = new ObjectFactory();
MYHeader headerType = factory.createMYHeader();
Auth authType = new Auth();
authType.setMyID("1010");
authType.setPwd("myPwd");
headerType.setAuth(authType);
JAXBElement<MYHeader> headers =
factory.createMYHeader(headerType);
// create a marshaller
JAXBContext context = JAXBContext.newInstance(MYHeader.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(headers, soapHeader.getResult());
} catch (Exception e) {
System.out.println("ERROR : "+e);
}
}
});
MyResponse response= (MyResponse) myObj;
return myObj;
}
import org.springframework.ws.soap.saaj.SaajSoapMessage;
import org.springframework.xml.transform.StringSource;
public void doWithMessage(WebServiceMessage message) {
if (message instanceof SaajSoapMessage) {
try {
SaajSoapMessage soapMessage = (SaajSoapMessage) message;
SoapHeader soapHeader = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<MYHeader>\n<Auth>\n<MyID>1312</MyID>\n<Pwd>test213</Pwd>\n</Auth>\n</MYHeader>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, soapHeader.getResult());
} catch (TransformerFactoryConfigurationError | TransformerException e) {
logger.error(e.getMessage(), e);
}
}
}