<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:WS_CONFIG_AX">
<soapenv:Header>
<urn:AuthenticationInfo>
<urn:userName>USERNAME</urn:userName>
<urn:password>PASSWORD</urn:password>
<!--Optional:-->
<urn:authentication/>
<!--Optional:-->
<urn:locale/>
<!--Optional:-->
<urn:timeZone/>
</urn:AuthenticationInfo>
</soapenv:Header>
<soapenv:Body>
<urn:GetList_Operation_1>
<urn:Qualification>'TYPE' = "Service Request"</urn:Qualification>
<urn:startRecord>0</urn:startRecord>
<urn:maxLimit>1</urn:maxLimit>
</urn:GetList_Operation_1>
</soapenv:Body>
Using WebServiceConsumer I have to pass the username and password. I am not sure which to send. Can I use transform message or have to use a different method?
You can add a property named soap.AuthenticationInfo before constructing the payload and pass it to the wsconsumer.
See below: Here the payload should be constructed as the object AuthenticationInfo.
<set-property propertyName="soap.AuthenticationInfo" value="#[payload]" doc:name="Property" />
After this construct your soap body (using dataweave or something) and pass it to the wsconsumer.
Check the section Adding custom headers in the below link:
https://docs.mulesoft.com/mule-user-guide/v/3.6/web-service-consumer
Related
I am deploying a POJO as a service in axis 2 1.7.8 . Following is the method signature :
public String authenticate(String username, String password, String dName, String sName)
{
return authenticateWithRole(username, password, "", dName, sName);
}
I am skipping the wsdl generated part. Following is the Request SOAP as generated in SOAPUI :
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:lab="test_authenticate">
<soap:Header/>
<soap:Body>
<lab:authenticate>
<!--Optional:-->
<lab:username>a</lab:username>
<!--Optional:-->
<lab:password>b</lab:password>
<!--Optional:-->
<lab:dName>c</lab:dName>
<!--Optional:-->
<lab:sName>d</lab:sName>
</lab:authenticate>
</soap:Body>
</soap:Envelope>
The above SOAP works. If the sequence of the parameters is changed, things do not work. For example, if I send the 'sName' parameter as first parameters, the preceding parameter values are set to null :
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:lab="test_authenticate">
<soap:Header/>
<soap:Body>
<lab:authenticate>
<!--Optional:-->
<lab:sName>d</lab:sName>
<!--Optional:-->
<lab:username>a</lab:username>
<!--Optional:-->
<lab:password>b</lab:password>
<!--Optional:-->
<lab:dName>c</lab:dName>
</lab:authenticate>
</soap:Body>
</soap>
This means that the sequence of parameters matters in axis 2.
How do I change this so that the second SOAP also works and the client is not bound to send the parameters in fixed sequence.
Thanks
The problem was in the BeanUtils.deserialize of apache-adb library method. So if the parameters in are not sent in the order they are defined at the method level, parameters which are pushed back in the order are set to null.
Needs a code fix.
(Wso2 Api Manager 2.6.0) How to send a list of string as input using mediator?
I have a Api and my api have a list of string for input.
my api is soap.
I think mediator can help me.
I want a mediator for this api.
for example this is my input:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<soapenv:Header/>
<soapenv:Body>
<tem:GetData>
<!--Optional:-->
<tem:value>
<!--Zero or more repetitions:-->
<arr:string>a</arr:string>
<arr:string>s</arr:string>
<arr:string>f</arr:string>
</tem:value>
</tem:GetData>
</soapenv:Body>
</soapenv:Envelope>
and this is my output
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetDataResponse xmlns="http://tempuri.org/">
<GetDataResult>You entered: a s f</GetDataResult>
</GetDataResponse>
</s:Body>
</s:Envelope>
I have upgraded my web services from apache axis1 to axis2, but I wanted to send the same response as it was earlier.
My axis1 response looks like below
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<testServiceResponse xmlns="http://webservices.com.test.com">
<testServiceReturn>SUCCESS</testServiceReturn>
</testServiceResponse>
</soapenv:Body>
</soapenv:Envelope>
and My axis2 response is
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:testServiceResponse xmlns:ns="http://webservices.com.test.com">
<ns:return>SUCCESS</ns:return>
</ns:testServiceResponse>
</soapenv:Body>
</soapenv:Envelope>
I still wanted to send the response tag as 'testServiceReturn' instaed of 'return'.
Thanks in advance.
I'm trying to connect to a SOAP 1.1 webservice, using TLS.
The certificate has been set up right, and I am able to communicate with the webservice.
However, when I try to do this using a plain C# project, using proxyclasses generated by VS2010, the request seems to be incomplete, as in, the empty tags are not in the request. I then get a "This is an operation implementation generated fault" fault, viewable in Fiddler
If I then try to launch a request using SoapUI, I get a succesful response from the webservice.
I used Fiddler to compare both requests, and I noticed that the C# request was pretty plain, only sending elements that were filled in in my C# class.
But when I check the SoapUI request, this request included EVERY element defined in the WSDL/XSD's, even though they're empty.
I'm trying to understand how I can configure the C# client to include empty elements, to see if the webservice will accept my request, however I was unable to find such setting.
The C# request response:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xmlns="">
SOAP-ENV:Server
</faultcode>
<faultstring xmlns="">
This is an operation implementation generated fault
</faultstring>
<faultactor xmlns=""/>
<detail xmlns="">
<ns:SOAPFault xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="urn:xxx:xxx:data:soapfault:1:standard" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<ns:ErrorCode>2.0</ns:ErrorCode>
<ns:ErrorText>XML schema validation error</ns:ErrorText>
<ns:ErrorDetails>
/{urn:xxx:xxx:service:contractcancellation:1:standard}ContractCancellationRequestEnvelope[1]/part1[1]/ContractCancellationRequestEnvelope[1]/BusinessDocumentHeader[1]/Destination[1]
</ns:ErrorDetails>
</ns:SOAPFault>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
The C# request:
POST xx HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:ContractCancellationRequestEnvelope"
Host: xx
Content-Length: 887
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ContractCancellationRequestEnvelope xmlns="urn:xxx:xxx:data:contractcancellationrequest:1:standard">
<Portaal_Content>
<Portaal_MeteringPoint>
<EANID>xxx</EANID>
<MPCommercialCharacteristics>
<ContractCancellationDate>
2013-11-15
</ContractCancellationDate>
</MPCommercialCharacteristics>
<Portaal_Mutation>
<Initiator>xxx</Initiator>
<Dossier>
<ID>TST0000001</ID>
</Dossier>
</Portaal_Mutation>
</Portaal_MeteringPoint>
</Portaal_Content>
</ContractCancellationRequestEnvelope>
</s:Body>
</s:Envelope>
The SoapUI request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xxx:xxx:data:contractcancellationrequest:1:standard">
<soapenv:Header/>
<soapenv:Body>
<urn:ContractCancellationRequestEnvelope>
<urn:BusinessDocumentHeader>
<!--Optional:-->
<urn:ContentHash>?</urn:ContentHash>
<!--Optional:-->
<urn:ConversationID>?</urn:ConversationID>
<!--Optional:-->
<urn:CorrelationID>?</urn:CorrelationID>
<urn:CreationTimestamp>?</urn:CreationTimestamp>
<!--Optional:-->
<urn:DocumentID>?</urn:DocumentID>
<!--Optional:-->
<urn:ExpiresAt>?</urn:ExpiresAt>
<urn:MessageID>?</urn:MessageID>
<!--Optional:-->
<urn:ProcessTypeID>?</urn:ProcessTypeID>
<!--Optional:-->
<urn:RepeatedRequest>?</urn:RepeatedRequest>
<!--Optional:-->
<urn:TestRequest>?</urn:TestRequest>
<urn:Destination>
<urn:Receiver>
<!--Optional:-->
<urn:Authority>?</urn:Authority>
<!--Optional:-->
<urn:ContactTypeIdentifier>?</urn:ContactTypeIdentifier>
<urn:ReceiverID>?</urn:ReceiverID>
</urn:Receiver>
<!--Optional:-->
<urn:Service>
<!--Optional:-->
<urn:ServiceMethod>?</urn:ServiceMethod>
<!--Optional:-->
<urn:ServiceName>?</urn:ServiceName>
</urn:Service>
</urn:Destination>
<!--Optional:-->
<urn:Manifest>
<urn:NumberofItems>?</urn:NumberofItems>
<!--1 or more repetitions:-->
<urn:ManifestItem>
<!--Optional:-->
<urn:Description>?</urn:Description>
<!--Optional:-->
<urn:LanguageCode>?</urn:LanguageCode>
<urn:MimeTypeQualifierCode>?</urn:MimeTypeQualifierCode>
<urn:UniformResourceIdentifier>?</urn:UniformResourceIdentifier>
</urn:ManifestItem>
</urn:Manifest>
<urn:Source>
<!--Optional:-->
<urn:Authority>?</urn:Authority>
<!--Optional:-->
<urn:ContactTypeIdentifier>?</urn:ContactTypeIdentifier>
<urn:SenderID>?</urn:SenderID>
</urn:Source>
</urn:BusinessDocumentHeader>
<urn:Portaal_Content>
<urn:Portaal_MeteringPoint>
<urn:EANID>?</urn:EANID>
<urn:MPCommercialCharacteristics>
<urn:ContractCancellationDate>?</urn:ContractCancellationDate>
</urn:MPCommercialCharacteristics>
<urn:Portaal_Mutation>
<!--Optional:-->
<urn:ExternalReference>?</urn:ExternalReference>
<urn:Initiator>?</urn:Initiator>
<!--Optional:-->
<urn:Dossier>
<urn:ID>?</urn:ID>
</urn:Dossier>
</urn:Portaal_Mutation>
</urn:Portaal_MeteringPoint>
</urn:Portaal_Content>
</urn:ContractCancellationRequestEnvelope>
</soapenv:Body>
</soapenv:Envelope>
As you can see, the SoapUI request is far more complete, even though the elements are empty.
C# code (important parts):
_binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
_endpoint = new EndpointAddress(endpointAddress + "xxx");
_proxy = new ContractCancellationPortTypeClient(_binding, _endpoint);
_proxy.ClientCredentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.My,
X509FindType.FindBySubjectName,
"xxx");
_proxy.ContractCancellation(new ContractCancellationRequestEnvelope()
{ Portaal_Content = new ContractCancellationRequestEnvelope_PC()
{ Portaal_MeteringPoint = new ContractCancellationRequestEnvelope_PC_PMP()
{ EANID = request.EanId,
MPCommercialCharacteristics = new ContractCancellationRequestEnvelope_PC_PMP_MPCC()
{ ContractCancellationDate = request.ContractCancellationDate },
Portaal_Mutation = new ContractCancellationRequestEnvelope_PC_PMP_PM()
{ Initiator = request.SupplierEanId,
Dossier = new ContractCancellationRequestEnvelope_PC_PMP_PM_Dossier()
{ ID = "TST0000001" }
}
}
});
In your code, you're generating the Portaal_Content portion of the ContractCancellationRequestEnvelope, but not the BusinessDocumentHeader portion.
If you look at the fault received (via C#) I'm betting that there's one or more required elements in the BusinessDocumentHeader section that are missing:
The error text is XML schema validation error, and the error detail is:
ContractCancellationRequestEnvelope[1]/part1[1]/ContractCancellationRequestEnvelope[1]/BusinessDocumentHeader[1]/Destination[1]
You need to ensure that all required elements are present in your SOAP message.
EDIT
Something like this should do the trick:
ContractCancellationRequestEnvelope reqMsg = new ContractCancellationRequestEnvelope();
reqMsg.BusinessDocumentHeader = new BusinessDocumentHeader()
{ CorrelationTimestamp = "?",
MessageID = "?" };
reqMsg.BusinessDocumentHeader.Destination = new Destination();
reqMsg.BusinessDocumentHeader.Receiver = new Receiver()
{ ReceiverID = "?" };
And so on. Basically, make sure that you create every element that is required.
By the way, you can do nested automatic initialization (as in the code you posted), I simply took a more explicit route in my example for readability.
The service's WSDL will tell you what is required or optional.
If you need more help either provide the URL for the service or post the WSDL.
I have a wsdl file here: "obscured"
I was wondering how can I get the SOAP headers from this file? This looks very cryptic to me, so if someone can point me to a tutorial, it would be great. All I want this is soap string that I need to pass into NSURLConnection, I can do the parsing using NSXMLParser.
For example, this tutorial here: http://www.icodeblog.com/2008/11/03/iphone-programming-tutorial-intro-to-soap-web-services/ shows how to to it, but it doesn't show how to get the SOAP message from the wsdl file.
Thanks!
Download SOAPUI Application (Available for both MAC and PC) from http://www.soapui.org/. I gave that WSDL to SOAP UI and I see GetAdvertisers, GetPlans, GetPlansByAdvertiser,GetReportPostBuy, HelloWorld,Login. For which one are you looking to get SOAP Request. SOAP UI constructs sample request for you. Check it out. If you are having difficulty, for now I am posting all those requests here:
GetAdvertisers:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mss="http://MSS">
<soapenv:Header/>
<soapenv:Body>
<mss:GetAdvertisers>
<mss:userID>?</mss:userID>
</mss:GetAdvertisers>
</soapenv:Body>
</soapenv:Envelope>
GetPlans:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mss="http://MSS">
<soapenv:Header/>
<soapenv:Body>
<mss:GetPlans>
<mss:userID>?</mss:userID>
</mss:GetPlans>
</soapenv:Body>
</soapenv:Envelope>
GetPlansByAdvertiser:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mss="http://MSS">
<soapenv:Header/>
<soapenv:Body>
<mss:GetPlansByAdvertiser>
<mss:UserID>?</mss:UserID>
<!--Optional:-->
<mss:Advertiser>?</mss:Advertiser>
</mss:GetPlansByAdvertiser>
</soapenv:Body>
</soapenv:Envelope>
GetReportPostBuy:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mss="http://MSS">
<soapenv:Header/>
<soapenv:Body>
<mss:GetReportPostBuy>
<mss:UserID>?</mss:UserID>
<mss:PlanID>?</mss:PlanID>
<mss:CompanyID>?</mss:CompanyID>
<!--Optional:-->
<mss:CompanyName>?</mss:CompanyName>
<mss:AdvertiserID>?</mss:AdvertiserID>
<!--Optional:-->
<mss:AdvertiserName>?</mss:AdvertiserName>
<mss:PubdateFrom>?</mss:PubdateFrom>
<mss:PubdateTo>?</mss:PubdateTo>
</mss:GetReportPostBuy>
</soapenv:Body>
</soapenv:Envelope>
Login:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mss="http://MSS">
<soapenv:Header/>
<soapenv:Body>
<mss:Login>
<!--Optional:-->
<mss:username>?</mss:username>
<!--Optional:-->
<mss:password>?</mss:password>
</mss:Login>
</soapenv:Body>
</soapenv:Envelope>