Hi Taher , I filed a JIRA https://issues.apache.org/jira/browse/OFBIZ-10317
Oh, and I'm still interested in your invoke mechanism which I asked earlier? Are you referring to your suggestion of refactoring calculateProductPrice? i have lost the context. for me XMLRPC / SOAP were the only/primary methods of communicating with OFBiz , OOTB was just for verification and creation of control datapoints . regds mallah. On Sat, Mar 24, 2018 at 2:51 PM, Taher Alkhateeb <slidingfilame...@gmail.com > wrote: > I think maybe the best thing to do is create a JIRA with a topic like > "Allowing XML-RPC and SOAP to pass GenericValue objects to services as > IN fields". We can then collaborate together on making a solution. I'm > interested in helping if you like that. > > Oh, and I'm still interested in your invoke mechanism which I asked > earlier? > > On Sat, Mar 24, 2018 at 12:12 PM, Rajesh Mallah <mallah.raj...@gmail.com> > wrote: > > Hello Rishi / Jacques /Taher , > > > > Thanks for the responses. > > > > I feel a generic solution should be devised and I want to put some > effort > > so that an incoming Map is converted to a GenericValue . > > Which is a more appropriate place ModelService or XmlRpcEventHandler > > and where can the change be done in a relatively easier fashion ? > > > > > > regds > > mallah > > > > > > > > On Sat, Mar 24, 2018 at 2:32 PM, Taher Alkhateeb < > slidingfilame...@gmail.com > >> wrote: > > > >> Thinking out loud, maybe one solution in here is to update the logic > >> in ModelService such that a map is automatically casted to a > >> GenericValue, or any object that is "instanceOf" would pass through. > >> The problem of course is how to carry "state" in these objects, which > >> is the reason why I dislike passing objects to services. > >> > >> So another question, I see both SOAP and XML-RPC messages here, but > >> how are you invoking them? Is it just a simple URL or what? > >> > >> On Sat, Mar 24, 2018 at 11:51 AM, Rishi Solanki < > rishisolan...@gmail.com> > >> wrote: > >> > 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 < > mallah.raj...@gmail.com > >> > > >> > 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 < > mallah.raj...@gmail.com > >> > > >> >> 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 } } ); > >> >> > > >> >> > ======================================== > >> >> > > >> >> > > >> >> > > >> >> > >> >