Hi Rajesh, SOAP request or XMLRPC request both uses the standard format conversion basic/regular java supports. That means if you are sending bunch of key value pair wrt a key ... in your case key is product. Then it will always convert it into the Map. So what general practices followed for xml data exchange is already exists.
To have generic value or any other class value in your service IN parameter, you may need to add converter before passing it to service for invoke. That means, your checkMap method must be enabled for this type of conversion. Also this method will be invoked on IN parameter type. Please see XmlRpcEventHandler.getContext() for more details. This should be quick one and should resolve your problem, which enable the conversion of target type. A generic approach also welcome for contribution. :-) HTH! Regards, -- Rishi Solanki Sr Manager, Enterprise Software Development HotWax Systems Pvt. Ltd. Direct: +91-9893287847 http://www.hotwaxsystems.com www.hotwax.co On Sat, Mar 24, 2018 at 12:17 AM, Rajesh Mallah <[email protected]> wrote: > Hi Jacques / List , > > I face the very same problem with SOAP too , pls have a look if the SOAP > message is OK. Please suggest any edits to the SOAP message which i may > try. > > > <!-- start of soap --> > > <?xml version="1.0" encoding="UTF-8"?> > <soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/ > encoding/" > xmlns:ns1="http://ofbiz.apache.org/service/" xmlns:soap=" > http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc=" > http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd=" > http://www.w3.org/2001/XMLSchema" xmlns:xsi=" > http://www.w3.org/2001/XMLSchema-instance"> > <soap:Body> > <ns1:calculateProductPrice> > <ns1:map-Map soapenc:arrayType="soapenc:Array[3]" > xsi:type="soapenc:Array"> > <ns1:map-Entry soapenc:arrayType="xsd:anyType[2]" > xsi:type="soapenc:Array"> > <ns1:map-Key> > <ns1:std-String value="login.username" /> > </ns1:map-Key> > <ns1:map-Value> > <ns1:std-String value="admin" /> > </ns1:map-Value> > </ns1:map-Entry> > <ns1:map-Entry soapenc:arrayType="xsd:anyType[2]" > xsi:type="soapenc:Array"> > <ns1:map-Key> > <ns1:std-String value="login.password" /> > </ns1:map-Key> > <ns1:map-Value> > <ns1:std-String value="ofbiz" /> > </ns1:map-Value> > </ns1:map-Entry> > <ns1:map-Entry soapenc:arrayType="xsd:anyType[2]" > xsi:type="soapenc:Array"> > <ns1:map-Key> > <ns1:std-String value="product" /> > </ns1:map-Key> > <ns1:map-Value> > <ns1:map-Map> > <ns1:map-Entry > soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array"> > <ns1:map-Key> > <ns1:std-String value="productId" /> > </ns1:map-Key> > <ns1:map-Value> > <ns1:std-String value="PROD_SY87B9B8MY" > /> > </ns1:map-Value> > </ns1:map-Entry> > </ns1:map-Map> > </ns1:map-Value> > </ns1:map-Entry> > </ns1:map-Map> > </ns1:calculateProductPrice> > </soap:Body> > </soap:Envelope> > > <!-- end of soap --> > > 2018-03-24 00:08:15,421 |http-nio-8443-exec-2 > |ModelService |E| [ModelService.validate] : > {calculateProductPrice} : (IN) Required test error: > org.apache.ofbiz.service.ServiceValidationException: Type check failed for > field [calculateProductPrice.product]; expected type is > [org.apache.ofbiz.entity.GenericValue]; actual type is [java.util.HashMap] > 2018-03-24 00:08:15,421 |http-nio-8443-exec-2 > |ServiceDispatcher |E| Incoming context (in runSync : > calculateProductPrice) does not match expected requirements > org.apache.ofbiz.service.ServiceValidationException: Type check failed for > field [calculateProductPrice.product]; expected type is > [org.apache.ofbiz.entity.GenericValue]; actual type is [java.util.HashMap] > > > > regds > mallah. > > > > On Fri, Mar 23, 2018 at 3:43 PM, Rajesh Mallah <[email protected]> > wrote: > > > > > Hello Taher , > > > > As suggested i shifted this discussion to the user list from dev. > > > > As you expected the product key has a value which is a > > struct. This maps to java.util.HashMap but the validator > > expects it to be a GenericValue and hence it does not hands it over > > to the service. > > > > > > $ ./007-get-price.pl PROD_SY87B9B8MY > > 2018/03/23 15:34:31 ------------------------------ > > -------------------------------------------------- > > 2018/03/23 15:34:31 REQ >>>>>>>>> <?xml version="1.0" > encoding="UTF-8"?> > > REQ >>>>>>>>> <methodCall> > > REQ >>>>>>>>> <methodName>calculateProductPrice</methodName> > > REQ >>>>>>>>> <params> > > REQ >>>>>>>>> <param> > > REQ >>>>>>>>> <value> > > REQ >>>>>>>>> <struct> > > REQ >>>>>>>>> <member> > > REQ >>>>>>>>> <name>login.password</name> > > REQ >>>>>>>>> <value> > > REQ >>>>>>>>> <string><![CDATA[ofbiz]]></string> > > REQ >>>>>>>>> </value> > > REQ >>>>>>>>> </member> > > REQ >>>>>>>>> <member> > > REQ >>>>>>>>> <name>product</name> > > REQ >>>>>>>>> <value> > > REQ >>>>>>>>> <struct> > > REQ >>>>>>>>> <member> > > REQ >>>>>>>>> <name>productId</name> > > REQ >>>>>>>>> <value> > > REQ >>>>>>>>> <string><![CDATA[PROD_ > > SY87B9B8MY]]></string> > > REQ >>>>>>>>> </value> > > REQ >>>>>>>>> </member> > > REQ >>>>>>>>> </struct> > > REQ >>>>>>>>> </value> > > REQ >>>>>>>>> </member> > > REQ >>>>>>>>> <member> > > REQ >>>>>>>>> <name>login.username</name> > > REQ >>>>>>>>> <value> > > REQ >>>>>>>>> <string><![CDATA[admin]]></string> > > REQ >>>>>>>>> </value> > > REQ >>>>>>>>> </member> > > REQ >>>>>>>>> </struct> > > REQ >>>>>>>>> </value> > > REQ >>>>>>>>> </param> > > REQ >>>>>>>>> </params> > > REQ >>>>>>>>> </methodCall> > > 2018/03/23 15:34:31 ------------------------------ > > -------------------------------------------------- > > 2018/03/23 15:34:31 ------------------------------ > > -------------------------------------------------- > > 2018/03/23 15:34:31 RES <<<<<<<<< <?xml version="1.0" > encoding="UTF-8"?> > > RES <<<<<<<<< <methodResponse > > RES <<<<<<<<< xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/ > > extensions"> > > RES <<<<<<<<< <fault> > > RES <<<<<<<<< <value> > > RES <<<<<<<<< <struct> > > RES <<<<<<<<< <member> > > RES <<<<<<<<< <name>faultCode</name> > > RES <<<<<<<<< <value> > > RES <<<<<<<<< <i4>0</i4> > > RES <<<<<<<<< </value> > > RES <<<<<<<<< </member> > > RES <<<<<<<<< <member> > > RES <<<<<<<<< <name>faultString</name> > > RES <<<<<<<<< <value>Type check failed for field > > RES <<<<<<<<< [calculateProductPrice.product]; expected > > type is > > RES <<<<<<<<< [org.apache.ofbiz.entity.GenericValue]; > > actual type is > > RES <<<<<<<<< [java.util.HashMap]</value> > > RES <<<<<<<<< </member> > > RES <<<<<<<<< </struct> > > RES <<<<<<<<< </value> > > RES <<<<<<<<< </fault> > > RES <<<<<<<<< </methodResponse> > > 2018/03/23 15:34:31 ------------------------------ > > -------------------------------------------------- > > Service: calculateProductPrice faultString:Type check failed for field > > [calculateProductPrice.product]; expected type is > > [org.apache.ofbiz.entity.GenericValue]; actual type is > [java.util.HashMap] > > > > ======================================== > > $ cat 007-get-price.pl > > > > #!/usr/bin/perl > > > > use OFBizClient; > > > > my $ofbiz_client = OFBizClient->new( > > url => 'https://your_ofbiz_server_ > > here/webtools/control/xmlrpc' , > > username=>'admin' , > > password => 'ofbiz' > > ); > > > > my $productId = 'PROD_SY87B9B8MY'; > > $ofbiz_client->call('calculateProductPrice' , { product => { productId > > => $productId } } ); > > > > ======================================== > > > > > > >
