ofbiz的服务(service)export成web service的方法(5)

用xmlrpc调用

经过修改后的ofbiz能够支持java.sql.Date了,但是还是不支持复杂的数据结构,它没有实现SOAP中的comlexType。碰到这种情况的话,可以考虑用xmlrpc来支持。

我们在party下编一个服务,程序如下:
  1. package org.ofbiz.party.party;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.LinkedList;
  6. import java.util.List;
  7. import java.util.Map;
  8. import org.ofbiz.base.util.UtilMisc;
  9. import org.ofbiz.entity.GenericDelegator;
  10. import org.ofbiz.entity.GenericEntityException;
  11. import org.ofbiz.entity.GenericValue;
  12. import org.ofbiz.entity.condition.EntityExpr;
  13. import org.ofbiz.entity.condition.EntityOperator;
  14. import org.ofbiz.service.DispatchContext;
  15. import org.ofbiz.service.ServiceUtil;
  16. public class TestParty {
  17.     
  18.     public static Map findPersonByfirstName(DispatchContext dctx, Map context) {
  19.         GenericDelegator delegator = dctx.getDelegator();
  20.         String firstName = (String)context.get("firstName");
  21.         Map result = new HashMap();
  22.         
  23.         List toBeStored = null;
  24.         List idList = new ArrayList();
  25.         List exprs = new ArrayList();
  26.         // create the query expressions
  27.         exprs.add(new EntityExpr("firstName", EntityOperator.EQUALS, firstName));
  28.         List fList = new ArrayList();
  29.         fList.add("paryId");
  30.         fList.add("firstName");
  31.         fList.add("lastName");
  32.         
  33.         try{
  34.             toBeStored = delegator.findByAnd("Person", exprs);
  35.             Iterator it = toBeStored.iterator();
  36.             while(it.hasNext()){
  37.                 GenericValue p = (GenericValue)it.next();
  38.                 idList.add(UtilMisc.toMap("partyId", (String)p.get("partyId"), 
  39.                                           "firstName", (String)p.get("firstName"),
  40.                                           "lastName", (String)p.get("lastName")));
  41.             }
  42.             result.put("personList", idList);
  43.         }catch(GenericEntityException e){
  44.             return ServiceUtil.returnError("firstName #" + firstName + "not found!");
  45.         }
  46.                 
  47.         return result;
  48.     }   
  49. }

service的配置文件如下:
  1. <service name="findPersonByfirstName" engine="java"
  2.             location="org.ofbiz.party.party.TestParty" invoke="findPersonByfirstName" auth="false" export="true">
  3.         <description>test</description>
  4.         <attribute name="firstName" type="String" mode="IN" optional="false"/>
  5.         <attribute name="personList" type="List" mode="OUT" optional="false"/>
  6.     </service>

可以看到,这个服务的返回值是一个List,而List里面有一个Map,Map中有3个属性(partId,firstName,lastName)。

客户端程序如下:
  1. import java.net.MalformedURLException;
  2. import java.net.URL;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import org.apache.xmlrpc.XmlRpcException;
  8. import org.apache.xmlrpc.client.XmlRpcClient;
  9. import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
  10.     
  11. public class testFindPersonByFirstName {
  12.     /**
  13.      * @param args
  14.      * @throws MalformedURLException 
  15.      * @throws XmlRpcException 
  16.      */
  17.     public static void main(String[] args) throws MalformedURLException, XmlRpcException {
  18.         // TODO Auto-generated method stub
  19.         XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
  20.         config.setServerURL(new URL("http://127.0.0.1:18080/webtools/control/xmlrpc"));
  21.         XmlRpcClient client = new XmlRpcClient();
  22.         client.setConfig(config);
  23.         Object[] params = new Object[]{"Nie"};
  24.         HashMap result = (HashMap) client.execute("findPersonByfirstName", params);
  25.         
  26.         Object[] oz = (Object [])result.get("personList");
  27.         System.out.println("partyId firstName   lastName");
  28.         for(int i=0;i<oz.length;i++){
  29.             HashMap person = (HashMap)oz[i];
  30.             System.out.println(person.get("partyId")+"  "+person.get("firstName")+" "+person.get("lastName"));
  31.         }
  32.     }
  33. }


你可能感兴趣的:(ofbiz的服务(service)export成web service的方法(5))