0

I have following soap web service which I am trying to write a code in java. I have add web service client but having hard time to include header in the web service. This is the code from soap UI. When I pass the parameter through soap UI I get the desired result.

  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
  <soapenv:Header>
  <tem:UserCredentials>
     <tem:userName>?</tem:userName>
     <tem:password>?</tem:password>
  </tem:UserCredentials>
 </soapenv:Header>
 <soapenv:Body>
  <tem:VerifyAmount>
     <tem:ID>?</tem:ID>
     <tem:AMOUNT>?</tem:AMOUNT>
  </tem:VerifyAmount>

But when I call from eclipse I get error message. Here is my main class.

import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import org.apache.axis.message.SOAPHeaderElement;
import org.tempuri.TestService;
import org.tempuri.TestServiceStub;
import org.tempuri.VerifyServiceLocator;
public class Program {
public static void main(String[] args) throws SOAPException
    {
    SOAPHeaderElement UserCredentials;
    SOAPElement oElement;
    UserCredentials = new SOAPHeaderElement("urn:thisNamespace","UserCredentials");
    UserCredentials.setPrefix("tem");
    ((SOAPHeaderElement) UserCredentials).setMustUnderstand(false);
    oElement = UserCredentials.addChildElement("userName");
    oElement.addTextNode("system");
    oElement = UserCredentials.addChildElement("password");
    oElement.addTextNode("abc123");

    VerifyServiceLocator verifyService = new VerifyServiceLocator();

    try {

        TestServiceStub stub = new TestServiceStub();
        stub.setHeader(UserCredentials);
        TestService testService = verifyService .getTestService();
            String verifyAmount = testService.verifyAmount("123", "100");



    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        }
   }

The error I am getting after running looks like this

   AxisFault
   faultCode: {http://schemas.xmlsoap.org/soap/envelope/}MustUnderstand
   faultSubcode: 
   faultString: Missing required header 'UserCredentials'.
   faultActor: 
   faultNode: 
   faultDetail: 
   {http://xml.apache.org/axis/}stackTrace:Missing required header 'UserCredentials'.
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2967)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:327)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at org.tempuri.TestServiceStub.verifyTxn(TestServiceStub.java:118)
at iBankingWebService.Program.main(Program.java:38)
  • You should pass **UserCredentials** to your header. You can find detailed info about how to set authentication parameters to header here: [Adding elements in SOAP Header request for authentication](https://stackoverflow.com/questions/12284909/adding-elements-in-soap-header-request-for-authentication) – fiskra May 23 '17 at 13:42
  • I have gone through the topic but I am getting hard to call handleMessage method from my main class – Santosh Shrestha May 23 '17 at 14:01

0 Answers0