This may be a basic obvious question, but what is the best approach to building a new SOAP request to send to a service connector built from an imported service?
For example, I would typically just import the service into a WCF project and call the methods generated in the reference api to build a request. Does anything similarly get generated within Neuron, or would we manually construct the message in a process step setting the http and soap headers and body?
thanks.
Marc
Tags:
Hi Marc,
you don't "create" a soap request. you just set the body of the esb message. its pretty rare when you need to manually set the esb message's SOAP properties. usually you only do that if you want to read or write custom soap headers. The configuration of the service connector sets all the necessary soap headers for the WS* standards...
you can use the import wizard and import the service into Neuron to create the service connector....then its your responsibility to send in the correct message and set the correct action property to call the method you want.
you should've been taught this during training that was conducted. you should go through the web service tutorial found here: http://www.neuronesb.com/user-training/NeuronWebServices.zip
Thanks Marty.
yes, we were showed importing a service during the training - in this scenario I'm getting in a REST msg and sending out SOAP request with the REST msg body. I've looked over the RESTtoSOAP demo and it makes sense. - just wanted to be sure we didn't go down the wrong path if there were other ways to do it.
Only thing that's still fuzzy is setting multiple namespaces in the SOAP header for an authentication element we need to add (see below) - I don't quite understanding the syntax when adding with context.Data.Soap.Headers.Add(key, value) regarding namespaces, for example if I wanted to create the following:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:UserCredentials
xmlns:h="https://myendpoint.com/webapi/"
xmlns="https://myendpoint.com/webapi/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Account>myaccountname</Account>
<AccountPassword>mypassword</AccountPassword>
</h:UserCredentials>
</s:Header>
thanks.
Marc
I think you can pass only one. Not sure if custom headers in SOAP support multiple namespaces...joe can find out though. It looks like in your sample though that the elements only reference one of the namespaces
Marc,
This header should be syntactically the same:
<s:Header>
<UserCredentials xmlns="https://myendpoint.com/webapi/">
<Account>myaccountname</Account>
<AccountPassword>mypassword</AccountPassword>
</UserCredentials>
</s:Header>
The reason it's the same is because the namespace with prefix "h" is the same as the default namespace, and the other two namespace prefixes are not used at all. Can you try this one?
Joe
Thanks Joe. I noticed that as well after, guessing my WCF test request is adding the other namespaces, but are unnecessary. The only remaining issue I am having is passing the XML element nodes as children as my header key value. Having the same issue when I try the SOAP Header sample solution as well.
If I set the key/value as such:
string header = "https://dev.myendpoint.com/webapi/" + "/" + "UserCredentials";
string credentials = "<Account>myacconut</Account>";
context.Data.Soap.Headers.Add(header, credentials);
The XML element <Account> is ignored in this case:
<s:Header>
<UserCredentials xmlns="https://dev.accumedic.com/accuwebapi/">myacconut</UserCredentials>
If I try to create the nodes using XmlDocument, and pass as it's toString as key value into Headers.Add( .. ),
the entire custom UserCredentials header element is ignored and not added.
the Sample shows passing it in as the first way, simply a string:
string header = "http://www.neuronesb.com/samples/soapheaders" + "/" + "NeuronMessageIdHeader";
string messageIdHeader = "<MessageId>" + context.Data.Header.MessageId + "</MessageId>";
context.Data.Soap.Headers.Add(header, messageIdHeader);
What is the correct syntax we should be using?
thanks.
Marc
Hi Joe,
Looks like my previous post got a bit garbled in format. The issue is basically creating child XML elements within the header element. When setting the value for the header key using the Context.Data.Soap.Headers.Add(key,value) method, as the Neuron SOAP Headers Sample solution shows, the XML nodes look like they are ignored when examining the resulting message.
So,
string header = "https://dev.accumedic.com/accuwebapi/" + "/" + "UserCredentials";
string credentials = "<Account>myaccount</Account>";
context.Data.Soap.Headers.Add(header, credentials);
the resulting message is missing the <Account> nodes.
<UserCredentials xmlns="https://dev.accumedic.com/accuwebapi/">myaccount</UserCredentials>
Any ideas?
thanks
Marc
Marc,
You'll need to set the XML to the whole XML value. Under the covers Neuron will replace whatever root value you provide with the last part of the namespace you use. To make life easier I always make them the same :)
Your code should be (also, you had an extra forward slash in your namespace...)
string header = "https://dev.accumedic.com/accuwebapi" + "/" + "UserCredentials";
string credentials = <UserCredentials>"<Account>myaccount</Account></UserCredentials>";
context.Data.Soap.Headers.Add(header, credentials);
Thanks Joe!
Understood. I noticed though if I do not put 2 forward slashes the ending slash gets removed from the namespace. So I end up with:
<UserCredentials xmlns="https://dev.accumedic.com/accuwebapi">
apparently this web service I'm calling is looking for the trailing slash. With 2 slashes one remains and fixes it.
But, I did also notice that I need to explicitly set a default namespace for each child element, otherwise it sets a default namespace as blank and the child elements no longer inherit the default namespace.of the parent node. So I get:
<Account xmlns="">myaccount</Account>
Explicitly setting it for each child node fixes the issue though, just checking if this is intended functionality.
thanks
Marc
Neuron ESB Product Support Forums and Communities
© 2024 Created by Neuron Admin. Powered by