How to pass complex arguments with zeep in Python - soap

I have a WSDL that contains a complex type like so:
<s:element name="BatchBillPaymentRequest">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="requestData" type="tns:ClientBatchBillPaymentRequestData"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ClientBatchBillPaymentRequestData">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="CallBackUrl" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="BillItems" type="tns:ArrayOfClientBatchBillPaymentRequestDataItem"/>
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfClientBatchBillPaymentRequestDataItem">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="ClientBatchBillPaymentRequestDataItem" nillable="true" type="tns:ClientBatchBillPaymentRequestDataItem"/>
</s:sequence>
</s:complexType>
<s:complexType name="ClientBatchBillPaymentRequestDataItem">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="BillId" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="PayId" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="LoginAccount" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="OrderId" type="s:long"/>
<s:element minOccurs="0" maxOccurs="1" name="AdditionalData" type="s:string"/>
</s:sequence>
</s:complexType>
<s:element name="BatchBillPaymentRequestResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="BatchBillPaymentRequestResult" type="tns:ClientBatchBillPaymentResponseData"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ClientBatchBillPaymentResponseData">
<s:complexContent mixed="false">
<s:extension base="tns:ResponseDataViewModelBase">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="TotalAmount" type="s:long"/>
<s:element minOccurs="1" maxOccurs="1" name="BatchToken" type="s:long"/>
<s:element minOccurs="0" maxOccurs="1" name="BillItems" type="tns:ArrayOfClientBatchBillPaymentResponseDataItem"/>
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
and I did to the following :
client = Client('https://pec.shaparak.ir/newipgservices/bill/billservice.asmx?WSDL')
result = client.service.BatchBillPaymentRequest(CallBackUrl=_callBackUrl, BillItems=[{'BillId': '7381116907223',
'PayId': '15870210',
'LoginAccount': 'qazwsx',
'OrderId': 1000,
'AdditionalData': '1'}])
print(result)
the result return this error:
BatchBillPaymentRequest() got an unexpected keyword argument
'BillItems'. Signature: `requestData
and when I use this code instead of above code:
data = []
data.append({'BillId': '7381116907223', 'PayId': '15870210', 'LoginAccount': 'qazwsx', 'OrderId': 1000, 'AdditionalData': '1'})
wsdl = "https://pec.shaparak.ir/newipgservices/bill/billservice.asmx?WSDL"
client = Client(wsdl=wsdl)
d = dict(CallBackUrl=_callBackUrl, BillItems=data)
result = client.service.BatchBillPaymentRequest(d)
print(result)
in this case the result is: "The input parameter or some of its properties is empty"
webservice link is : webservice link
and method is : method
If anyone knows how to use the above type from the WSDL with zeep, I would be grateful. Thanks.

solved problem ,by this code :
from zeep import Client
data = []
data.append(
{'BillId': '7381116907223',
'PayId': '15870210',
'LoginAccount': 'qazwsx',
'OrderId': '1000',
'AdditionalData': '5'})
client = Client(wsdl=_webservice)
d = {
'CallBackUrl': 'myweb.ir',
'BillItems': {
'ClientBatchBillPaymentRequestDataItem': data
}
}
result = client.service.BatchBillPaymentRequest(d)
print(result)

Related

Element type in xsd is referring its own Complex type

I have xsd like this -
<xs:complexType name="ChoiceListItem">
<xs:sequence>
<xs:element name="childChoices" maxOccurs="unbounded" minOccurs="0" nillable="true" type="tns:ChoiceListItem"/>
<xs:element name="name" nillable="true" type="xsd:string"/>
<xs:element name="stringValue" nillable="true" type="xsd:string"/>
<xs:element name="integerValue" nillable="true" type="xsd:int"/>
</xs:sequence>
</xs:complexType>
Here you can see that my childChoices type is ChoiceListItem under which it is defined. Here is my Java class -
#XmlAccessorType(XmlAccessType.FIELD)
#XmlType(name = "ChoiceListItem", propOrder = {
"childChoices",
"name",
"stringValue",
"integerValue"
})
public class ChoiceListItem {
#XmlElement(nillable = true)
protected List<ChoiceListItem> childChoices;
#XmlElement(required = true, nillable = true)
protected String name;
#XmlElement(required = true, nillable = true)
protected String stringValue;
#XmlElement(required = true, type = Integer.class, nillable = true)
protected Integer integerValue;
When I run it in SOAPUI it did not display the childChoices value but displays the other three items. Here is my output response -
<ns3:getChoiceListItemsResponse xmlns:ns3="http://getservice.service">
<getChoiceListItemsReturn>
<items>
<ChoiceListItem>
<name>AD SERVICE</name>
<stringValue>AD SERVICE</stringValue>
<integerValue xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</ChoiceListItem>
I guess xsd is not defined properly..Can somebody please help me in defining correct xsd in which sequence element type refer to same Complex type?
I have solved it by making changes into my xsd
<xs:complexType name="ChoiceListItem">
<xs:sequence>
<xs:element name="childChoices" nillable="true" type="tns:ChoiceListItemArray"/>
<xs:element name="name" nillable="true" type="xsd:string"/>
<xs:element name="stringValue" nillable="true" type="xsd:string"/>
<xs:element name="integerValue" nillable="true" type="xsd:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ChoiceListItemArray">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="ChoiceListItem" nillable="true" type="tns:ChoiceListItem"/>
</xs:sequence>
</xs:complexType>

how to write a wfs- transaction insert with geoserver/postgrsql

I have a database and a server tomcat / geoserver and I try to exchange data from openlayers.
So i am trying to write a wfs transaction without success. I do not know what's wrong, geometry?
I tried to copy the example provided in the demonstration without further success:
<ows:ExceptionReport version="1.0.0" xsi:schemaLocation="http://www.opengis.net/ows http://ip_address:8080/geoserver/schemas/ows/1.0.0/owsExceptionReport.xsd"><ows:Exception exceptionCode="InvalidParameterValue"><ows:ExceptionText>Error performing insert: Error inserting features</ows:ExceptionText></ows:Exception></ows:ExceptionReport>
my try :
<wfs:Transaction service="WFS" version="1.1.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:cite="http://www.opengeospatial.net/cite"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/WFS-transaction.xsd http://www.opengeospatial.net/cite http://ip_address:8080/geoserver/wfs/DescribeFeatureType?typename=cite:administration">
<wfs:Insert>
<cite:administration>
<cite:geom>
<gml:MultiPolygon xmlns="http://www.opengis.net/gml" srsName="EPSG:2154"><gml:polygonMember><gml:Polygon srsName="EPSG:3857"><gml:exterior><gml:LinearRing srsName="EPSG:2154"><gml:posList srsDimension="2">1033195.5041126036 6284576.928642391 1033176.0281535687 6284534.392003635 1033215.4422350351 6284544.237956143 1033195.5041126036 6284576.928642391</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:polygonMember></gml:MultiPolygon>
</cite:geom>
</cite:administration>
</wfs:Insert>
</wfs:Transaction>
the describeFeatuyreType
<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cite="http://www.opengeospatial.net/cite" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:wfs="http://www.opengis.net/wfs/2.0" elementFormDefault="qualified" targetNamespace="http://www.opengeospatial.net/cite">
<xsd:import namespace="http://www.opengis.net/gml/3.2" schemaLocation="ip_address:8080/geoserver/schemas/gml/3.2.1/gml.xsd"/>
<xsd:complexType name="administrationType">
<xsd:complexContent>
<xsd:extension base="gml:AbstractFeatureType">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="surface" nillable="true" type="xsd:decimal"/>
<xsd:element maxOccurs="1" minOccurs="0" name="annee_prescription" nillable="true" type="xsd:int"/>
<xsd:element maxOccurs="1" minOccurs="0" name="ro" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="numope" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="typope" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="geom" nillable="true" type="gml:MultiSurfacePropertyType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="typemp" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="nomope" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="numoa" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="numprescr" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="tranche" nillable="true" type="xsd:int"/>
<xsd:element maxOccurs="1" minOccurs="0" name="code_tranche" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="surfaceC_ha" nillable="true" type="xsd:decimal"/>
<xsd:element maxOccurs="1" minOccurs="0" name="ratioC_ha" nillable="true" type="xsd:decimal"/>
<xsd:element maxOccurs="1" minOccurs="0" name="amenageur" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="opérateur" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="prescripteur" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="statut_contractuel" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="statut_operationnel" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="administration" substitutionGroup="gml:AbstractFeature" type="cite:administrationType"/>
</xsd:schema>
The srs is EPSG:2154
the openlayers transaction that does not work either :
var wfst = new ol.format.WFS({
featureNS: "http://www.opengeospatial.net/cite",
featureType: "cite:administration"
});
var options = {
srsName: "EPSG:2154",
featureNS: "http://www.opengeospatial.net/cite",
featurePrefix:'cite',
featureType: "cite:administration",
gmlOptions:{featureNS: "http://www.opengeospatial.net/cite",featureType: "cite:administration",srsName: "EPSG:2154"}
};
var node = wfst.writeTransaction(features2154,null,null,options);
console.log('node',node);
var s = new XMLSerializer();
var str = s.serializeToString(node);
result str =
<Transaction xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Insert><cite:administration xmlns:cite="http://www.opengeospatial.net/cite"><cite:geometry><MultiPolygon xmlns="http://www.opengis.net/gml" srsName="EPSG:2154"><polygonMember><Polygon srsName="EPSG:2154"><exterior><LinearRing srsName="EPSG:2154"><posList srsDimension="2">1033187.44577774 6284581.696198352 1033171.7481650712 6284533.302464095 1033221.5049866531 6284544.554293833 1033187.44577774 6284581.696198352</posList></LinearRing></exterior></Polygon></polygonMember></MultiPolygon></cite:geometry><cite:collectedProperties>[object Object]</cite:collectedProperties></cite:administration></Insert></Transaction>
my response :
it lacked the necessary attributes for transaction (not null values in POSTGIS exception)
<wfs:Transaction service="WFS" version="1.1.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:cite="http://www.opengeospatial.net/cite"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/WFS-transaction.xsd http://www.opengeospatial.net/cite http://IP:8080/geoserver/wfs/DescribeFeatureType?typename=cite:prescription">
<wfs:Insert>
<cite:prescription>
<cite:geom>
<gml:MultiPolygon xmlns="http://www.opengis.net/gml" srsName="EPSG:2154"><gml:polygonMember><gml:Polygon srsName="EPSG:2154"><gml:exterior><gml:LinearRing srsName="EPSG:2154"><gml:posList srsDimension="2">1033195.5041126036 6284576.928642391 1033176.0281535687 6284534.392003635 1033215.4422350351 6284544.237956143 1033195.5041126036 6284576.928642391</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:polygonMember></gml:MultiPolygon>
</cite:geom>
<cite:numope>D000000</cite:numope>
<cite:numoa>11111111</cite:numoa>
<cite:annee_prescription>2020</cite:annee_prescription>
<cite:ro>albert</cite:ro>
<cite:typope>diagnostic</cite:typope>
<cite:typemp>prescrite</cite:typemp>
</cite:prescription>
</wfs:Insert>
</wfs:Transaction>

how to extract all values of a XML datasource field to array

I have a XML data source like below:
<xs:element name="block" type="xs:string" minOccurs="0" />
<xs:element name="lot" type="xs:string" minOccurs="0" />
<xs:element name="wafer" type="xs:string" minOccurs="0" />
Now I want to create a formula which need all block+lot as a string with each record as a single line.
so suppose the data is
<xs:element name="block" type="xs:string" minOccurs="0" >A1</block>
<xs:element name="lot" type="xs:string" minOccurs="0" >B1</lot>
<xs:element name="wafer" type="xs:string" minOccurs="0" >C1</wafer>
<xs:element name="block" type="xs:string" minOccurs="0" >A2</block>
<xs:element name="lot" type="xs:string" minOccurs="0" >B2</lot>
<xs:element name="wafer" type="xs:string" minOccurs="0" >C2</wafer>
then the result string is A1B1/nA2B2
How to do it?I tried to use variable and while do loop, but how to let the variable point to next record? Thx.

Error generating web service client from wsdl using apache CXF 3

I am trying to generate the web service client from WSDL , I am quiet new to this so can't figure out the error.
I have tried:
wsimport -keep path-to-wsdl
which gives me this error :
C:\WINDOWS\system32>wsimport -keep E:\NIEsocketWork\sdl.wsdl
parsing WSDL...
[WARNING] src-resolve.4.2: Error resolving component 'tns:GetMerchantRateRequest'. It was detected that 'tns:GetMerchantRateRequest' is in namespace 'http://www.fexcodcc.com/DCC20071126', but components from this namespace are not referenceable from schema document 'file:/E:/NIEsocketWork/sdl.wsdl#types?schema1'. If this is the incorrect namespace, perhaps the prefix of 'tns:GetMerchantRateRequest' needs to be changed. If this is the correct namespace, then an appropriate 'import' tag should be added to 'file:/E:/NIEsocketWork/sdl.wsdl#types?schema1'.
line 20 of file:/E:/NIEsocketWork/sdl.wsdl#types?schema1
[WARNING] src-resolve: Cannot resolve the name 'tns:GetMerchantRateRequest' to a(n) 'type definition' component.
line 20 of file:/E:/NIEsocketWork/sdl.wsdl#types?schema1
[ERROR] undefined simple or complex type 'tns:GetMerchantRateRequest'
line 20 of file:/E:/NIEsocketWork/sdl.wsdl
[ERROR] undefined simple or complex type 'tns:GetMerchantRateResponse'
line 26 of file:/E:/NIEsocketWork/sdl.wsdl
[ERROR] undefined simple or complex type 'tns:GetCardRateRequest'
line 79 of file:/E:/NIEsocketWork/sdl.wsdl
[ERROR] undefined simple or complex type 'tns:GetCardRateResponse'
line 85 of file:/E:/NIEsocketWork/sdl.wsdl
Exception in thread "main" com.sun.tools.internal.ws.wscompile.AbortException
at com.sun.tools.internal.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:129)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2283)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:183)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:126)
at com.sun.tools.internal.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:429)
at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:190)
at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:168)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:159)
at com.sun.tools.internal.ws.WsImport.main(WsImport.java:42)
I have also tried apache cxf 3.1.1 to generate the web service client in eclipse but get this error :
Loading FrontEnd jaxws ...
Loading DataBinding jaxb ...
wsdl2java -client -d C:\Users\Hamza\GalileoWorkspace\NIDCCFexco\.cxftmp/src -classdir C:\Users\Hamza\GalileoWorkspace\NIDCCFexco\build\classes -p http://www.fexcodcc.com/DCC20071126=com.fexcodcc.dcc20071126 -impl -validate -exsh false -dns true -dex true -wsdlLocation file:///E:/NIEsocketWork/sdl.wsdl -verbose -defaultValues -fe jaxws -db jaxb -wv 1.1 file:/E:/NIEsocketWork/sdl.wsdl
wsdl2java - Apache CXF 3.1.1
WSDLToJava Error:
Summary: Failures: 4, Warnings: 0
<<< ERROR!
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetMerchantRateOut> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetMerchantRateResult> can not be found in the schemas
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetCardRateOut> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetCardRateResult> can not be found in the schemas
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetCardRateIn> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetCardRate> can not be found in the schemas
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetMerchantRateIn> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetMerchantRate> can not be found in the schemas
org.apache.cxf.tools.common.ToolException:
Summary: Failures: 4, Warnings: 0
<<< ERROR!
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetMerchantRateOut> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetMerchantRateResult> can not be found in the schemas
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetCardRateOut> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetCardRateResult> can not be found in the schemas
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetCardRateIn> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetCardRate> can not be found in the schemas
Part <parameters> in Message <{http://www.fexcodcc.com/DCC20071126}GetMerchantRateIn> referenced Type <{http://www.fexcodcc.com/DCC20071126}GetMerchantRate> can not be found in the schemas
at org.apache.cxf.tools.validator.internal.WSDL11Validator.isValid(WSDL11Validator.java:139)
at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.validate(JAXWSDefinitionBuilder.java:207)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:204)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:415)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184)
My WSDL file is :
<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions targetNamespace="http://www.fexcodcc.com/DCC20071126"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:tns="http://www.fexcodcc.com/DCC20071126"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:documentation>DCC Gateway (Provides functionality to make requests to the DCC for availability)</wsdl:documentation>
<!-- Types --> <wsdl:types>
<xsd:schema elementFormDefault="qualified" targetNamespace="http:// www.fexcodcc.com/DCC20071126" xmlns:dhs="urn:dhs">
<!-- Type definitions -->
<xsd:element name="GetMerchantRate"> <xsd:complexType>
<xsd:sequence>
<xsd:element name="GetMerchantRateRequest" type="tns:GetMerchantRateRequest" minOccurs="1" maxOccurs="1"/>
</xsd:sequence> </xsd:complexType>
</xsd:element>
<xsd:element name="GetMerchantRateResult"> <xsd:complexType>
<xsd:sequence>
<xsd:element name="GetMerchantRateResponse" type="tns:GetMerchantRateResponse" minOccurs="1" maxOccurs="1" />
</xsd:sequence> </xsd:complexType>
</xsd:element>
<!-- Complex type definitions -->
<xsd:complexType name="GetMerchantRateResponse"> <xsd:sequence>
<xsd:element name="ReferenceNumber" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="ExchangeRate" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="FgnCurCode" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="FgnAmount" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="DccOffered" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ValidHours" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="MarginRatePercentage" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ExchangeRateSourcename" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="CommissionPercentage" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ExchangerateSourceTimestamp" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="MinorUnits" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ResponseCode" type="xsd:string" minOccurs="1" maxOccurs="1" />
</xsd:sequence> </xsd:complexType>
<xsd:complexType name="GetMerchantRateRequest"> <xsd:sequence>
<xsd:element name="ReferenceNumber" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="MerchantId" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="Acquirer" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="FgnCurCode" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="BaseAmount" type="xsd:string" minOccurs="0" maxOccurs="1" />
</xsd:sequence> </xsd:complexType>
<xsd:element name="GetCardRate"> <xsd:complexType>
<xsd:sequence>
<xsd:element name="GetCardRateRequest" type="tns:GetCardRateRequest" minOccurs="1" maxOccurs="1" />
</xsd:sequence> </xsd:complexType>
</xsd:element>
<xsd:element name="GetCardRateResult"> <xsd:complexType>
<xsd:sequence>
<xsd:element name ="GetCardRateResponse" type="tns:GetCardRateResponse" minOccurs="1" maxOccurs="1" />
</xsd:sequence> </xsd:complexType>
</xsd:element>
<!-- Complex type definitions --> <xsd:complexType name="GetCardRateResponse">
<xsd:sequence>
<xsd:element name="ReferenceNumber" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="ExchangeRate" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="FgnCurCode" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="FgnAmount" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="DccOffered" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ValidHours" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="MarginRatePercentage" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ExchangeRateSourceName" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="CommissionPercentage" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ExchangeRateSourceTimestamp" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="MinorUnits" type="xsd:string" minOccurs="0" maxOccurs="1" /><xsd:element name="ResponseCode" type="xsd:string" minOccurs="1" maxOccurs="1" />
</xsd:sequence> </xsd:complexType>
<xsd:complexType name="GetCardRateRequest"> <xsd:sequence>
<xsd:element name="ReferenceNumber" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="CardId" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="MerchantId" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="Acquirer" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="BaseAmount" type="xsd:string" minOccurs="0" maxOccurs="1" />
</xsd:sequence> </xsd:complexType>
</xsd:schema> </wsdl:types>
<!-- Dhs Server Messages --> <wsdl:message name="GetMerchantRateIn">
<wsdl:part name="parameters" element="tns:GetMerchantRate" /> </wsdl:message>
<wsdl:message name="GetMerchantRateOut">
<wsdl:part name="parameters" element="tns:GetMerchantRateResult" /> </wsdl:message>
<wsdl:message name="GetCardRateIn">
<wsdl:part name="parameters" element="tns:GetCardRate" /> </wsdl:message>
<wsdl:message name="GetCardRateOut">
<wsdl:part name="parameters" element="tns:GetCardRateResult" /> </wsdl:message>
<!-- End of Dhs Server Messages -->
<!-- Port types --> <wsdl:portType name="DHS">
<wsdl:operation name="getMerchantRate">
<wsdl:documentation>Get Exchange Rate for merchant</wsdl:documentation> <wsdl:input message="tns:GetMerchantRateIn" />
<wsdl:output message="tns:GetMerchantRateOut" /> </wsdl:operation>
<wsdl:operation name="getCardRate">
<wsdl:documentation>Get Dynamic Currency conversion</wsdl:documentation> <wsdl:input message="tns:GetCardRateIn" />
<wsdl:output message="tns:GetCardRateOut" /> </wsdl:operation>
<!-- End of Dhs Server Operations --> </wsdl:portType>
<!-- WSDL bindings -->
<wsdl:binding name="DHS12" type="tns:DHS"> <wsdl:documentation>
<wsi:Claim conformsTo="http://ws-i.org/profiles/basic/1.1" /> </wsdl:documentation>
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<wsdl:operation name="getMerchantRate">
<soap12:operation soapAction="http://www.fexcodcc.com/DCC20071126/ getMerchantRate" style="document" />
<wsdl:input>
<soap12:body use="literal" /> </wsdl:input>
<wsdl:output>
<soap12:body use="literal" /> </wsdl:output>
</wsdl:operation>
<wsdl:operation name="getCardRate">
<soap12:operation soapAction="http://www.fexcodcc.com/DCC20071126/ getCardRate" style="document" />
<wsdl:input>
<soap12:body use="literal" /> </wsdl:input>
<wsdl:output>
<soap12:body use="literal" /> </wsdl:output>
</wsdl:operation> </wsdl:binding>
<!-- WSDL service -->
<wsdl:service name="DHS">
<wsdl:documentation> DHS Server(Provides functionality to make DCC availability requests)</wsdl:documentation>
<wsdl:port name="DHS12" binding="tns:DHS12">
<soap12:address location="dhstest2.fexcodccapps.com/axis2/services/DHS" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
please help me figure out the error in any of the ways, whether wsimport or apache cxf. I will be really grateful.
in the schema declaration there is a space too much after the slashes: http:// www.fexcodcc.com/DCC20071126 instead of http://www.fexcodcc.com/DCC20071126.
try removing that space and it validates.

Accessing SOAP API with Perl. Long Int -problems?

I have at my hands a SOAP API that has plenty of functionality, but from which I only need two methods: adding user to a database and deleting user from a database.
Currently I am locked to Perl as the language for this task.
Because deleting a user takes in as the only parameter the "id" of the user (not "userId" as in username), I need to define it myself rather than relying on MySQL's auto_increment.
Relevant parts from the WSDL:
<xs:element name="saveLocalUserEx">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="user" nillable="true" type="ns2:LocalUser"/>
<xs:element minOccurs="0" name="requestingUser" nillable="true" type="xs:string"/></xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="LocalUser">
<xs:sequence>
<xs:element minOccurs="0" name="dbData" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="domainName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="enabled" type="xs:boolean"/>
<xs:element minOccurs="0" name="firstName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="id" nillable="true" type="xs:long"/>
<xs:element minOccurs="0" name="lastName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="loginId" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="loginPasswordHash" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="loginPasswordHashType" type="xs:int"/>
<xs:element minOccurs="0" name="preOrSelfProvisioned" type="xs:boolean"/>
<xs:element minOccurs="0" name="DEFAULT_PASSWORD_HASH_TYPE" type="xs:int"/>
<xs:element minOccurs="0" name="PKCS5_REVERSIBLE_HASH_TYPE" type="xs:int"/>
<xs:element minOccurs="0" name="SHA1_NON_REVERSIBLE_HASH_TYPE" type="xs:int"/>
<xs:element minOccurs="0" name="STR_DEFAULT_ADMIN_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STR_DEFAULT_DOMAIN" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STR_DEFAULT_SPONSOR_NAME" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Here are (relevant parts) of the code I first wrote.
my $soap = SOAP::Lite
->uri($uri)
->proxy($proxy);
sub SOAP::Transport::HTTP::Client::get_basic_credentials {
return 'abc' => 'abc';
}
my $test_id = 1515;
# Preparing data for API query for saving the new user.
my $data = SOAP::Data->name("LocalUser" =>
\SOAP::Data->value(
SOAP::Data->name("loginId" => $new_username),
SOAP::Data->name("enabled" => true),
SOAP::Data->name("domainName" => $domainname),
SOAP::Data->name("loginPasswordHash" => $hash),
SOAP::Data->name("id" => $test_id),
SOAP::Data->name("description" => 'Guest User Account generated on: ' . localtime()),
SOAP::Data->name("displayName" => 'Guest')
)
);
my $som = $soap->saveLocalUserEx($data);
print Dumper $som->result();
It almost does the job. In the matter of fact; API accepts this query, result is success and a new user is generated. The problem is, that id field in the database is still MySQL auto_incremented, and not 1515 I tried to give it this time. Then I started thinking that maybe I need to type the parameter explicitly to long, because wsdl states the type for id is xs:long.
I've tried modifying my code with:
SOAP::Data->type('xs:long')->name("id" => $test),
and
SOAP::Data->type('long')->name("id" => $test),
But these didn't help. API query succeeds, but id is not made to 1515.
Do you guys have any idea how to make this work? Thanks!