Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringWebServiceTemplate&x27;s MarshallSendReceive方法在发送请求时将SOAP头作为null发送_Java_Spring_Spring Boot_Web Services_Jakarta Ee - Fatal编程技术网

Java SpringWebServiceTemplate&x27;s MarshallSendReceive方法在发送请求时将SOAP头作为null发送

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

我正在用java开发一个SOAP客户端。我的SOAPRequest如下所示:

SOAP请求

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);
        }
    }
}