marshalSendAndReceive método de la primavera WebServiceTemplate envía encabezado SOAP como nulo al enviar solicitud

Deepak Ramakrishnan Kalidass:

Estoy desarrollando un cliente SOAP en java.My SOAPRequest es la siguiente:

solicitud SOAP

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://myWs.com/com" xmlns:re="http://myWs.com/myAlert">
   <soapenv:Header>
      <com:MYHeader>
         <com:Auth>
            <com:MyID>1312</com:MyID>
            <com:Pwd>test213</com:Pwd>
         </com:Auth>
      </com:MYHeader>
   </soapenv:Header>
   <soapenv:Body>
      <re:MyRequest>
         <re:MyOrder>
            <re:MyItems>
               <re:ItemCode>TEST</re:ItemCode>
               <re:ItemName>TEST</re:ItemName>
               <re:ItemRef>TEST</re:ItemRef>
            </re:MyItems>
        </re:MyOrder>
      </re:MyRequest>
   </soapenv:Body>
</soapenv:Envelope>

Yo uso de WebServiceTemplate para consumir el SOAPService.But cuando lo intento me parece que el objeto de la petición, que es la sección del cuerpo va perfectly.But la sección de encabezado va como cliente null.My SOAP se da a continuación Spring Framework:

SOAPClient:

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

En lo anterior, la "petición" tiene la sección del cuerpo de la SOAPRequest.Kindly me hizo saber lo que estoy perdiendo de antemano here.Thanks

Deepak Ramakrishnan Kalidass:

Yo era capaz de averiguar la issue.I fue capaz de añadir una cabecera empleando JAXBContext con el fin de lograr añadiendo el header.I han modificado mi código como se da en el enlace aquí , y funcionó como gem.I estoy dando el código de abajo para referencia:

Código

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227866&siteId=1
Recomendado
Clasificación