SOAP Protocol





Simple Object Access Protocol (SOAP) is a protocol specification for exchanging structured information in the implementation of web services. It uses the XML Information Set for its message format and uses other protocols, notably Hypertext Transfer Protocol (HTTP) and the Simple Mail Transfer Protocol (SMTP) for message transmission.

Share tech news, updates, or what's on your mind.

Sign up to Post

I have a strange SoapHeader issue, which requires me to show the actor and mustUnderstand in a security header which is part of my SoapHeader. I have 2 questions, how can i set the value of these 2 attributes and how can i place them in my Security Element which is part of the SoapHeader.

This is what it should look like
<soapenv:Envelope xmlns:soapenv="" xmlns:xsd="" xmlns:xsi="">
    <Security xmlns:wsse="" soapenv:actor="" soapenv:mustUnderstand="0">

Open in new window

Cloud Class® Course: Certified Penetration Testing
LVL 12
Cloud Class® Course: Certified Penetration Testing

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

Recently got frustrated trying wsimport on several old SOAP sites. Found out its all been deprecated so no SOAP sites to run wsimport on.
Can anyone give me a few just to see that wsimport is working as I expect it should?
I would appreciate a chance to test these things also .
So other than web pages processing JAX-RS(Restful) links exactly what if anything is equivalent to WSDLs in the JAX-RS world
I mean put, post, get delete insert? httpd protocol.
I'm using EncryptedXML to decrypt a SOAP message.  I'm loading the certificate manually and trying to decrypt the message.  But I'm getting the following error:

Unable to retrieve the decryption key.

Open in new window

Here is my code:
stream.Position = 0;
var doc = new XmlDocument();
doc.PreserveWhitespace = true;

var clientCertEnc = new X509Certificate2(@"C:\certificates\xxxxxt.pfx", "xxxxxx");
var privateKeyRSAA = (RSACryptoServiceProvider)clientCertEnc.PrivateKey;

var exml = new EncryptedXml(doc);
exml.AddKeyNameMapping("KeyIdentifier", privateKeyRSAA);

Open in new window

Here is my xml:
            <o:Security s:mustUnderstand="1" 
                <o:BinarySecurityToken u:Id="uuid-10490fb0-8ee0-4a4c-a8db-77242c9a3b7f-2" ValueType="" 

Open in new window


I'm in the process of developing an eBay application in Microsoft Access 2016. So far my project has been fine and the API calls I have made have been successful but I have now come to a stumbling block that I need some help with.

The API calls I have used so far are all for single listings so this is easy and I just pass the XML through an HTTP request. I want to make this much more efficient and use eBay's File Transfer API where I can send more than 1 call at a time but I'm really struggling on trying to understand how to build the call.

The data has to be sent as Binary Base64 which I have a converter to do this. I can build the XML that needs to be sent but I just don't understand how to send the XML from a string as apposed to a physical file.

I've read loads on the internet about having to create it as a multipart request with boundaries but really not sure how to start building that. I can provide code if need be so you can see where I am at.

I hope this makes sense.
I'm trying to figure out why I can't seem to decrypt an encrypted key from .NET with a X509 Certificate.  

.NET Code
encryptedKey = "jW3VDsUZWIdzfZ1bPN3iKI2Pf9u22kUax0DFnF3A9H+nvcBQuVC2efw1FYGm5/AvnN27kXqA4PyCqcQLp/tguVqHtzdR7mJtkTCyY8TUoAej2Mqzv2uiEKULB/8rlPDl2DOkSMGJqieenAG/7gZjWhlU0eYrlcMi5dtAnPFTfy+LvtJ6bbGEDgy4FhoT49T6sO0kjBJHp5YI0p/CeEuc+WMT/BMGG1YuDPswltj0VzeaE3KbHSLvJPjGCQ3U0YkUWm8h9zM22S/mRvfMhEu1aRdQpojGUiSLKUJyotNu8fRulKeB1TVuE7AlDGrbAUsRtU+y6PdLMcEHW+BRq5Uouw==";

var encryptedKeyByte = Convert.FromBase64String(encryptedKey);

var clientCert = new X509Certificate2(@"C:\certificates\xxxxx.pfx", "xxxx");
var rsa = (RSACryptoServiceProvider)clientCert.PrivateKey;
byte[] key = rsa.Decrypt(encryptedKeyByte, false);

Open in new window

The error I get when I try to run the last line of the code rsa.Decrypt(encryptedKeyByte, false)
The parameter is incorrect.

In SOAP UI the decryption works where I use the same certificate.  I just had to convert the file pfx to a jks file to get it working in SOAP UI.  But other than that the settings look the same to me.
Here is a screen shot of the SOAP UI settings.  I'm guessing the Signature Keystore in the SOAP UI seetings is not used for the decryption process.  The Decrypt Keystore settings in SOAP UI is the one I'm using in .NET.  Only in .NET its a pfx file.  
SOAP UI Settings
I also imported the certificate to my local box to see some of the details.  Here is what I see:
Certificate seen in MMCcertificate_properties_in_mmc_2.pngCertificate seen in MMC
Please let me know if you need me to provide any other information or need me to test something out.  Thanks in advance for your help.
I have a soap message that is signed with a x509 Certificate. How do I manually decrypt it. I would think this would be easy but I can't seem to figure it out.

I tried this example but it did not work for me.
I'm using C# to call a Java Webservice.  Fiddler gives me a status of 200. So my call to the service is good.  But something in the .NET does not like my MTOM message.  Any ideas?  Here are all the details.  

I'm getting this error:
MTOM messages must have type 'application/xop+xml'.

Open in new window

The stack trace says:
Server stack trace: 
   at System.ServiceModel.Channels.MtomMessageEncoder.MtomBufferedMessageData.TakeXmlReader()
   at System.ServiceModel.Channels.BufferedMessageData.GetMessageReader()
   at System.ServiceModel.Channels.BufferedMessage..ctor(IBufferedMessageData messageData, RecycledMessageState recycledMessageState, Boolean[] understoodHeaders, Boolean understoodHeadersModified)
   at System.ServiceModel.Channels.MtomMessageEncoder.ReadMessage(ArraySegment`1 buffer, BufferManager bufferManager, String contentType)
   at System.ServiceModel.Channels.HttpInput.DecodeBufferedMessage(ArraySegment`1 buffer, Stream inputStream)
   at System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream)
   at System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(HttpRequestMessage httpRequestMessage, Exception& requestException)
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)

Open in new window

I am requesting a web service through an xml, I verify the answer with the Fiddler tool and it returns an Http 200, but the answer as such does not return the information that the web service should send me but it returns the wsdl of the same. I do not know if you are making any mistakes in the programming, please help me.

private void SendXmlToWebService()
        {            XmlDocument xmlDoc = new XmlDocument();
            StringBuilder rawXml = new StringBuilder();
            PostXml("", rawXml.ToString());

        static string GetXmlString(XmlDocument xmlDoc)
            StringWriter sw = new StringWriter();
            XmlTextWriter xw = new XmlTextWriter(sw);
            return sw.ToString();

        public void PostXml(string url, string xml)
            byte[] bytes = Encoding.UTF8.GetBytes(xml);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentLength = bytes.Length;
            request.ContentType = "text/xml; charset=utf-8";
            request.Host = "";
            request.Accept = "gzip,deflate";

            using (Stream requestStream =
Is it possible, in Embarcadero delphi, to be connected to a WEB-Services SOAP (imported with WSDL-Import and with THTTPRIO component ) with a https connection and where the WebServices need a Certificate? How set the certificate?
I need an example.
Consuming ASPNET WSDL service using PHP
Hi Experts,
having some serious issues getting this one right. I am writing a PHP web app that needs to post an xml to an ASPNET WSDL service. Upon submitting data via PHP service it gives me an error "SoapFault exception: [s:Client] An error has occurred during service execution halting any further processing."
I then decided to use ReadyAPI and the error it gives is "HTTP/1.1 415 Cannot process the message because the content type 'multipart/related; type="text/xml"; start="<>"; boundary="----=_Part_0_2905742.1520010170903"' was not the expected type 'text/xml; charset=utf-8'."

Really baffled with this one. Have tried so many different soap codes to submit data and same response. any suggestions?
Cloud Class® Course: Python 3 Fundamentals
LVL 12
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

any one can help me for this php code
I have a username and password for the real estates agent theysaid I have to call the web service and get a response but
How can I integrate to my theme in wordpress if u want to help me will be good or I can hire you too but I like to learn anny I wait for your answer guys thank you
Hi my soap client is not sending any xml request to the soap server. I tried sending data with wsdl link.

$client = new nusoap_client('', 'wsdl');


$merchantIDStruct = new stdClass();
$merchantIDStruct->name = 'merchant_id';
$merchantIDStruct->value = '1234567';

$detailArray = new stdClass();
$detailArray->item = $merchantIDStruct;

$parameters = new stdClass();
$parameters->details = $detailArray;
$parameters->billerRef = "RB_C1_RECO";
$parameters->payinstrRef = "RB_C1_RECO";

//$param_merchant_id = array( "merchant_id" => "5235437" );
//$parameters = array("Request" => $param_Request, "merchant_id" => $param_merchant_id);
$query = 'php';
 /* create the proxy object */
$proxyclientwsdl = $client->getProxy();
$result = $proxyclientwsdl->RECOstep1($parameters);


<wsdl:definitions xmlns:soap="" xmlns:wsdl="" xmlns:typens="urn:PaymentServer" xmlns:xsd="" xmlns:soapenc="" name="RECOstep1" targetNamespace="urn:PaymentServer">
<xsd:schema xmlns:xsd="" xmlns:p="" targetNamespace="urn:PaymentServer">
<xsd:element name="Request">
<xsd:element name="billerRef" minOccurs="1" maxOccurs="1">
I had this question after viewing New to SOAP and need some direction.
Working with a web service and a little out of my depth.  The example that I have been given asks for my cert with my private key as an option in stream_context_set_option.  Could this expose the private key unnecessarily / does this actually submit to the service?
I need a step by step instruction how to build a soap web service using PowerBuilder 12.6 or 2017 in Classic.
Trying to consume webservice using wcf client, getting following error

The content type multipart/related; boundary=MIMEBoundaryurn_uuid_B50EC784A204DC07C91495512014914; type="text/xml"; start="<>"; charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the  . The first 1024 bytes of the response were ...

Fiddler is showing the complete response but wcf is not able to deserialize the complete response. Response contains Japanese characters.
Example for WinRM  API using SOAP
Here is my code :


public class SpringWSClientSample {

      private static final String MESSAGE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"\" xmlns:web=\"http://www.webserviceX.NET\">"
                  + "<soapenv:Header>"
                  + "</soapenv:Header>"
                  + "<soapenv:Body>"
                  + "<web:ChangeMetricWeightUnit>"
                  + "<web:MetricWeightValue>40000</web:MetricWeightValue>"
                  + "<web:fromMetricWeightUnit>milligram</web:fromMetricWeightUnit>"
                  + "<web:toMetricWeightUnit>gram</web:toMetricWeightUnit>"
                  + "</web:ChangeMetricWeightUnit>"
                  + "</soapenv:Body>"
                  + "</soapenv:Envelope>";

      private final WebServiceTemplate webServiceTemplate = new WebServiceTemplate();

      public static void main(String[] args) throws Exception {

            SpringWSClientSample client = new SpringWSClientSample();

      public void simpleSendAndReceive() {
            try {
                  StreamSource source = new StreamSource(new StringReader(
                  StreamResult result = new StreamResult(System.out);
Upgrade your Question Security!
LVL 12
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

I am using CXF, my question is two folds:

1) How can I generate a custom soap header for an outgoing response?

2) How can I inject some value from the implementation function?
When I run gSOAP client it gives me error :

"Validation constraint violation: tag name or namespace mismatch in element ''" Detail: [no detail]

But below is RECV.log :

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENC=""
   <ns1:getOrderDetailsResponse xmlns:ns1="">
      <supplText>Order details extract successful</supplText>

Client code option set :

 SOAP_CMAC::com_x002ebt_x002eecbs_x002eCI19_x002eCustomerInformationSoapBindingProxy …
I have a Drools Rule file which processes some business logic based on input from a java file and gives back output back to Java.

I need to get the response in a web service request and response format by passing data in SOAP format and snd get SOAP response. How can we do that?
I am trying to create a SOAP Request xml from xpath map using membrane-soa api. If I try to set more than 10 values for unbound list I am not able to generate the tags for the values that are set beyond size of 10. Can any tried this? Can you please help?

I am calling webservice to see next and coming up games for a certain soccer club ( it is Icelandic :) ).  I have working fla file where I call for status in a tournament,  with one variable in the request ( the number of tournament)
The code from that file:

var ws:WebService = new WebService();
ws.addEventListener(Event.CONNECT, connected);
ws.cacheResults = true;
var initTime:Number;
function connected(evt:Event):void{
	ws.MotStada(done, "33903");	//called for "MotStada"(status in the tournament)"number of tournament",  
function done(serviceResponse:XML):void{
	namespace soap = "";
	namespace unnamed = "";
	use namespace soap;
	use namespace unnamed; 
	trace("\nWeb Service Result: ");

Open in new window

But for this I need to put in more, as shown in the example 
How is that done?
Here is what I have done so far:

var ws:WebService = new WebService();
ws.addEventListener(Event.CONNECT, connected);
//more info at
//Call for games coming up for a club

ws.cacheResults = true;
var initTime:Number;
function connected(evt:Event):void{
	ws.FelogLeikir(done,"107"); /*<FelagNumer>String=107, <VollurNumer>String=All/not defined,<FlokkurNumer>String=111,<DagsFra>String=date from today, <DagsTil>String=date after ca 2months */
function done(serviceResponse:XML):void{ 
	trace("\nWeb Service Result: ");

Open in new window

I have a Java Soap Client that send some xml files to a remote server to be processed.

It uses java 1.7's java.nio.file.WatchEvent<Path> (almost just like it's explained here) to monitor new files added to a directory.

It is processing about 2 or 3 files per minute.

Looking for a way to increase the speed of files sent and processed I decided to start the same jar twice, monitoring different directories of course.

I can't explain why both processes are still processing about 2 or 3 files per minute. I doubt the problem is in the remote server, since I have a log showing the moment when each file begins and ends it's processing, and it shows almost the same behavior when using only one linux process than when using two.

I mean the total throughput is the same when using only one linux process than when using two.

The size of the xml's are almost always about 8KB.

I'm guessing there should be a bottleneck somewhere other than CPU.

Any suggestions on what tool or tools should I use to find it and how to use them? (Remember, it's a Java application)

I would prefer to use free or openSource tools, but I could consider using a paid one.


SOAP Protocol





Simple Object Access Protocol (SOAP) is a protocol specification for exchanging structured information in the implementation of web services. It uses the XML Information Set for its message format and uses other protocols, notably Hypertext Transfer Protocol (HTTP) and the Simple Mail Transfer Protocol (SMTP) for message transmission.

Top Experts In
SOAP Protocol